ACF $AcfVersion:0$
TOptPointerVector.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ACF-Commercial
2#pragma once
3
4
5// ACF includes
7
8
9namespace istd
10{
11
12
16template<typename Pointer>
18{
19public:
21 {
22 Pointer* pointer = nullptr;
23 bool releaseFlag = false;
24 };
25
26 static Pointer* GetPtr(const ElementType& element)
27 {
28 return element.pointer;
29 }
30
31 static Pointer* PopPtr(const ElementType& element)
32 {
33 return GetPtr(element);
34 }
35
36 static void Delete(const ElementType& element)
37 {
38 if (element.releaseFlag && (element.pointer != nullptr)){
39 delete element.pointer;
40 }
41 }
42};
43
44
49template <typename Pointer>
50class TOptPointerVector: public TPointerVector<Pointer, TOptDeleteAdapter<Pointer> >
51{
52public:
54
55 void SetAt(int index, Pointer* pointer, bool releaseFlag = false);
56 void PushBack(Pointer* pointer, bool releaseFlag = false);
57 void InsertAt(int index, Pointer* pointer, bool releaseFlag = false);
58};
59
60
61// public methods
62
63template <typename Pointer>
64void TOptPointerVector<Pointer>::SetAt(int index, Pointer* pointer, bool releaseFlag)
65{
67 element.pointer = pointer;
68 element.releaseFlag = releaseFlag;
69
70 BaseClass::SetElementAt(index, element);
71}
72
73
74template <typename Pointer>
75void TOptPointerVector<Pointer>::PushBack(Pointer* pointer, bool releaseFlag)
76{
78 element.pointer = pointer;
79 element.releaseFlag = releaseFlag;
80
81 BaseClass::PushBack(element);
82}
83
84
85template <typename Pointer>
86void TOptPointerVector<Pointer>::InsertAt(int index, Pointer* pointer, bool releaseFlag)
87{
89 element.pointer = pointer;
90 element.releaseFlag = releaseFlag;
91
92 BaseClass::InsertElementAt(index, element);
93}
94
95
96} // namespace istd
97
98
99
Optional delete adapter.
static void Delete(const ElementType &element)
static Pointer * PopPtr(const ElementType &element)
static Pointer * GetPtr(const ElementType &element)
Implementation of a special pointer container, which controls the live cycle of the pointer object,...
void InsertAt(int index, Pointer *pointer, bool releaseFlag=false)
void SetAt(int index, Pointer *pointer, bool releaseFlag=false)
void PushBack(Pointer *pointer, bool releaseFlag=false)
TPointerVector< Pointer, TOptDeleteAdapter< Pointer > > BaseClass
Implementation of a pointer container, which controls the live cycle of the pointer object.
Standard library.
Definition IComponent.h:17