1#ifndef joedb_Freedom_Keeper_declared
2#define joedb_Freedom_Keeper_declared
21 std::vector<uint8_t> is_free_v;
22 std::vector<Record_Id> next_v;
23 std::vector<Record_Id> previous_v;
42 this->freedom_size = size;
49 next_p = next_v.data() + 2;
94 for (
size_t i = 0; i <
size; i++)
116 for (
size_t i = 0; i <
size; i++)
205 for (
size_t i = 0; i <
size; ++i)
212 for (
size_t i = 0; i <
size; ++i)
227 size_t size()
const {
return size_t(free_size);}
231 if (used_size == free_size)
255 if (result == used_size)
258 if (result == free_size)
271 return used_size - 1;
276 if (used_size == free_size)
279 return free_size - 1;
287 if (result == used_size - 1)
300 return index >= used_size;
305 return index >= used_size;
312 index +
size >= index &&
313 index +
size <= used_size;
320 if (free_size == used_size)
329 if (free_size <
size)
335 if (index == used_size && used_size < free_size)
346 if (index == used_size - 1 && index >=
Record_Id{0})
357 if (index == used_size && used_size +
size <= free_size)
359 used_size = used_size +
size;
368 if (index +
size == used_size)
370 used_size = used_size -
size;
387 void lose_compactness()
401#define SWITCH(f) (dense ? dfk.f : lfk.f)
451 if (!dfk.
free(index))
Record_Id get_previous(Record_Id index) const
Record_Id get_first_used() const
Record_Id get_next(Record_Id index) const
bool is_used(Record_Id index) const
bool is_free(Record_Id index) const
Record_Id get_first_free() const
bool is_used_vector(Record_Id index, size_t size) const
bool use(Record_Id index)
bool free_vector(Record_Id index, size_t size)
bool use_vector(Record_Id index, size_t size)
Record_Id get_used_count() const
bool free(Record_Id index)
Record_Id get_free_record()
bool is_free_vector(Record_Id index, size_t size) const
void resize(Record_Id size)
Record_Id get_size() const
static constexpr Record_Id free_list
static constexpr Record_Id used_list
Record_Id get_free_record()
Record_Id get_last_used() const
void resize(size_t new_size)
Record_Id get_size() const
Record_Id get_first_free() const
void use(Record_Id index)
bool is_free_vector(Record_Id index, size_t size) const
void free_vector(Record_Id index, size_t size)
Record_Id get_last_free() const
void use_vector(Record_Id index, size_t size)
bool is_used_vector(Record_Id index, size_t size) const
bool is_used(Record_Id index) const
bool is_free(Record_Id index) const
void resize(Record_Id new_size)
Record_Id get_previous(Record_Id index) const
Record_Id get_next(Record_Id index) const
Record_Id get_used_count() const
void free(Record_Id index)
Record_Id get_first_used() const
Record_Id next_f(Record_Id id) const
uint8_t is_free_f(Record_Id id) const
void resize_vector(Record_Id size)
List_Data(const List_Data &)=delete
Record_Id & previous_f(Record_Id id)
Record_Id & next_f(Record_Id id)
uint8_t & is_free_f(Record_Id id)
Record_Id previous_f(Record_Id id) const
List_Data & operator=(const List_Data &)=delete
Record_Id get_size() const
bool is_used_vector(Record_Id index, size_t size) const
Record_Id get_previous(const Record_Id index) const
Record_Id get_free_record()
bool is_used(Record_Id index) const
void free_vector(Record_Id index, size_t size)
Record_Id get_used_count() const
Record_Id get_first_used() const
bool is_free(Record_Id index) const
Record_Id get_next(const Record_Id index) const
Record_Id get_first_free() const
bool is_free_vector(Record_Id index, size_t size) const
void resize(const Record_Id new_size)
void free(Record_Id index)
void use_vector(Record_Id index, size_t size)
void use(const Record_Id index)
constexpr bool is_null() const
constexpr bool is_not_null() const
#define JOEDB_DEBUG_ASSERT(x)
assertion tested in debug mode
#define JOEDB_RELEASE_ASSERT(x)
always-tested assertion (release and debug mode)
constexpr index_t to_underlying(Record_Id id)