19template<
typename Po
inter>
46template <
typename Po
inter,
class AccessAdapter = TDeleteAdapter<Po
inter> >
94 Pointer*
GetAt(
int index)
const;
145 typedef std::vector<ElementType> Elements;
153template <
typename Po
inter,
class AccessAdapter>
159template <
typename Po
inter,
class AccessAdapter>
166template <
typename Po
inter,
class AccessAdapter>
169 return m_elements.empty();
173template <
typename Po
inter,
class AccessAdapter>
176 return int(m_elements.size());
182template <
typename Po
inter,
class AccessAdapter>
189template <
typename Po
inter,
class AccessAdapter>
192 while (
int(m_elements.size()) > count){
193 AccessAdapter::Delete(m_elements.back());
195 m_elements.pop_back();
198 m_elements.resize(count);
202template <
typename Po
inter,
class AccessAdapter>
205 for (
typename Elements::iterator iter = m_elements.begin();
206 iter != m_elements.end();
208 AccessAdapter::Delete(*iter);
215template <
typename Po
inter,
class AccessAdapter>
218 int elementsCount = GetCount();
220 for (
int elementIndex = 0; elementIndex < elementsCount; elementIndex++){
221 typename Elements::const_iterator delIter = (m_elements.begin() + elementIndex);
222 if (AccessAdapter::GetPtr(*delIter) == elementPtr){
231template <
typename Po
inter,
class AccessAdapter>
234 Q_ASSERT(index >= 0);
235 Q_ASSERT(index <
int(m_elements.size()));
237 return AccessAdapter::GetPtr(m_elements[index]);
241template <
typename Po
inter,
class AccessAdapter>
244 Q_ASSERT(index >= 0);
245 Q_ASSERT(index <
int(m_elements.size()));
247 return m_elements[index];
251template <
typename Po
inter,
class AccessAdapter>
254 typename Elements::iterator delIter = (m_elements.begin() + index);
256 AccessAdapter::Delete(*delIter);
258 m_elements[index] = element;
262template <
typename Po
inter,
class AccessAdapter>
265 Q_ASSERT(index >= 0);
266 Q_ASSERT(index <
int(m_elements.size()));
268 typename Elements::iterator delIter = (m_elements.begin() + index);
270 AccessAdapter::Delete(*delIter);
272 m_elements.erase(delIter);
276template <
typename Po
inter,
class AccessAdapter>
279 int elementsCount = GetCount();
281 for (
int elementIndex = 0; elementIndex < elementsCount; elementIndex++){
282 typename Elements::iterator delIter = (m_elements.begin() + elementIndex);
283 if (AccessAdapter::GetPtr(*delIter) == elementPtr){
284 RemoveAt(elementIndex);
294template <
typename Po
inter,
class AccessAdapter>
297 Q_ASSERT(index >= 0);
298 Q_ASSERT(index <
int(m_elements.size()));
300 Pointer* popPtr = AccessAdapter::PopPtr(m_elements[index]);
302 m_elements.erase(m_elements.begin() + index);
308template <
typename Po
inter,
class AccessAdapter>
311 m_elements.push_back(element);
315template <
typename Po
inter,
class AccessAdapter>
318 Q_ASSERT(index >= 0);
319 Q_ASSERT(index <= GetCount());
320 Q_ASSERT(HasElement(AccessAdapter::GetPtr(element)) == InvalidIndex);
322 m_elements.insert(m_elements.begin() + index, element);
326template <
typename Po
inter,
class AccessAdapter>
329 Q_ASSERT(index1 >= 0);
330 Q_ASSERT(index1 <= GetCount());
331 Q_ASSERT(index2 >= 0);
332 Q_ASSERT(index2 <= GetCount());
335 m_elements[index1] = m_elements[index2];
336 m_elements[index2] = element1;
static Pointer * PopPtr(const ElementType &element)
static Pointer * GetPtr(const ElementType &element)
static void Delete(const ElementType &element)
Implementation of a pointer container, which controls the live cycle of the pointer object.
bool Remove(Pointer *elementPtr)
Remove element elementPtr.
Pointer * PopAt(int index)
Pop element at specified index.
void SetCount(int count)
Set number of elements.
int HasElement(const Pointer *elementPtr) const
Check if some element is stored in this vector and return the index of the element,...
TPointerVector(const TPointerVector &)
AccessAdapter::ElementType ElementType
Pointer * GetAt(int index) const
Get pointer at specified index.
bool IsEmpty() const
Check if there is element stored in this set.
int GetCount() const
Get number of stored elements.
void SwapElements(int index1, int index2)
Switch two elements.
void RemoveAt(int index)
Remove element at specified index.
void SetElementAt(int index, const ElementType &element)
Set element at specified index.
void PushBack(const ElementType &element)
Add new element at the end of collection.
void Reset()
Remove all elements.
void InsertElementAt(int index, const ElementType &element)
Insert element at specified position.
@ InvalidIndex
Invalid index in the vector.
const ElementType & GetElementAt(int index) const
Get element at specified index.
#define I_IF_DEBUG(instructions)