Lines 67-73
public:
Link Here
|
67 |
|
67 |
|
68 |
static DataNodeView create(blockstore::BlockStore *blockStore, const DataNodeLayout &layout, uint16_t formatVersion, uint8_t depth, uint32_t size, cpputils::Data data) { |
68 |
static DataNodeView create(blockstore::BlockStore *blockStore, const DataNodeLayout &layout, uint16_t formatVersion, uint8_t depth, uint32_t size, cpputils::Data data) { |
69 |
ASSERT(data.size() <= layout.datasizeBytes(), "Data is too large for node"); |
69 |
ASSERT(data.size() <= layout.datasizeBytes(), "Data is too large for node"); |
70 |
cpputils::Data serialized = _serialize(layout, formatVersion, depth, size, std::move(data)); |
70 |
cpputils::Data serialized = (_serialize)(layout, formatVersion, depth, size, std::move(data)); |
71 |
ASSERT(serialized.size() == layout.blocksizeBytes(), "Wrong block size"); |
71 |
ASSERT(serialized.size() == layout.blocksizeBytes(), "Wrong block size"); |
72 |
auto block = blockStore->create(serialized); |
72 |
auto block = blockStore->create(serialized); |
73 |
return DataNodeView(std::move(block)); |
73 |
return DataNodeView(std::move(block)); |
Lines 75-81
public:
Link Here
|
75 |
|
75 |
|
76 |
static DataNodeView initialize(cpputils::unique_ref<blockstore::Block> block, const DataNodeLayout &layout, uint16_t formatVersion, uint8_t depth, uint32_t size, cpputils::Data data) { |
76 |
static DataNodeView initialize(cpputils::unique_ref<blockstore::Block> block, const DataNodeLayout &layout, uint16_t formatVersion, uint8_t depth, uint32_t size, cpputils::Data data) { |
77 |
ASSERT(data.size() <= DataNodeLayout(block->size()).datasizeBytes(), "Data is too large for node"); |
77 |
ASSERT(data.size() <= DataNodeLayout(block->size()).datasizeBytes(), "Data is too large for node"); |
78 |
cpputils::Data serialized = _serialize(layout, formatVersion, depth, size, std::move(data)); |
78 |
cpputils::Data serialized = (_serialize)(layout, formatVersion, depth, size, std::move(data)); |
79 |
ASSERT(serialized.size() == block->size(), "Block has wrong size"); |
79 |
ASSERT(serialized.size() == block->size(), "Block has wrong size"); |
80 |
block->write(serialized.data(), 0, serialized.size()); |
80 |
block->write(serialized.data(), 0, serialized.size()); |
81 |
return DataNodeView(std::move(block)); |
81 |
return DataNodeView(std::move(block)); |
Lines 83-89
public:
Link Here
|
83 |
|
83 |
|
84 |
static DataNodeView overwrite(blockstore::BlockStore *blockStore, const DataNodeLayout &layout, uint16_t formatVersion, uint8_t depth, uint32_t size, const blockstore::BlockId &blockId, cpputils::Data data) { |
84 |
static DataNodeView overwrite(blockstore::BlockStore *blockStore, const DataNodeLayout &layout, uint16_t formatVersion, uint8_t depth, uint32_t size, const blockstore::BlockId &blockId, cpputils::Data data) { |
85 |
ASSERT(data.size() <= layout.datasizeBytes(), "Data is too large for node"); |
85 |
ASSERT(data.size() <= layout.datasizeBytes(), "Data is too large for node"); |
86 |
cpputils::Data serialized = _serialize(layout, formatVersion, depth, size, std::move(data)); |
86 |
cpputils::Data serialized = (_serialize)(layout, formatVersion, depth, size, std::move(data)); |
87 |
auto block = blockStore->overwrite(blockId, std::move(serialized)); |
87 |
auto block = blockStore->overwrite(blockId, std::move(serialized)); |
88 |
return DataNodeView(std::move(block)); |
88 |
return DataNodeView(std::move(block)); |
89 |
} |
89 |
} |
Lines 143-149
public:
Link Here
|
143 |
} |
143 |
} |
144 |
|
144 |
|
145 |
private: |
145 |
private: |
146 |
static cpputils::Data _serialize(const DataNodeLayout &layout, uint16_t formatVersion, uint8_t depth, uint32_t size, cpputils::Data data) { |
146 |
static cpputils::Data (_serialize)(const DataNodeLayout &layout, uint16_t formatVersion, uint8_t depth, uint32_t size, cpputils::Data data) { |
147 |
cpputils::Data result(layout.blocksizeBytes()); |
147 |
cpputils::Data result(layout.blocksizeBytes()); |
148 |
cpputils::serialize<uint16_t>(result.dataOffset(layout.FORMAT_VERSION_OFFSET_BYTES), formatVersion); |
148 |
cpputils::serialize<uint16_t>(result.dataOffset(layout.FORMAT_VERSION_OFFSET_BYTES), formatVersion); |
149 |
cpputils::serialize<uint8_t>(result.dataOffset(layout.DEPTH_OFFSET_BYTES), depth); |
149 |
cpputils::serialize<uint8_t>(result.dataOffset(layout.DEPTH_OFFSET_BYTES), depth); |