Cogs.Core
Field.inl
1#include "TypeDatabase.h"
2#include "Field.h"
3
4#include "../ComponentModel/Attributes.h"
5
6namespace Cogs
7{
8 namespace Reflection
9 {
10 template<typename ClassType, typename FieldType>
11 Field::Field(const Name& name, FieldType ClassType::* field) :
12 name(name),
13 offset(memberOffset(field)),
14 byteSize(sizeof(FieldType)),
15 typeId(TypeDatabase::getType<FieldType>().getTypeId())
16 {
17 if constexpr (std::is_array<FieldType>{}) {
19 arrayDimensions = std::extent<FieldType>{};
20 } else if constexpr (std::is_pointer<FieldType>{}) {
22 } else if constexpr (std::is_enum<FieldType>{}) {
23 // Enum fields must be same size as int as Cogs bridge copies 4 bytes.
24 static_assert(sizeof(FieldType) == sizeof(int), "Only int compatible enums supported.");
25 }
26 }
27
28 template<typename ClassType, typename FieldType>
29 FieldWrapper<Field, FieldType> Field::create(const Name& name, FieldType ClassType::* field)
30 {
32 }
33
34 template<typename T, typename U>
36 {
38
39 return *this;
40 }
41
42 template<typename T, typename U>
44 {
46
47 return *this;
48 }
49
50 template<typename T, typename U>
52 {
54
55 return *this;
56 }
57 }
58}
Field & add(T attribute)
Adds the given attribute.
Definition: Field.h:177
FieldFlags fieldFlags
Flags.
Definition: Field.h:206
size_t arrayDimensions
Dimensions.
Definition: Field.h:218
Name name
Name of the field.
Definition: Field.h:209
static FieldWrapper< Field, FieldType > create(const Name &name, FieldType ClassType::*field)
Creates a new field instance, returning a wrapper for type safe continuation style setup.
Definition: Field.inl:29
Field(const Name &name, FieldType ClassType::*field)
Initializes a new field instance with the given name and the given pointer to member data.
Definition: Field.inl:11
Manages all Type instances currently created in the system.
Definition: TypeDatabase.h:105
@ Array
Field is an array.
@ Pointer
Field is a pointer.
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
size_t memberOffset(FieldType ClassType::*ptr)
Find the offset of a pointer to member in a class or struct.
Adds default value information to an object.
Definition: Attributes.h:16
Adds range information to an object.
Definition: Attributes.h:38
Adds step size information to an object.
Definition: Attributes.h:65
Convenience wrapper for adding attributes during field creation in a type safe manner.
Definition: Field.h:19
FieldWrapper & setStep(U step)
Convenience method for setting the valid value step of the field.
Definition: Field.inl:51
FieldWrapper & setDefault(U value)
Convenience method for setting the default value of the field.
Definition: Field.inl:35
FieldWrapper & setRange(U min, U max)
Convenience method for setting the valid value range of the field.
Definition: Field.inl:43
Represents an unique name.
Definition: Name.h:70