11 for (
const auto &[fid, fname]: field_names)
22 throw Exception(
"add_field: name already used");
23 if (current_field_id ==
Field_Id(std::numeric_limits<std::underlying_type<Field_Id>::type>::max()))
24 throw Exception(
"add_field: reached maximum field count");
27 fields.try_emplace(current_field_id, type, freedom.
size());
28 field_names.try_emplace(current_field_id, name);
35 const auto it = fields.find(field_id);
36 if (it == fields.end())
37 throw Exception(
"drop_field: invalid field_id");
38 field_names.erase(field_id);
48 for (
auto &field: fields)
50 while (freedom.
get_size() <= record_id)
53 else if (!freedom.
is_free(record_id))
54 throw Exception(
"insert: record_id already in use");
56 freedom.
use(record_id);
64 freedom.
free(record_id);
75 for (
auto &field: fields)
76 field.second.resize(freedom.
size());
81 for (
size_t i = 0; i < size; i++)
Record_Id get_size() 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)
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)
void free(Record_Id index)
void delete_record(Record_Id record_id)
void delete_vector(Record_Id record_id, size_t size)
void drop_field(Field_Id field_id)
Field_Id find_field(const std::string &name) const
void insert_vector(Record_Id record_id, size_t size)
void add_field(const std::string &name, const Type &type)
void insert_record(Record_Id record_id)
#define JOEDB_RELEASE_ASSERT(x)
always-tested assertion (release and debug mode)
constexpr index_t to_underlying(Record_Id id)