4#include "../Containers/Array.h"
5#include "../Containers/Vector.h"
6#include "../Containers/VectorMap.h"
7#include "../Foundation/Buffer.h"
8#include "../Strings/String.h"
19template <
typename MemberVisitor,
typename Container,
typename ItemType,
int N>
22 [[nodiscard]]
static constexpr bool build(MemberVisitor&) {
return true; }
25template <
typename T,
int N>
28 static constexpr bool IsPacked =
false;
31 [[nodiscard]]
static auto data(
SC::Array<T, N>&
object) {
return object.data(); }
32 [[nodiscard]]
static bool resizeWithoutInitializing(
SC::Array<T, N>&
object,
size_t newSize)
34 return object.resizeWithoutInitializing(
min(newSize,
static_cast<size_t>(N)));
36 [[nodiscard]]
static bool resize(
SC::Array<T, N>&
object,
size_t newSize)
38 return object.resize(
min(newSize,
static_cast<size_t>(N)));
42template <
typename T,
int N>
43struct Reflect<SC::Array<T, N>>
47 template <
typename MemberVisitor>
48 [[nodiscard]]
static constexpr bool build(MemberVisitor& builder)
51 if (not VectorArrayVTable<MemberVisitor,
SC::Array<T, N>, T, N>::build(builder))
55 constexpr TypeInfo::ArrayInfo arrayInfo = {
false, N};
56 if (not builder.addType(MemberVisitor::Type::template createArray<
SC::Array<T, N>>(
"SC::Array", 1, arrayInfo)))
60 return builder.addType(MemberVisitor::Type::template createGeneric<T>());
65struct Reflect<SC::Vector<T>>
69 template <
typename MemberVisitor>
70 [[nodiscard]]
static constexpr bool build(MemberVisitor& builder)
73 if (not VectorArrayVTable<MemberVisitor,
SC::Vector<T>, T, -1>::build(builder))
77 constexpr TypeInfo::ArrayInfo arrayInfo = {
false, 0};
78 if (not builder.addType(MemberVisitor::Type::template createArray<
SC::Vector<T>>(
"SC::Vector", 1, arrayInfo)))
82 return builder.addType(MemberVisitor::Type::template createGeneric<T>());
87struct ExtendedTypeInfo<SC::Vector<T>>
89 static constexpr bool IsPacked =
false;
91 [[nodiscard]]
static auto size(
const SC::Vector<T>&
object) {
return object.size(); }
92 [[nodiscard]]
static auto data(
SC::Vector<T>&
object) {
return object.data(); }
93 [[nodiscard]]
static bool resizeWithoutInitializing(
SC::Vector<T>&
object,
size_t newSize)
95 return object.resizeWithoutInitializing(newSize);
97 [[nodiscard]]
static bool resize(
SC::Vector<T>&
object,
size_t newSize) {
return object.resize(newSize); }
101struct Reflect<SC::Buffer>
105 template <
typename MemberVisitor>
106 [[nodiscard]]
static constexpr bool build(MemberVisitor& builder)
109 if (not VectorArrayVTable<MemberVisitor, SC::Buffer, char, -1>::build(builder))
113 constexpr TypeInfo::ArrayInfo arrayInfo = {
false, 0};
114 if (not builder.addType(MemberVisitor::Type::template createArray<SC::Buffer>(
"SC::Buffer", 1, arrayInfo)))
118 return builder.addType(MemberVisitor::Type::template createGeneric<char>());
122struct ExtendedTypeInfo<SC::Buffer>
124 static constexpr bool IsPacked =
false;
126 [[nodiscard]]
static auto size(
const Buffer&
object) {
return object.size(); }
127 [[nodiscard]]
static auto data(Buffer&
object) {
return object.data(); }
128 [[nodiscard]]
static bool resizeWithoutInitializing(Buffer&
object,
size_t newSize)
130 return object.resizeWithoutInitializing(newSize);
132 [[nodiscard]]
static bool resize(Buffer&
object,
size_t newSize) {
return object.resize(newSize, 0); }
135template <
typename Key,
typename Value,
typename Container>
136struct Reflect<VectorMap<Key, Value, Container>> : ReflectStruct<VectorMap<Key, Value, Container>>
140 template <
typename MemberVisitor>
141 [[nodiscard]]
static constexpr bool visit(MemberVisitor&& builder)
158SC_REFLECT_STRUCT_FIELD(0, encoding)
159SC_REFLECT_STRUCT_FIELD(1, data)
160SC_REFLECT_STRUCT_LEAVE()
constexpr const T & min(const T &t1, const T &t2)
Finds the minimum of two values.
Definition: Compiler.h:300
#define SC_COMPILER_OFFSETOF(Class, Field)
Returns offset of Class::Field in bytes.
Definition: Compiler.h:111
unsigned char uint8_t
Platform independent (1) byte unsigned int.
Definition: PrimitiveTypes.h:36
TypeCategory
Enumeration of possible category types recognized by Reflection.
Definition: Reflection.h:32
@ TypeVector
Type is a vector type.
StringEncoding
String Encoding (Ascii, Utf8, Utf16)
Definition: StringIterator.h:17
A contiguous sequence of elements kept inside its inline storage.
Definition: Array.h:23
size_t size() const
Returns the size of the array.
Definition: Array.h:181
Class template used to check if a given type IsPacked property is true at compile time.
Definition: Reflection.h:334
Definition: ReflectionSC.h:21
A non-modifiable owning string with associated encoding.
Definition: String.h:29
A contiguous sequence of heap allocated elements.
Definition: Vector.h:259
A map holding VectorMapItem key-value pairs in an unsorted Vector.
Definition: VectorMap.h:35