gwnavruntime/blob/blobfieldarray.h Source File

blobfieldarray.h
Go to the documentation of this file.
1 /*
2 * Copyright 2016 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 #pragma once
9 
10 
18 
19 
20 namespace Kaim
21 {
22 
23 class String;
24 
25 class BlobFieldArray
26 {
27  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
28  KY_ROOT_BLOB_CLASS(NavData, BlobFieldArray, 0)
29  KY_CLASS_WITHOUT_COPY(BlobFieldArray)
30 public:
31  BlobFieldArray() {}
32 public:
33  BlobArray<char> m_name;
34  BlobArray<BlobField32> m_field32s;
35  BlobArray<BlobFieldString> m_fieldStrings;
36  BlobArray<BlobMultiField32> m_multiField32s;
37 };
38 inline void SwapEndianness(Endianness::Target e, BlobFieldArray& self)
39 {
40  SwapEndianness(e, self.m_name);
41  SwapEndianness(e, self.m_field32s);
42  SwapEndianness(e, self.m_fieldStrings);
43  SwapEndianness(e, self.m_multiField32s);
44 }
45 
46 
47 class BlobFieldsMapping
48 {
49  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
50 public:
51  void Clear()
52  {
53  m_field32Maps.Clear();
54  m_fieldStringMaps.Clear();
55  m_multiField32Maps.Clear();
56  }
57 
58  void AddString(const char* name, String& value) { m_fieldStringMaps.PushBack(BlobFieldStringMapping(name, &value)); }
59  void AddGuid(const char* name, KyGuid& value) { m_fieldStringMaps.PushBack(BlobFieldStringMapping(name, &value)); }
60 
61  void AddBool(const char* name, bool& value) { m_field32Maps.PushBack(BlobField32Mapping(BlobField32::Type_KyUInt32 , name, &value)); }
62  void AddInt32(const char* name, KyInt32& value) { m_field32Maps.PushBack(BlobField32Mapping(BlobField32::Type_KyInt32 , name, &value)); }
63  void AddFloat32(const char* name, KyFloat32& value) { m_field32Maps.PushBack(BlobField32Mapping(BlobField32::Type_KyFloat32, name, &value)); }
64  void AddUInt32(const char* name, KyUInt32& value) { m_field32Maps.PushBack(BlobField32Mapping(BlobField32::Type_KyUInt32 , name, &value)); }
65 
66  BlobMultiField32Mapping& AddMultiUInt32(const char* name, const char* category, KyUInt32 size) { m_multiField32Maps.PushBack(BlobMultiField32Mapping(BlobField32::Type_KyUInt32, name, category, size)); return m_multiField32Maps.Back(); }
67  BlobMultiField32Mapping& AddMultiInt32(const char* name, const char* category, KyUInt32 size) { m_multiField32Maps.PushBack(BlobMultiField32Mapping(BlobField32::Type_KyInt32, name, category, size)); return m_multiField32Maps.Back(); }
68  BlobMultiField32Mapping& AddMultiFloat32(const char* name, const char* category, KyUInt32 size) { m_multiField32Maps.PushBack(BlobMultiField32Mapping(BlobField32::Type_KyFloat32, name, category, size)); return m_multiField32Maps.Back(); }
69 
70  KyResult ReadFromBlobFieldArray(const BlobFieldArray& blobFieldArray);
71 
72 public:
73  KyArray<BlobField32Mapping> m_field32Maps;
74  KyArray<BlobFieldStringMapping> m_fieldStringMaps;
75  KyArray<BlobMultiField32Mapping> m_multiField32Maps;
76 };
77 
78 template <class OSTREAM>
79 inline OSTREAM& operator<<(OSTREAM& os, BlobFieldsMapping& fieldsMapping)
80 {
81  for (KyUInt32 i = 0; i < fieldsMapping.m_fieldStringMaps.GetCount(); ++i)
82  os << fieldsMapping.m_fieldStringMaps[i] << Endl;
83 
84  for (KyUInt32 i = 0; i < fieldsMapping.m_field32Maps.GetCount(); ++i)
85  os << fieldsMapping.m_field32Maps[i] << Endl;
86 
87  for (KyUInt32 i = 0; i < fieldsMapping.m_multiField32Maps.GetCount(); ++i)
88  os << fieldsMapping.m_multiField32Maps[i] << Endl;
89 
90  return os;
91 }
92 
93 
94 
95 class BlobFieldArrayBuilder : public BaseBlobBuilder<BlobFieldArray>
96 {
97 public:
98  BlobFieldArrayBuilder(const char* name, BlobFieldsMapping& mapping) : m_name(name), m_mapping(&mapping) {}
99 
100 private:
101  virtual void DoBuild();
102 
103 public: // internal
104  const char* m_name;
105  BlobFieldsMapping* m_mapping;
106 };
107 
108 
109 }
110 
111 
112 
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define KY_CLASS_WITHOUT_COPY(ClassName)
Define to forbid copy constructor and copy assignment.
Definition: types.h:196
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:27
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
std::int32_t KyInt32
int32_t
Definition: types.h:24
float KyFloat32
float
Definition: types.h:32