aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/NvParameterized/include/AbstractSerializer.h
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /APEX_1.4/NvParameterized/include/AbstractSerializer.h
downloadphysx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz
physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip
Initial commit:
PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167]
Diffstat (limited to 'APEX_1.4/NvParameterized/include/AbstractSerializer.h')
-rw-r--r--APEX_1.4/NvParameterized/include/AbstractSerializer.h173
1 files changed, 173 insertions, 0 deletions
diff --git a/APEX_1.4/NvParameterized/include/AbstractSerializer.h b/APEX_1.4/NvParameterized/include/AbstractSerializer.h
new file mode 100644
index 00000000..1b7b43b1
--- /dev/null
+++ b/APEX_1.4/NvParameterized/include/AbstractSerializer.h
@@ -0,0 +1,173 @@
+// This code contains NVIDIA Confidential Information and is disclosed to you
+// under a form of NVIDIA software license agreement provided separately to you.
+//
+// Notice
+// NVIDIA Corporation and its licensors retain all intellectual property and
+// proprietary rights in and to this software and related documentation and
+// any modifications thereto. Any use, reproduction, disclosure, or
+// distribution of this software and related documentation without an express
+// license agreement from NVIDIA Corporation is strictly prohibited.
+//
+// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
+// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
+// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
+// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
+//
+// Information and code furnished is believed to be accurate and reliable.
+// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
+// information or for any infringement of patents or other rights of third parties that may
+// result from its use. No license is granted by implication or otherwise under any patent
+// or patent rights of NVIDIA Corporation. Details are subject to change without notice.
+// This code supersedes and replaces all information previously supplied.
+// NVIDIA Corporation products are not authorized for use as critical
+// components in life support devices or systems without express written approval of
+// NVIDIA Corporation.
+//
+// Copyright (c) 2008-2013 NVIDIA Corporation. All rights reserved.
+
+#ifndef PX_ABSTRACT_SERIALIZER_H
+#define PX_ABSTRACT_SERIALIZER_H
+
+#include "nvparameterized/NvParameterized.h"
+#include "nvparameterized/NvParameterizedTraits.h"
+#include "nvparameterized/NvSerializer.h"
+
+#include "NvSerializerInternal.h"
+#include "NvTraitsInternal.h"
+
+#include "SerializerCommon.h"
+
+namespace NvParameterized
+{
+
+// Base for other serializers which takes care of common stuff
+
+class AbstractSerializer : public Serializer
+{
+public:
+ AbstractSerializer(Traits *traits):
+ mDoUpdate(true),
+ mPlatform(GetCurrentPlatform()),
+ mTraits(traits) {}
+
+ virtual ~AbstractSerializer() {}
+
+ Traits *getTraits() const { return mTraits; }
+
+ //This is used in static Serializer::deserializer
+ void setTraits(Traits *traits) { mTraits = traits; }
+
+ void setAutoUpdate(bool doUpdate)
+ {
+ mDoUpdate = doUpdate;
+ }
+
+ Serializer::ErrorType peekInplaceAlignment(physx::PxFileBuf& /*stream*/, uint32_t& /*align*/)
+ {
+ return Serializer::ERROR_NOT_IMPLEMENTED;
+ }
+
+ Serializer::ErrorType setTargetPlatform(const SerializePlatform &platform)
+ {
+ mPlatform = platform;
+ return Serializer::ERROR_NONE; //Only pdb cares about platforms
+ }
+
+ Serializer::ErrorType serialize(physx::PxFileBuf &stream,const NvParameterized::Interface **objs, uint32_t nobjs, bool doMetadata)
+ {
+#ifdef WITHOUT_APEX_SERIALIZATION
+ PX_UNUSED(stream);
+ PX_UNUSED(objs);
+ PX_UNUSED(nobjs);
+ PX_UNUSED(doMetadata);
+
+ return Serializer::ERROR_NOT_IMPLEMENTED;
+#else
+
+ NV_BOOL_ERR_CHECK_WARN_RETURN(
+ stream.isOpen(),
+ Serializer::ERROR_STREAM_ERROR,
+ "Stream not opened" );
+
+ for(uint32_t i = 0; i < nobjs; ++i)
+ {
+ NV_BOOL_ERR_CHECK_WARN_RETURN(
+ objs[i]->callPreSerializeCallback() == 0,
+ Serializer::ERROR_PRESERIALIZE_FAILED,
+ "Preserialize callback failed" );
+ }
+
+ return internalSerialize(stream, objs, nobjs, doMetadata);
+#endif
+ }
+
+ using Serializer::deserialize;
+ virtual Serializer::ErrorType deserialize(physx::PxFileBuf &stream, Serializer::DeserializedData &res, bool &isUpdated)
+ {
+ NV_BOOL_ERR_CHECK_WARN_RETURN(
+ stream.isOpen(),
+ Serializer::ERROR_STREAM_ERROR,
+ "Stream not opened" );
+
+ isUpdated = false;
+ bool doesNeedUpdate = true;
+ NV_ERR_CHECK_RETURN( internalDeserialize(stream, res, doesNeedUpdate) );
+ return doesNeedUpdate && mDoUpdate ? upgrade(res, isUpdated) : Serializer::ERROR_NONE;
+ }
+
+ using Serializer::deserializeInplace;
+ Serializer::ErrorType deserializeInplace(void *data, uint32_t dataLen, Serializer::DeserializedData &res, bool &isUpdated)
+ {
+ isUpdated = false;
+ bool doesNeedUpdate = true;
+ NV_ERR_CHECK_RETURN( internalDeserializeInplace(data, dataLen, res, doesNeedUpdate) );
+ return doesNeedUpdate && mDoUpdate ? upgrade(res, isUpdated) : Serializer::ERROR_NONE;
+ }
+
+protected:
+
+ bool mDoUpdate;
+ SerializePlatform mPlatform;
+ Traits *mTraits;
+
+#ifndef WITHOUT_APEX_SERIALIZATION
+ virtual Serializer::ErrorType internalSerialize(
+ physx::PxFileBuf &stream,
+ const NvParameterized::Interface **objs,
+ uint32_t n,
+ bool doMetadata) = 0;
+#endif
+
+ // doesNeedUpdate allows serializer to avoid costly depth-first scanning of included refs
+ virtual Serializer::ErrorType internalDeserialize(
+ physx::PxFileBuf &stream,
+ Serializer::DeserializedData &res,
+ bool &doesNeedUpdate) = 0;
+
+ // See note for internalDeserialize
+ virtual Serializer::ErrorType internalDeserializeInplace(
+ void * /*data*/,
+ uint32_t /*dataLen*/,
+ Serializer::DeserializedData & /*res*/,
+ bool & /*doesNeedUpdate*/)
+ {
+ DEBUG_ALWAYS_ASSERT();
+ return Serializer::ERROR_NOT_IMPLEMENTED;
+ }
+
+private:
+ Serializer::ErrorType upgrade(Serializer::DeserializedData &res, bool &isUpdated)
+ {
+ //Upgrade legacy objects
+ NV_BOOL_ERR_CHECK_WARN_RETURN(
+ UpgradeLegacyObjects(res, isUpdated, mTraits),
+ Serializer::ERROR_CONVERSION_FAILED,
+ "Upgrading legacy objects failed" );
+
+ return Serializer::ERROR_NONE;
+ }
+};
+
+} // namespace NvParameterized
+
+#endif