12#ifndef joedb_db_encoded_file_Database_declared
13#define joedb_db_encoded_file_Database_declared
39 using joedb::Record_Id;
50 std::vector<joedb::Blob> field_value_of_data;
51 std::vector<int64_t> field_value_of_size;
52 std::vector<int64_t> field_value_of_offset;
54 joedb::Freedom_Keeper freedom_keeper;
56 size_t size()
const {
return freedom_keeper.size();}
58 void resize(
size_t new_size)
60 field_value_of_data.resize(new_size);
61 field_value_of_size.resize(new_size);
62 field_value_of_offset.resize(new_size);
63 freedom_keeper.resize(new_size);
76 template<
typename E = joedb::Exception>
79 std::string s(
"joedb::db::encoded_file: ");
130 std::copy_n(value, size, target);
136 int64_t field_value_of_size
153 std::copy_n(value, size, target);
159 int64_t field_value_of_offset
176 std::copy_n(value, size, target);
198 template<
class Comparator>
199 std::vector<id_of_buffer>
sorted_buffer(Comparator comparator)
const;
225 class container_of_buffer
231 container_of_buffer(
const Database &db): db(db) {}
248 bool operator==(
const iterator &i)
const {
return index == i.index;}
249 bool operator!=(
const iterator &i)
const {
return index != i.index;}
250 iterator &
operator++() {index = fk->get_next(index);
return *
this;}
251 iterator
operator++(
int) {
auto copy = *
this; index = fk->get_next(index);
return copy;}
252 iterator &
operator--() {index = fk->get_previous(index);
return *
this;}
253 iterator
operator--(
int) {
auto copy = *
this; index = fk->get_previous(index);
return copy;}
259 bool is_empty()
const {
return db.storage_of_buffer.freedom_keeper.get_used_count() ==
Record_Id{0};}
273 template<
class Comparator>
276 std::vector<id_of_buffer> result;
278 result.emplace_back(x);
279 std::sort(result.begin(), result.end(), comparator);
Store all the tables of the database.
static void throw_exception(std::string_view message)
void internal_delete_buffer(Record_Id record_id)
container_of_buffer get_buffer_table() const
void internal_update_buffer__size(Record_Id record_id, int64_t field_value_of_size)
int64_t get_size(id_of_buffer record) const
bool is_valid(id_of_buffer id) const
joedb::Blob get_data(id_of_buffer record) const
void internal_update_vector_buffer__data(Record_Id record_id, size_t size, const joedb::Blob *value)
detail::data_of_buffer storage_of_buffer
id_of_buffer next(id_of_buffer id) const
void internal_insert_buffer(Record_Id record_id)
void internal_update_buffer__offset(Record_Id record_id, int64_t field_value_of_offset)
void internal_update_buffer__data(Record_Id record_id, joedb::Blob field_value_of_data)
static id_of_buffer null_buffer()
bool is_valid_record_id_for_buffer(Record_Id record_id) const
id_of_buffer previous(id_of_buffer id) const
std::vector< id_of_buffer > sorted_buffer(Comparator comparator) const
void internal_update_vector_buffer__offset(Record_Id record_id, size_t size, const int64_t *value)
friend class container_of_buffer
void internal_vector_insert_buffer(Record_Id record_id, size_t size)
int64_t get_offset(id_of_buffer record) const
void internal_update_vector_buffer__size(Record_Id record_id, size_t size, const int64_t *value)
bool operator==(const iterator &i) const
id_of_buffer operator*() const
std::forward_iterator_tag iterator_category
std::ptrdiff_t difference_type
bool operator!=(const iterator &i) const
friend class container_of_buffer
returned by Database::get_buffer_table
id_of_buffer get_end() const
id_of_buffer last() const
id_of_buffer first() const
joedb::index_t get_size() const
static id_of_buffer get_at(size_t i)
bool is_valid_at(size_t i)
Strongly-typed wrapper around an integer representing a row of the buffer table.
constexpr Record_Id get_record_id() const
constexpr auto get_id() const
#define JOEDB_RELEASE_ASSERT(x)
always-tested assertion (release and debug mode)
constexpr const char * get_version()
Automatically generated by joedbc.
constexpr index_t to_underlying(Record_Id id)