1#ifndef joedb_Table_declared
2#define joedb_Table_declared
21 std::map<Field_Id, Field> fields;
22 std::map<Field_Id, std::string> field_names;
27 auto find_field_from_id(
Field_Id field_id)
29 const auto it = fields.find(field_id);
30 if (it == fields.end())
35 auto find_field_from_id(
Field_Id field_id)
const
37 return const_cast<Table *
>(
this)->find_field_from_id(field_id);
43 throw Exception(
"update: invalid record_id");
49 const std::map<Field_Id, Field> &
get_fields()
const {
return fields;}
60 #define TYPE_MACRO(type, return_type, type_id, R, W)\
61 return_type get_##type_id(Record_Id rid, Field_Id fid) const\
63 return find_field_from_id(fid)->second.get_##type_id(rid);\
65 void update_##type_id(Record_Id record_id,\
69 const auto it = find_field_from_id(field_id);\
70 check_record_id(record_id);\
71 it->second.set_##type_id(record_id, value);\
73 void update_vector_##type_id(Record_Id record_id,\
78 const auto it = find_field_from_id(field_id);\
79 check_record_id(record_id);\
80 check_record_id(record_id + ptrdiff_t(size) - 1);\
81 it->second.set_vector_##type_id(record_id, size, value);\
83 type *get_own_##type_id##_storage(Record_Id record_id, Field_Id field_id)\
85 const auto it = find_field_from_id(field_id);\
86 check_record_id(record_id);\
87 return it->second.get_own_##type_id##_storage(record_id);\
89 const type *get_own_##type_id##_storage(Record_Id record_id, Field_Id field_id) const\
91 return const_cast<Table *>(this)->get_own_##type_id##_storage(record_id, field_id);\
bool is_used(ptrdiff_t index) const override
ptrdiff_t size() const override
void delete_record(Record_Id record_id)
const std::map< Field_Id, Field > & get_fields() const
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)
const Compact_Freedom_Keeper & get_freedom() const
size_t get_storage_capacity() const
constexpr std::underlying_type< Table_Id >::type to_underlying(Table_Id id)