gwnavruntime/queries/blobs/querydynamicoutputblob.h Source File

querydynamicoutputblob.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 /*
9 * Copyright 2011 Autodesk, Inc. All rights reserved.
10 * Use of this software is subject to the terms of the Autodesk license agreement provided at the time of installation or download,
11 * or which otherwise accompanies this software in either electronic or hard copy form.
12 */
13 
14 
15 #ifndef Navigation_QueryDynamicOutputBlob_H
16 #define Navigation_QueryDynamicOutputBlob_H
17 
23 
24 namespace Kaim
25 {
26 
27 class QueryDynamicOutputBlob
28 {
29  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
30 public:
31  QueryDynamicOutputBlob() {}
32 
33 public:
34  BlobArray<NavFloorBoxBlob> m_navFloorBoxes;
35  BlobArray<NavTriangleBlob> m_navTriangles;
36  BlobArray<NavTagSubSegmentBlob> m_navTagSubSegments;
37  BlobArray<CostMultiplierSubSegment> m_costMultiplierSubSegments;
38  BlobArray<SpatializedPointBlob> m_spatializedPoints;
39 };
40 
41 inline void SwapEndianness(Endianness::Target e, QueryDynamicOutputBlob& self)
42 {
43  SwapEndianness(e, self.m_navFloorBoxes);
44  SwapEndianness(e, self.m_navTriangles);
45  SwapEndianness(e, self.m_navTagSubSegments);
46  SwapEndianness(e, self.m_costMultiplierSubSegments);
47  SwapEndianness(e, self.m_spatializedPoints);
48 }
49 
50 
51 class QueryDynamicOutputBlobBuilder : public BaseBlobBuilder<QueryDynamicOutputBlob>
52 {
53 public:
54  QueryDynamicOutputBlobBuilder(const QueryDynamicOutput* queryDynamicOutput) { m_queryDynamicOutput = queryDynamicOutput; }
55  virtual void DoBuild()
56  {
57  if (m_queryDynamicOutput == KY_NULL)
58  return;
59 
60  NavFloorBoxBlob* navFloorsBoxes = BLOB_ARRAY(m_blob->m_navFloorBoxes , m_queryDynamicOutput->GetNavFloorPtrCount());
61  NavTriangleBlob* navTrianglesBlobs = BLOB_ARRAY(m_blob->m_navTriangles , m_queryDynamicOutput->GetNavTrianglePtrCount());
62  NavTagSubSegmentBlob* navTagSubSegmentBlobs = BLOB_ARRAY(m_blob->m_navTagSubSegments, m_queryDynamicOutput->GetNavTagSubSegmentCount());
63  CostMultiplierSubSegment* costMultSubSegmentBlobs = BLOB_ARRAY(m_blob->m_costMultiplierSubSegments, m_queryDynamicOutput->GetCostMultiplierSubSegmentCount());
64  SpatializedPointBlob* spatializedPointBlobs = BLOB_ARRAY(m_blob->m_spatializedPoints , m_queryDynamicOutput->GetSpatializedPointCount());
65 
66  for(KyUInt32 i = 0; i < m_queryDynamicOutput->GetNavFloorPtrCount(); ++i)
67  {
68  BLOB_BUILD(navFloorsBoxes[i], NavFloorBoxBlobBuilder(m_queryDynamicOutput->GetNavFloorPtr(i)));
69  }
70  for(KyUInt32 i = 0; i < m_queryDynamicOutput->GetNavTrianglePtrCount(); ++i)
71  {
72  BLOB_BUILD(navTrianglesBlobs[i], NavTriangleBlobBuilder(m_queryDynamicOutput->GetNavTrianglePtr(i)));
73  }
74  for(KyUInt32 i = 0; i < m_queryDynamicOutput->GetNavTagSubSegmentCount(); ++i)
75  {
76  BLOB_BUILD(navTagSubSegmentBlobs[i], NavTagSubSegmentBlobBuilder(m_queryDynamicOutput->GetNavTagSubSegment(i)));
77  }
78  for(KyUInt32 i = 0; i < m_queryDynamicOutput->GetCostMultiplierSubSegmentCount(); ++i)
79  {
80  BLOB_SET(costMultSubSegmentBlobs[i], m_queryDynamicOutput->GetCostMultiplierSubSegment(i));
81  }
82  for(KyUInt32 i = 0; i < m_queryDynamicOutput->GetSpatializedPointCount(); ++i)
83  {
84  BLOB_BUILD(spatializedPointBlobs[i], SpatializedPointBlobBuilder(m_queryDynamicOutput->GetSpatializedPoint(i), VisualDebugLOD_Default));
85  }
86  }
87 
88 private:
89  const QueryDynamicOutput* m_queryDynamicOutput;
90 };
91 
92 }
93 
94 #endif // Navigation_QueryDynamicOutputBlob_H
#define BLOB_SET(blob, value)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:136
#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
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:35
QueryDynamicOutputBlob * 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
#define BLOB_ARRAY(blobArray, count)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:147
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36