acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
comptr_array.h
1// From cotaskptr.h by camilo on 2022-11-14 06:53 <3ThomasBorregaardSorensen!!
2#pragma once
3
4
5#include "acme/prototype/string/string.h"
6
7
8template < typename TYPE >
9class comptr_array
10{
11public:
12
13
14 TYPE** m_pp;
15 UINT32 m_cCount;
16
17 comptr_array(TYPE** pp = nullptr, UINT32 cCount = 0) :
18 m_pp(pp),
19 m_cCount(cCount)
20 {
21
22 }
23
24
25 ~comptr_array()
26 {
27
28 free();
29
30 }
31
32 bool is_null() const
33 {
34
35 return m_pp == nullptr;
36
37 }
38
39 bool is_set() const
40 {
41
42 return m_pp != nullptr;
43
44 }
45
46 virtual void free()
47 {
48
49 if (m_pp != nullptr)
50 {
51
52 for (UINT32 u = 0; u < m_cCount; u++)
53 {
54
55 if (m_pp[u])
56 {
57
58 m_pp[u]->Release();
59
60 }
61
62 }
63
64 ::CoTaskMemFree(m_pp);
65
66 m_pp = nullptr;
67
68 }
69
70 }
71
72
73 operator TYPE** ()
74 {
75
76 return m_pp;
77
78 }
79
80 operator const TYPE** () const
81 {
82
83 return m_pp;
84
85 }
86
87
88 TYPE** operator ->()
89 {
90
91 return m_pp;
92
93 }
94
95
96 const TYPE** operator ->() const
97 {
98
99 return m_pp;
100
101 }
102
103 TYPE*** operator &()
104 {
105
106 free();
107
108 return &m_pp;
109
110 }
111
112 const TYPE*** operator &() const
113 {
114
115 return &m_pp;
116
117 }
118
119
120};
121
122#define __comptr_array(a) &a.m_pp, &a.m_cCount