Path: blob/master/thirdparty/jolt_physics/Jolt/ObjectStream/SerializableAttributeEnum.h
9906 views
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)1// SPDX-FileCopyrightText: 2021 Jorrit Rouwe2// SPDX-License-Identifier: MIT34#pragma once56#ifdef JPH_OBJECT_STREAM78#include <Jolt/ObjectStream/SerializableAttribute.h>9#include <Jolt/ObjectStream/ObjectStream.h>1011JPH_NAMESPACE_BEGIN1213//////////////////////////////////////////////////////////////////////////////////////////14// Macros to add properties to be serialized15//////////////////////////////////////////////////////////////////////////////////////////1617template <class MemberType>18inline void AddSerializableAttributeEnum(RTTI &inRTTI, uint inOffset, const char *inName)19{20inRTTI.AddAttribute(SerializableAttribute(inName, inOffset,21[]() -> const RTTI *22{23return nullptr;24},25[](int inArrayDepth, EOSDataType inDataType, [[maybe_unused]] const char *inClassName)26{27return inArrayDepth == 0 && inDataType == EOSDataType::T_uint32;28},29[](IObjectStreamIn &ioStream, void *inObject)30{31uint32 temporary;32if (OSReadData(ioStream, temporary))33{34*reinterpret_cast<MemberType *>(inObject) = static_cast<MemberType>(temporary);35return true;36}37return false;38},39[](IObjectStreamOut &ioStream, const void *inObject)40{41static_assert(sizeof(MemberType) <= sizeof(uint32));42uint32 temporary = uint32(*reinterpret_cast<const MemberType *>(inObject));43OSWriteData(ioStream, temporary);44},45[](IObjectStreamOut &ioStream)46{47ioStream.WriteDataType(EOSDataType::T_uint32);48}));49}5051// JPH_ADD_ENUM_ATTRIBUTE_WITH_ALIAS52#define JPH_ADD_ENUM_ATTRIBUTE_WITH_ALIAS(class_name, member_name, alias_name) \53AddSerializableAttributeEnum<decltype(class_name::member_name)>(inRTTI, offsetof(class_name, member_name), alias_name);5455// JPH_ADD_ENUM_ATTRIBUTE56#define JPH_ADD_ENUM_ATTRIBUTE(class_name, member_name) \57JPH_ADD_ENUM_ATTRIBUTE_WITH_ALIAS(class_name, member_name, #member_name);5859JPH_NAMESPACE_END6061#else6263#define JPH_ADD_ENUM_ATTRIBUTE_WITH_ALIAS(...)64#define JPH_ADD_ENUM_ATTRIBUTE(...)6566#endif // JPH_OBJECT_STREAM676869