30#ifndef EXT_MULTI_LIST_H
31#define EXT_MULTI_LIST_H
35#include "foundation/PxArray.h"
51 void reserve(
int maxId) {
55 PxI32 add(PxI32
id,
const T &item);
56 bool addUnique(PxI32
id,
const T &item);
57 bool exists(PxI32
id,
const T &item)
const;
58 void remove(PxI32
id,
const T &item);
59 void removeAll(PxI32
id);
60 PxI32 size(PxI32
id)
const;
61 PxI32 getPairNr(PxI32
id,
const T &item)
const;
63 void replace(PxI32
id,
const T &before,
const T &after);
65 void getItems(PxI32
id)
const;
68 void initIteration(PxI32
id, PxI32& iterator);
69 bool iterate(T& item, PxI32& iterator);
71 void getPointers(PxI32
id);
89 queryPointers.clear();
95 PxI32 MultiList<T>::add(PxI32
id,
const T &item)
97 if (
id >= PxI32(first.size()))
98 first.resize(
id + 1, -1);
99 PxI32 pos = firstFree;
101 firstFree = next[firstFree];
104 pos = PxI32(items.size());
105 items.resize(items.size() + 1);
106 next.resize(items.size() + 1);
108 next[pos] = first[id];
116 bool MultiList<T>::addUnique(PxI32
id,
const T &item)
118 if (exists(
id, item))
126 bool MultiList<T>::exists(PxI32
id,
const T &item)
const
128 return getPairNr(
id, item) >= 0;
133 PxI32 MultiList<T>::size(PxI32
id)
const
135 if (
id >= PxI32(first.size()))
139 PxI32 nr = first[id];
150 PxI32 MultiList<T>::getPairNr(PxI32
id,
const T &item)
const
152 if (id < 0 || id >= PxI32(first.size()))
154 PxI32 nr = first[id];
157 if (items[nr] == item)
166 void MultiList<T>::remove(PxI32
id,
const T &itemNr)
168 PxI32 nr = first[id];
170 while (nr >= 0 && items[nr] != itemNr)
178 next[prev] = next[nr];
180 first[id] = next[nr];
181 next[nr] = firstFree;
187 void MultiList<T>::replace(PxI32
id,
const T &before,
const T &after)
189 PxI32 nr = first[id];
192 if (items[nr] == before)
200 void MultiList<T>::removeAll(PxI32
id)
202 if (
id >= PxI32(first.size()))
205 PxI32 nr = first[id];
215 next[prev] = firstFree;
216 firstFree = first[id];
222 void MultiList<T>::getItems(PxI32
id)
const
225 if (
id >= PxI32(first.size()))
227 PxI32 nr = first[id];
230 queryItems.push_back(items[nr]);
237 void MultiList<T>::initIteration(PxI32
id, PxI32& iterator)
239 if (
id >= PxI32(first.size()))
242 iterator = first[id];
247 bool MultiList<T>::iterate(T& item, PxI32& iterator)
251 item = items[iterator];
252 iterator = next[iterator];
260 void MultiList<T>::getPointers(PxI32
id)
262 queryPointers.clear();
263 if (
id >= PxI32(first.size()))
265 PxI32 nr = first[id];
268 queryPointers.push_back(&items[nr]);
Definition ExtMultiList.h:44
PX_INLINE void reserve(const uint32_t capacity)
Definition PxArray.h:486
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39