4#include "Stroika/Foundation/Memory/Common.h"
13 template <
typename FIELD_VALUE_TYPE,
typename OWNING_OBJECT>
15 : fTypeInfo_{typeid (FIELD_VALUE_TYPE)}
17 fPTR2MEM_.
push_back (as_bytes (span{&member, 1}));
18 Assert (fPTR2MEM_.
size () <= 2 * sizeof (
void*));
24 template <
typename FIELD_VALUE_TYPE,
typename OWNING_OBJECT>
27 auto p2m = GetP2M_<FIELD_VALUE_TYPE, OWNING_OBJECT> ();
28 return &(
object->*p2m);
30 template <
typename FIELD_VALUE_TYPE,
typename OWNING_OBJECT>
33 auto p2m = GetP2M_<FIELD_VALUE_TYPE, OWNING_OBJECT> ();
34 return &(
object->*p2m);
36 template <
typename OWNING_OBJECT>
39 return GetAddressOfMember<byte, OWNING_OBJECT> (
object);
41 template <
typename OWNING_OBJECT>
44 return GetAddressOfMember<byte, OWNING_OBJECT> (
object);
46 inline strong_ordering StructFieldMetaInfo::operator<=> (
const StructFieldMetaInfo& rhs)
const
48 strong_ordering r = Memory::CompareBytes (span{this->fPTR2MEM_}, span{rhs.fPTR2MEM_});
49 if (r == strong_ordering::equal) {
50 if (fTypeInfo_ < rhs.fTypeInfo_) {
51 r = strong_ordering::less;
53 else if (fTypeInfo_ == rhs.fTypeInfo_) {
54 r = strong_ordering::equal;
57 r = strong_ordering::greater;
62 inline bool StructFieldMetaInfo::operator== (
const StructFieldMetaInfo& rhs)
const
64 return fTypeInfo_ == rhs.fTypeInfo_ and Memory::CompareBytes (span{this->fPTR2MEM_}, span{rhs.fPTR2MEM_}) == strong_ordering::equal;
66 template <
typename FIELD_VALUE_TYPE,
typename OWNING_OBJECT>
67 inline FIELD_VALUE_TYPE OWNING_OBJECT ::*
const StructFieldMetaInfo::GetP2M_ ()
const
69 Require (
sizeof (
const FIELD_VALUE_TYPE OWNING_OBJECT::*) == fPTR2MEM_.size ());
70 using X = FIELD_VALUE_TYPE OWNING_OBJECT::*
const;
71 X* aaa =
reinterpret_cast<X*
> (fPTR2MEM_.
data ());
nonvirtual pointer data() noexcept
returns a (possibly const) pointer to the start of the live buffer data. This return value can be inv...
nonvirtual void push_back(Common::ArgByValueType< T > e)
nonvirtual size_t size() const noexcept