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 decltype(fields)::iterator find_field_from_id(
Field_Id field_id)
29 const auto it = fields.find(field_id);
30 if (it == fields.end())
35 decltype(fields)::const_iterator find_field_from_id(
Field_Id field_id)
const
37 return const_cast<Table *
>(
this)->find_field_from_id(field_id);
40 void check_record_id(Record_Id record_id)
42 if (!freedom.
is_used(record_id))
43 throw Exception(
"update: invalid record_id");
49 const std::map<Field_Id, Field> &
get_fields()
const {
return fields;}
61 #define TYPE_MACRO(type, return_type, type_id, R, W)\
62 return_type get_##type_id(Record_Id rid, Field_Id fid) const\
64 return find_field_from_id(fid)->second.get_##type_id(rid);\
66 void update_##type_id(Record_Id record_id,\
70 const auto it = find_field_from_id(field_id);\
71 check_record_id(record_id);\
72 it->second.set_##type_id(record_id, value);\
74 void update_vector_##type_id(Record_Id record_id,\
79 const auto it = find_field_from_id(field_id);\
80 check_record_id(record_id);\
81 check_record_id(record_id + index_t(size) - 1);\
82 it->second.set_vector_##type_id(record_id, size, value);\
84 type *get_own_##type_id##_storage(Record_Id record_id, Field_Id field_id)\
86 const auto it = find_field_from_id(field_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(Record_Id index) const
void delete_record(Record_Id record_id)
const std::map< Field_Id, Field > & get_fields() const
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
const Freedom_Keeper & get_freedom() 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)
size_t get_storage_capacity() const