serializeUtilities.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:3k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef SERIALIZE_UTILITIES_H
  9. #define SERIALIZE_UTILITIES_H
  10. #include <Common/Serialize/Packfile/hkPackfileWriter.h>
  11. #include <Common/Base/Reflection/hkTypeInfo.h>
  12. #include <Common/Base/Reflection/Registry/hkTypeInfoRegistry.h>
  13. extern const hkTypeInfo hkClassTypeInfo;
  14. extern const hkTypeInfo hkClassMemberTypeInfo;
  15. extern const hkTypeInfo hkClassEnumTypeInfo;
  16. // Saves and reloads the object using Reader and Writer of the provided types and performs the test using TestFunc.
  17. // TestFunc must compare two objects of type Object and return HK_SUCCESS if the objects are considered equal.
  18. template<typename Reader, typename Writer, typename Object>
  19. static void serializeTest(const Object& object, const hkClass& klass, const hkTypeInfo& typeInfo, hkResult (*TestFunc)(const Object& o1, const Object& o2) )
  20. {
  21. hkArray<char> newBuf;
  22. {
  23. hkOstream os(newBuf);
  24. Writer writer;
  25. writer.setContents( &object, klass );
  26. hkPackfileWriter::Options options;
  27. writer.save( os.getStreamWriter(), options );
  28. }
  29. hkOstream("dump.txt").write( newBuf.begin(), newBuf.getSize() );
  30. {
  31. hkTypeInfoRegistry localTypeInfoReg;
  32. // default classes
  33. localTypeInfoReg.registerTypeInfo(&hkClassTypeInfo);
  34. localTypeInfoReg.registerTypeInfo(&hkClassMemberTypeInfo);
  35. localTypeInfoReg.registerTypeInfo(&hkClassEnumTypeInfo);
  36. // unit test class
  37. localTypeInfoReg.registerTypeInfo(&typeInfo);
  38. hkIstream is(newBuf.begin(), newBuf.getSize());
  39. Reader reader;
  40. reader.loadEntireFile( is.getStreamReader() );
  41. Object* copy = static_cast<Object*>( reader.getContentsWithRegistry( klass.getName(), &localTypeInfoReg ) );
  42. HK_TEST( TestFunc(object, *copy) == HK_SUCCESS );
  43. }
  44. }
  45. #endif // SERIALIZE_UTILITIES_H
  46. /*
  47. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  48. * Confidential Information of Havok.  (C) Copyright 1999-2009
  49. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  50. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  51. * rights, and intellectual property rights in the Havok software remain in
  52. * Havok and/or its suppliers.
  53. * Use of this software for evaluation purposes is subject to and indicates
  54. * acceptance of the End User licence Agreement for this product. A copy of
  55. * the license is included with this software and is also available at www.havok.com/tryhavok.
  56. */