1#ifndef joedb_Field_declared
2#define joedb_Field_declared
19 std::variant<std::monostate
20 #define TYPE_MACRO(cpp_type, return_type, type_id, R, W)\
21 , std::vector<cpp_type>
25 static constexpr size_t index(
Record_Id record_id)
37 #define TYPE_MACRO(cpp_type, return_type, type_id, R, W)\
38 case Type::Type_Id::type_id:\
39 column.emplace<std::vector<cpp_type>>(size);\
52 #define TYPE_MACRO(cpp_type, return_type, type_id, R, W)\
53 case Type::Type_Id::type_id:\
54 std::get<std::vector<cpp_type>>(column).resize(size);\
60 #define TYPE_MACRO(cpp_type, return_type, type_id, R, W)\
61 return_type get_##type_id(Record_Id record_id) const\
63 return std::get<std::vector<cpp_type>>(column)[index(record_id)];\
65 void set_##type_id(Record_Id record_id, return_type value)\
67 std::get<std::vector<cpp_type>>(column)[index(record_id)] = value;\
69 const cpp_type *get_vector_##type_id() const\
71 return &std::get<std::vector<cpp_type>>(column)[0];\
73 void set_vector_##type_id(Record_Id record_id,\
75 const cpp_type *value)\
78 &std::get<std::vector<cpp_type>>(column)[index(record_id)];\
80 std::copy_n(value, size, target);\
82 cpp_type *get_own_##type_id##_storage(Record_Id record_id)\
84 return &std::get<std::vector<cpp_type>>(column)[index(record_id)];\
86 const cpp_type *get_own_##type_id##_storage(Record_Id record_id) const\
88 return &std::get<std::vector<cpp_type>>(column)[index(record_id)];\
Field(const Type &type, size_t size)
const Type & get_type() const
Type_Id get_type_id() const
constexpr std::underlying_type< Table_Id >::type to_underlying(Table_Id id)