26#include <unordered_map>
38 return value_cmp<numeric::uint256_t>(
a,
b);
43 if (
a->mv_size !=
b->mv_size) {
46 if (
a->mv_size == 1) {
47 return value_cmp<uint8_t>(
a,
b);
49 return value_cmp<uint64_t>(
a,
b);
54 return value_cmp<uint64_t>(
a,
b);
59 , _name(
std::move(name))
119 msgpack::pack(
buffer, blockData);
136 std::vector<uint8_t>
data;
139 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(blockData);
150 std::vector<uint8_t>
data;
155 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(payload);
162 msgpack::pack(
buffer, payload);
170 std::vector<uint8_t>
data;
177 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(payload);
194 std::vector<uint8_t>
data;
201 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(payload);
212 msgpack::pack(
buffer, payload);
220 msgpack::pack(
buffer, metaData);
229 std::vector<uint8_t>
data;
232 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(metaData);
256 throw std::runtime_error(
"Failed to find node when attempting to increase reference count");
280 throw std::runtime_error(
"Failed to find node when attempting to decrease reference count");
282 if (--nodeData.
ref == 0) {
303 auto is_valid = [&](
const MDB_val&
data) {
306 return tmp < sizeLimit.value();
308 if (!sizeLimit.has_value()) {
319 std::vector<uint8_t>
data;
322 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(nodeData);
330 msgpack::pack(
buffer, nodeData);
void set_or_increment_node_reference_count(const fr &nodeHash, NodePayload &nodeData, WriteTransaction &tx)
bool get_node_data(const fr &nodeHash, NodePayload &nodeData, TxType &tx)
void delete_block_data(const block_number_t &blockNumber, WriteTransaction &tx)
LMDBDatabase::Ptr _indexToBlockDatabase
bool find_block_for_index(const index_t &index, block_number_t &blockNumber, ReadTransaction &tx)
void write_node(const fr &nodeHash, const NodePayload &nodeData, WriteTransaction &tx)
void write_block_data(const block_number_t &blockNumber, const BlockPayload &blockData, WriteTransaction &tx)
void write_leaf_index(const fr &leafValue, const index_t &leafIndex, WriteTransaction &tx)
void delete_block_index(const index_t &sizeAtBlock, const block_number_t &blockNumber, WriteTransaction &tx)
bool read_node(const fr &nodeHash, NodePayload &nodeData, ReadTransaction &tx)
const std::string & get_name() const
void delete_leaf_by_hash(const fr &leafHash, WriteTransaction &tx)
void decrement_node_reference_count(const fr &nodeHash, NodePayload &nodeData, WriteTransaction &tx)
LMDBTreeStore(std::string directory, std::string name, uint64_t mapSizeKb, uint64_t maxNumReaders)
void write_meta_data(const TreeMeta &metaData, WriteTransaction &tx)
bool read_block_data(const block_number_t &blockNumber, BlockPayload &blockData, ReadTransaction &tx)
void get_stats(TreeDBStats &stats, ReadTransaction &tx)
LMDBDatabase::Ptr _blockDatabase
LMDBDatabase::Ptr _leafHashToPreImageDatabase
void write_block_index_data(const block_number_t &blockNumber, const index_t &sizeAtBlock, WriteTransaction &tx)
void delete_leaf_index(const fr &leafValue, WriteTransaction &tx)
void increment_node_reference_count(const fr &nodeHash, WriteTransaction &tx)
LMDBDatabase::Ptr _nodeDatabase
fr find_low_leaf(const fr &leafValue, index_t &index, const std::optional< index_t > &sizeLimit, ReadTransaction &tx)
LMDBDatabase::Ptr _leafKeyToIndexDatabase
bool read_meta_data(TreeMeta &metaData, ReadTransaction &tx)
std::unique_ptr< LMDBDatabaseCreationTransaction > Ptr
LMDBEnvironment::SharedPtr _environment
LMDBDatabaseCreationTransaction::Ptr create_db_transaction() const
bool get_value_or_greater(T &key, K &data, const LMDBDatabase &db) const
bool get_value(T &key, std::vector< uint8_t > &data, const LMDBDatabase &db) const
bool get_value_or_previous(T &key, K &data, const LMDBDatabase &db, const std::function< bool(const MDB_val &)> &is_valid) const
void put_value(T &key, Value &data, const LMDBDatabase &db)
void delete_value(T &key, const LMDBDatabase &db)
const std::vector< FF > data
uint8_t buffer[RANDOM_BUFFER_SIZE]
int block_key_cmp(const MDB_val *a, const MDB_val *b)
const std::string LEAF_PREIMAGES_DB
const std::string NODES_DB
uint64_t BlockMetaKeyType
const std::string BLOCK_INDICES_DB
uint64_t LeafIndexKeyType
const std::string BLOCKS_DB
int fr_key_cmp(const MDB_val *a, const MDB_val *b)
const std::string LEAF_INDICES_DB
int index_key_cmp(const MDB_val *a, const MDB_val *b)
int size_cmp(const MDB_val *a, const MDB_val *b)
void deserialise_key(void *data, uint8_t &key)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
void add_block(const block_number_t &blockNumber)
void delete_block(const block_number_t &blockNumber)
block_number_t get_min_block_number()
uint64_t physicalFileSize
DBStats blockIndicesDBStats
DBStats leafIndicesDBStats
DBStats leafPreimagesDBStats