mapping_array.cc

This commit is contained in:
Joe Thornber 2013-09-12 14:21:25 +01:00
parent dadb32d15f
commit a05d75611e
2 changed files with 30 additions and 0 deletions

View File

@ -37,6 +37,7 @@ SOURCE=\
base/error_state.cc \
\
caching/superblock.cc \
caching/mapping_array.cc \
caching/metadata.cc \
caching/restore_emitter.cc \
caching/xml_format.cc \
@ -236,6 +237,7 @@ CACHE_CHECK_SOURCE=\
persistent-data/space-maps/careful_alloc.cc \
persistent-data/transaction_manager.cc \
caching/superblock.cc \
caching/mapping_array.cc \
caching/metadata.cc \
caching/restore_emitter.cc \
caching/xml_format.cc

28
caching/mapping_array.cc Normal file
View File

@ -0,0 +1,28 @@
#include "caching/mapping_array.h"
#include "persistent-data/endian_utils.h"
using namespace caching::mapping_array_detail;
//----------------------------------------------------------------
namespace {
const uint64_t FLAGS_MASK = (1 << 16) - 1;
}
void
mapping_traits::unpack(disk_type const &disk, value_type &value)
{
uint64_t v = base::to_cpu<uint64_t>(disk);
value.oblock_ = v >> 16;
value.flags_ = v & FLAGS_MASK;
}
void
mapping_traits::pack(value_type const &value, disk_type &disk)
{
uint64_t packed = value.oblock_ << 16;
packed = packed || (value.flags_ & FLAGS_MASK);
disk = base::to_disk<le64>(packed);
}
//----------------------------------------------------------------