00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef NVBLASTSUPPORTGRAPH_H
00030 #define NVBLASTSUPPORTGRAPH_H
00031
00032
00033 #include "NvBlastIndexFns.h"
00034 #include "NvBlastMemory.h"
00035
00036 namespace Nv
00037 {
00038 namespace Blast
00039 {
00040
00076 struct SupportGraph
00077 {
00081 uint32_t m_nodeCount;
00082
00088 NvBlastBlockArrayData(uint32_t, m_chunkIndicesOffset, getChunkIndices, m_nodeCount);
00089
00101 NvBlastBlockArrayData(uint32_t, m_adjacencyPartitionOffset, getAdjacencyPartition, m_nodeCount + 1);
00102
00108 NvBlastBlockArrayData(uint32_t, m_adjacentNodeIndicesOffset, getAdjacentNodeIndices, getAdjacencyPartition()[m_nodeCount]);
00109
00115 NvBlastBlockArrayData(uint32_t, m_adjacentBondIndicesOffset, getAdjacentBondIndices, getAdjacencyPartition()[m_nodeCount]);
00116
00123 uint32_t findBond(uint32_t nodeIndex0, uint32_t nodeIndex1) const;
00124 };
00125
00126
00128
00129 NV_INLINE uint32_t SupportGraph::findBond(uint32_t nodeIndex0, uint32_t nodeIndex1) const
00130 {
00131 const uint32_t* adjacencyPartition = getAdjacencyPartition();
00132 const uint32_t* adjacentNodeIndices = getAdjacentNodeIndices();
00133 const uint32_t* adjacentBondIndices = getAdjacentBondIndices();
00134
00135
00136 for (uint32_t i = adjacencyPartition[nodeIndex0]; i < adjacencyPartition[nodeIndex0 + 1]; i++)
00137 {
00138 if (adjacentNodeIndices[i] == nodeIndex1)
00139 {
00140 return adjacentBondIndices[i];
00141 }
00142 }
00143
00144 return invalidIndex<uint32_t>();
00145 }
00146
00147 }
00148 }
00149
00150
00151 #endif // ifndef NVBLASTSUPPORTGRAPH_H