gwnavruntime/blob/blobfieldarray.h Source File

blobfieldarray.h
Go to the documentation of this file.
1 /*
2 * Copyright 2015 Autodesk, Inc. All rights reserved.
3 * Use of this software is subject to the terms of the Autodesk license agreement and any attachments or Appendices thereto provided at the time of installation or download,
4 * or which otherwise accompanies this software in either electronic or hard copy form, or which is signed by you and accepted by Autodesk.
5 */
6 
7 
8 // primary contact: GUAL - secondary contact: NOBODY
9 #ifndef Navigation_BlobFieldArray_H
10 #define Navigation_BlobFieldArray_H
11 
12 
20 
21 
22 namespace Kaim
23 {
24 
25 class String;
26 
27 class BlobFieldArray
28 {
29  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
30  KY_ROOT_BLOB_CLASS(NavData, BlobFieldArray, 0)
31  KY_CLASS_WITHOUT_COPY(BlobFieldArray)
32 public:
33  BlobFieldArray() {}
34 public:
35  BlobArray<char> m_name;
36  BlobArray<BlobField32> m_field32s;
37  BlobArray<BlobFieldString> m_fieldStrings;
38  BlobArray<BlobMultiField32> m_multiField32s;
39 };
40 inline void SwapEndianness(Endianness::Target e, BlobFieldArray& self)
41 {
42  SwapEndianness(e, self.m_name);
43  SwapEndianness(e, self.m_field32s);
44  SwapEndianness(e, self.m_fieldStrings);
45  SwapEndianness(e, self.m_multiField32s);
46 }
47 
48 
49 class BlobFieldsMapping
50 {
51  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
52 public:
53  void Clear()
54  {
55  m_field32Maps.Clear();
56  m_fieldStringMaps.Clear();
57  m_multiField32Maps.Clear();
58  }
59 
60  void AddString(const char* name, String& value) { m_fieldStringMaps.PushBack(BlobFieldStringMapping(name, &value)); }
61  void AddGuid(const char* name, KyGuid& value) { m_fieldStringMaps.PushBack(BlobFieldStringMapping(name, &value)); }
62 
63  void AddBool(const char* name, bool& value) { m_field32Maps.PushBack(BlobField32Mapping(BlobField32::Type_KyUInt32 , name, &value)); }
64  void AddInt32(const char* name, KyInt32& value) { m_field32Maps.PushBack(BlobField32Mapping(BlobField32::Type_KyInt32 , name, &value)); }
65  void AddFloat32(const char* name, KyFloat32& value) { m_field32Maps.PushBack(BlobField32Mapping(BlobField32::Type_KyFloat32, name, &value)); }
66  void AddUInt32(const char* name, KyUInt32& value) { m_field32Maps.PushBack(BlobField32Mapping(BlobField32::Type_KyUInt32 , name, &value)); }
67 
68  BlobMultiField32Mapping& AddMultiUInt32(const char* name, const char* category, KyUInt32 size) { m_multiField32Maps.PushBack(BlobMultiField32Mapping(BlobField32::Type_KyUInt32, name, category, size)); return m_multiField32Maps.Back(); }
69  BlobMultiField32Mapping& AddMultiInt32(const char* name, const char* category, KyUInt32 size) { m_multiField32Maps.PushBack(BlobMultiField32Mapping(BlobField32::Type_KyInt32, name, category, size)); return m_multiField32Maps.Back(); }
70  BlobMultiField32Mapping& AddMultiFloat32(const char* name, const char* category, KyUInt32 size) { m_multiField32Maps.PushBack(BlobMultiField32Mapping(BlobField32::Type_KyFloat32, name, category, size)); return m_multiField32Maps.Back(); }
71 
72  KyResult ReadFromBlobFieldArray(const BlobFieldArray& blobFieldArray);
73 
74 public:
75  KyArray<BlobField32Mapping> m_field32Maps;
76  KyArray<BlobFieldStringMapping> m_fieldStringMaps;
77  KyArray<BlobMultiField32Mapping> m_multiField32Maps;
78 };
79 
80 template <class OSTREAM>
81 inline OSTREAM& operator<<(OSTREAM& os, BlobFieldsMapping& fieldsMapping)
82 {
83  for (KyUInt32 i = 0; i < fieldsMapping.m_fieldStringMaps.GetCount(); ++i)
84  os << fieldsMapping.m_fieldStringMaps[i] << Endl;
85 
86  for (KyUInt32 i = 0; i < fieldsMapping.m_field32Maps.GetCount(); ++i)
87  os << fieldsMapping.m_field32Maps[i] << Endl;
88 
89  for (KyUInt32 i = 0; i < fieldsMapping.m_multiField32Maps.GetCount(); ++i)
90  os << fieldsMapping.m_multiField32Maps[i] << Endl;
91 
92  return os;
93 }
94 
95 
96 
97 class BlobFieldArrayBuilder : public BaseBlobBuilder<BlobFieldArray>
98 {
99 public:
100  BlobFieldArrayBuilder(const char* name, BlobFieldsMapping& mapping) : m_name(name), m_mapping(&mapping) {}
101 
102 private:
103  virtual void DoBuild();
104 
105 public: // internal
106  const char* m_name;
107  BlobFieldsMapping* m_mapping;
108 };
109 
110 
111 }
112 
113 
114 #endif
115 
KyInt32 KyResult
Defines a type that can be returned by methods or functions in the Gameware Navigation SDK to indicat...
Definition: types.h:254
int KyInt32
Type used internally to represent a 32-bit integer.
Definition: types.h:35
#define KY_CLASS_WITHOUT_COPY(ClassName)
Define to forbid copy constructor and copy assignment.
Definition: types.h:387
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:35
Definition: gamekitcrowddispersion.h:20
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43