diff options
Diffstat (limited to 'include/framework/InternalLevel.h')
| -rw-r--r-- | include/framework/InternalLevel.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/include/framework/InternalLevel.h b/include/framework/InternalLevel.h index c489063..d28ba5f 100644 --- a/include/framework/InternalLevel.h +++ b/include/framework/InternalLevel.h @@ -28,18 +28,18 @@ class InternalLevel { typedef MutableBuffer<R> Buffer; public: InternalLevel(ssize_t level_no, size_t shard_cap) - : m_level_no(level_no), m_shard_cnt(0), m_shards(new std::vector<Shard*>(shard_cap, nullptr)) + : m_level_no(level_no), m_shard_cnt(0), m_shards(new std::vector<Shard*>(shard_cap, nullptr), free_shards) {} // Create a new memory level sharing the shards and repurposing it as previous level_no + 1 // WARNING: for leveling only. InternalLevel(InternalLevel* level) : m_level_no(level->m_level_no + 1), m_shard_cnt(level->m_shard_cnt) - , m_shards(level->m_shards) { + , m_shards(level->m_shards, free_shards) { assert(m_shard_cnt == 1 && m_shards->size() == 1); } - ~InternalLevel() {} + ~InternalLevel() { } // WARNING: for leveling only. // assuming the base level is the level new level is merging into. (base_level is larger.) @@ -181,6 +181,10 @@ private: size_t m_shard_cnt; size_t m_shard_size_cap; + static void free_shards(std::vector<Shard*>* vec) { + for (size_t i=0; i<vec->size(); i++) delete (*vec)[i]; + } + std::shared_ptr<std::vector<Shard*>> m_shards; }; |