diff --git a/dependencies/egg-library/include/egg/mesh_header.hpp b/dependencies/egg-library/include/egg/mesh_header.hpp index 17e2030..1578e92 100644 --- a/dependencies/egg-library/include/egg/mesh_header.hpp +++ b/dependencies/egg-library/include/egg/mesh_header.hpp @@ -27,4 +27,10 @@ struct MeshFileHeader OffsetArray strips; }; +static_assert(std::is_standard_layout_v == true); +static_assert(std::is_standard_layout_v> == true); +static_assert(std::is_standard_layout_v> == true); +static_assert(std::is_standard_layout_v> == true); +static_assert(std::is_standard_layout_v == true); + #pragma pack(pop) \ No newline at end of file diff --git a/dependencies/egg-library/include/egg/offset_pointer.hpp b/dependencies/egg-library/include/egg/offset_pointer.hpp index 1379520..b59f8cb 100644 --- a/dependencies/egg-library/include/egg/offset_pointer.hpp +++ b/dependencies/egg-library/include/egg/offset_pointer.hpp @@ -8,12 +8,12 @@ #include #endif -template +template struct OffsetPointer { // Offset (in bytes) // This is generally an offset from the first byte of THIS OffsetPointer - size_type_T offset; + int32_t offset; T* get_ptr() { @@ -26,14 +26,27 @@ struct OffsetPointer } using elem_T = T; - static_assert(std::is_arithmetic_v == true); }; -template -struct OffsetArray: public OffsetPointer +template +struct OffsetArray { + // Offset (in bytes) + // This is generally an offset from the first byte of THIS OffsetPointer + int32_t offset; + // Length of the array (in bytes) - size_type_T length; + int32_t length; + + T* get_ptr() + { + return reinterpret_cast(((uint8_t*)this) + offset); + } + + const T* get_ptr() const + { + return reinterpret_cast(((const uint8_t*)this) + offset); + } T* get_array() { @@ -45,13 +58,13 @@ struct OffsetArray: public OffsetPointer return this->get_ptr(); } - T& operator[](size_t index) + T& operator[](int32_t index) { assert(index >= 0 && index < num_elements()); return get_array()[index]; } - const T& operator[](size_t index) const + const T& operator[](int32_t index) const { assert(index >= 0 && index < num_elements()); return get_array()[index]; @@ -77,7 +90,6 @@ struct OffsetArray: public OffsetPointer return &get_array()[num_elements()]; } - #ifdef __cpp_lib_span std::span get_span() { @@ -85,12 +97,12 @@ struct OffsetArray: public OffsetPointer } #endif - size_type_T num_elements() const + int32_t num_elements() const { return length / sizeof(T); } - void set_num_elements(size_type_T num_elements) + void set_num_elements(int32_t num_elements) { length = num_elements * sizeof(T); } diff --git a/dependencies/egg-library/src/egg.cpp b/dependencies/egg-library/src/egg.cpp index 621b643..c35d061 100644 --- a/dependencies/egg-library/src/egg.cpp +++ b/dependencies/egg-library/src/egg.cpp @@ -1,4 +1,5 @@ #include "egg/math_types.hpp" +#include "egg/mesh_header.hpp" #include