From f037399ee351545a87a0459dc4a271a7415962dc Mon Sep 17 00:00:00 2001 From: Reece Date: Wed, 22 Mar 2023 14:41:10 +0000 Subject: [PATCH] [*] SOO size is now pushed between module boundaries via a default ctor argument --- Include/auROXTL/Objects/SOO.hpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/Include/auROXTL/Objects/SOO.hpp b/Include/auROXTL/Objects/SOO.hpp index 018d61e..4acefcb 100644 --- a/Include/auROXTL/Objects/SOO.hpp +++ b/Include/auROXTL/Objects/SOO.hpp @@ -18,17 +18,12 @@ #define _AUROXTL_INTERRFACE_SOO_THIS(FullType) (reinterpret_cast(this)) -// ??!?! -#if !defined(_ZAUFE_FE_1_FIRST) -#define _ZAUFE_FE_1_FIRST(a, b) -#endif - #define _AUROXTL_INTERRFACE_SOO_EMITTER_0(a) AU_EMIT_FIRST a AU_EMIT_SECOND a #define _AUROXTL_INTERRFACE_SOO_EMITTER_1(a) , AU_EMIT_FIRST a AU_EMIT_SECOND a #define _AUROXTL_INTERRFACE_SOO_EMITTER_2(a) AU_EMIT_SECOND a #define _AUROXTL_INTERRFACE_SOO_EMITTER_3(a) , AU_EMIT_SECOND a -#define AUROXTL_INTERFACE_SOO_HDR_(vis, type, maxSize, ...) \ +#define AUROXTL_INTERFACE_SOO_HDR_(vis, type, maxSize, ...) \ protected: \ char padding[maxSize] {}; \ inline type(std::nullptr_t) \ @@ -36,10 +31,10 @@ public: \ static const AuUInt kSSOPaddedSize = maxSize; \ static const AuUInt kSSORealSize; \ - vis type(AU_FOR_EACH_FIRST(_AUROXTL_INTERRFACE_SOO_EMITTER_0, _AUROXTL_INTERRFACE_SOO_EMITTER_1, ## __VA_ARGS__));\ + vis type(AU_FOR_EACH_FIRST(_AUROXTL_INTERRFACE_SOO_EMITTER_0, _AUROXTL_INTERRFACE_SOO_EMITTER_1, ## __VA_ARGS__, (AuUInt32, uSOOSize = kSSOPaddedSize)));\ vis ~type(); -#define AUROXTL_INTERFACE_SOO_HDR_EX(vis, Type, extends, targetSize, ...) \ +#define AUROXTL_INTERFACE_SOO_HDR_EX(vis, Type, extends, targetSize, ...)\ struct Type ## SOO \ { \ AUROXTL_INTERFACE_SOO_HDR_(vis, Type ## SOO, targetSize, ## __VA_ARGS__) \ @@ -83,10 +78,10 @@ using Type ## SOO_t = Type ## SOO; #define AUROXTL_INTERFACE_SOO_HDR(Type, extends, targetSize, ...) \ AUROXTL_INTERFACE_SOO_HDR_EX(, Type, extends, targetSize, ## __VA_ARGS__) -#define AUROXTL_INTERFACE_SOO_SRC_EX(vis, Type, FullType, ...) \ -vis Type ## SOO::Type ## SOO(AU_FOR_EACH_FIRST(_AUROXTL_INTERRFACE_SOO_EMITTER_0, _AUROXTL_INTERRFACE_SOO_EMITTER_1, ## __VA_ARGS__)) \ +#define AUROXTL_INTERFACE_SOO_SRC_EX(vis, Type, FullType, ...) \ +vis Type ## SOO::Type ## SOO(AU_FOR_EACH_FIRST(_AUROXTL_INTERRFACE_SOO_EMITTER_0, _AUROXTL_INTERRFACE_SOO_EMITTER_1, ## __VA_ARGS__, (AuUInt32, uSize))) \ { \ - if (kSSORealSize > kSSOPaddedSize) \ + if (kSSORealSize > uSize) \ { \ AuMemoryPanic("SOO out of overhead: " \ _AUROXTL_INTERFACE_SOO_TYPE2NAME(Type)); \