16 #ifndef BT_UNION_FIND_H 17 #define BT_UNION_FIND_H 21 #define USE_PATH_COMPRESSION 1 24 #define STATIC_SIMULATION_ISLAND_OPTIMIZATION 1 54 return int(m_elements.
size());
58 return (x == m_elements[x].
m_id);
63 return m_elements[index];
67 return m_elements[index];
78 return (find(p) == find(q));
83 int i = find(p), j = find(q);
87 #ifndef USE_PATH_COMPRESSION 89 if (m_elements[i].
m_sz < m_elements[j].
m_sz)
91 m_elements[i].m_id = j; m_elements[j].m_sz += m_elements[i].m_sz;
95 m_elements[j].m_id = i; m_elements[i].m_sz += m_elements[j].m_sz;
98 m_elements[i].m_id = j; m_elements[j].m_sz += m_elements[i].m_sz;
99 #endif //USE_PATH_COMPRESSION 107 while (x != m_elements[x].
m_id)
111 #ifdef USE_PATH_COMPRESSION 112 const btElement* elementPtr = &m_elements[m_elements[x].m_id];
113 m_elements[x].m_id = elementPtr->
m_id;
114 x = elementPtr->
m_id;
116 x = m_elements[x].m_id;
129 #endif //BT_UNION_FIND_H
btElement & getElement(int index)
#define SIMD_FORCE_INLINE
UnionFind calculates connected subsets.
int size() const
return the number of elements in the array
int getNumElements() const
const btElement & getElement(int index) const
btAlignedObjectArray< btElement > m_elements