gwnavruntime/queries/blobs/diskcangoqueryblob.h Source File

diskcangoqueryblob.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 #ifndef Navigation_DiskCanGoQueryBlob_H
9 #define Navigation_DiskCanGoQueryBlob_H
10 
14 
15 namespace Kaim
16 {
17 
18 class DiskCanGoQueryOutputBlob
19 {
20  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
21 public:
22  DiskCanGoQueryOutputBlob() : m_result(0) {}
23 
24  DiskCanGoQueryResult GetResult() const { return (DiskCanGoQueryResult)m_result; }
25 public:
26  KyUInt32 m_result;
27  NavTriangleBlob m_startTriangle;
28  NavTriangleBlob m_destTriangle;
29  BlobRef<QueryDynamicOutputBlob> m_queryDynamicOutputBlobRef;
30 };
31 inline void SwapEndianness(Endianness::Target e, DiskCanGoQueryOutputBlob& self)
32 {
33  SwapEndianness(e, self.m_result);
34  SwapEndianness(e, self.m_startTriangle);
35  SwapEndianness(e, self.m_destTriangle);
36  SwapEndianness(e, self.m_queryDynamicOutputBlobRef);
37 }
38 
39 
40 class DiskCanGoQueryOutputBlobBuilder : public BaseBlobBuilder<DiskCanGoQueryOutputBlob>
41 {
42 public:
43  DiskCanGoQueryOutputBlobBuilder(BaseDiskCanGoQuery* query) { m_query = query; }
44  virtual void DoBuild()
45  {
46  BLOB_SET(m_blob->m_result, (KyUInt32)m_query->GetResult());
47  BLOB_BUILD(m_blob->m_startTriangle, NavTriangleBlobBuilder(m_query->GetStartTrianglePtr()));
48  BLOB_BUILD(m_blob->m_destTriangle, NavTriangleBlobBuilder(m_query->GetDestTrianglePtr()));
49  QueryDynamicOutput* queryDynamicOutput = m_query->GetQueryDynamicOutput();
50  if (queryDynamicOutput != KY_NULL && queryDynamicOutput->IsEmpty() == false)
51  {
52  BUILD_REFERENCED_BLOB(m_blob->m_queryDynamicOutputBlobRef, QueryDynamicOutputBlobBuilder(queryDynamicOutput));
53  }
54  }
55 
56 private:
57  BaseDiskCanGoQuery* m_query;
58 };
59 
60 
61 
62 class DiskCanGoQueryBlob
63 {
64  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
65  KY_ROOT_BLOB_CLASS(Query, DiskCanGoQueryBlob, 0)
66 public:
67  DiskCanGoQueryBlob() : m_queryInfoId(KyUInt32MAXVAL), m_databaseIdx(KyUInt32MAXVAL) {}
68 
69  DynamicOutputMode GetDynamicOutputMode() const { return (DynamicOutputMode)m_dynamicOutputMode; }
70 
71 public:
72  KyUInt32 m_queryInfoId;
73 
74  KyUInt32 m_databaseIdx;
75  Vec3f m_startPos3f;
76  Vec3f m_destPos3f;
77  KyFloat32 m_radius;
78  PositionSpatializationRange m_positionSpatializationRange;
79  KyUInt32 m_dynamicOutputMode;
80 
81  BlobRef<DiskCanGoQueryOutputBlob> m_queryOutput;
82 };
83 inline void SwapEndianness(Endianness::Target e, DiskCanGoQueryBlob& self)
84 {
85  SwapEndianness(e, self.m_queryInfoId);
86  SwapEndianness(e, self.m_databaseIdx);
87  SwapEndianness(e, self.m_startPos3f);
88  SwapEndianness(e, self.m_destPos3f);
89  SwapEndianness(e, self.m_radius);
90  SwapEndianness(e, self.m_positionSpatializationRange);
91  SwapEndianness(e, self.m_dynamicOutputMode);
92 
93  SwapEndianness(e, self.m_queryOutput);
94 }
95 
96 class DiskCanGoQueryBlobBuilder : public BaseBlobBuilder<DiskCanGoQueryBlob>
97 {
98 public:
99  DiskCanGoQueryBlobBuilder(BaseDiskCanGoQuery* query) { m_query = query; }
100  virtual void DoBuild()
101  {
102  BLOB_SET(m_blob->m_queryInfoId, m_query->m_queryInfoId);
103 
104  if (m_query->m_database != KY_NULL)
105  {
106  BLOB_SET(m_blob->m_databaseIdx , m_query->m_database->GetDatabaseIndex());
107  BLOB_SET(m_blob->m_startPos3f , m_query->GetStartPos());
108  BLOB_SET(m_blob->m_destPos3f , m_query->GetDestPos());
109  BLOB_SET(m_blob->m_radius , m_query->GetRadius());
110  BLOB_SET(m_blob->m_positionSpatializationRange, m_query->GetPositionSpatializationRange());
111  BLOB_SET(m_blob->m_dynamicOutputMode , (KyUInt32)m_query->GetDynamicOutputMode());
112 
113  switch (m_query->GetResult())
114  {
117  break;
118  default:
119  BUILD_REFERENCED_BLOB(m_blob->m_queryOutput, DiskCanGoQueryOutputBlobBuilder(m_query));
120  break;
121  }
122  }
123  }
124 
125 private:
126  BaseDiskCanGoQuery* m_query;
127 };
128 }
129 
130 #endif // Kaim_DiskCanGoQueryInputBlob_H
#define BLOB_SET(blob, value)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:136
Indicates the query has not yet been launched.
Definition: basediskcangoquery.h:27
#define BLOB_BUILD(blob, builder)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:189
#define KY_NULL
Null value.
Definition: types.h:247
Indicates the query has not yet been initialized.
Definition: basediskcangoquery.h:26
DynamicOutputMode
Enumerates possible ways of storing crossed data from a query in a QueryDynamicOutput object...
Definition: querydynamicoutput.h:26
DiskCanGoQueryResult
Enumerates the possible results of a DiskCanGoQuery.
Definition: basediskcangoquery.h:24
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:35
DiskCanGoQueryOutputBlob * m_blob
The blob maintained by this builder. Only modify using the macros listed under DoBuild().
Definition: baseblobbuilder.h:117
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
#define KyUInt32MAXVAL
The maximum value that can be stored in the KyUInt32 variable type.
Definition: types.h:226
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43
#define BUILD_REFERENCED_BLOB(blobRef, builder)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:197