@@ -47,54 +47,14 @@ Revision History:
4747
4848namespace WEX ::TestExecution
4949{
50- struct ArrayIndexTaefAdapterRow : IDataRow
50+ struct ArrayIndexTaefAdapterRow : Microsoft::WRL::RuntimeClass<Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom | Microsoft::WRL::InhibitFtmBase>, IDataRow>
5151 {
52- ArrayIndexTaefAdapterRow (size_t index) :
53- _index (index) {}
54-
55- // IUnknown
56- STDMETHODIMP QueryInterface (REFIID riid, void ** ppvObject) override
57- {
58- if (!ppvObject)
59- {
60- return E_POINTER;
61- }
62-
63- if (riid == __uuidof (IUnknown))
64- {
65- AddRef ();
66- *ppvObject = static_cast <IUnknown*>(this );
67- return S_OK;
68- }
69- else if (riid == __uuidof (IDataRow))
70- {
71- *ppvObject = static_cast <IDataRow*>(this );
72- AddRef ();
73- return S_OK;
74- }
75- else
76- {
77- *ppvObject = nullptr ;
78- return E_NOINTERFACE;
79- }
80- }
81-
82- ULONG STDMETHODCALLTYPE AddRef () override
83- {
84- return _refCount.fetch_add (1 ) + 1 ;
85- }
86-
87- ULONG STDMETHODCALLTYPE Release () override
52+ HRESULT RuntimeClassInitialize (const size_t index)
8853 {
89- const auto count = _refCount.fetch_sub (1 ) - 1 ;
90- if (count == 0 )
91- {
92- delete this ;
93- }
94- return count;
54+ _index = index;
55+ return S_OK;
9556 }
9657
97- // IDataRow
9858 STDMETHODIMP GetTestData (BSTR /* pszName*/ , SAFEARRAY** ppData) override
9959 {
10060 wchar_t buf[16 ];
@@ -126,70 +86,28 @@ namespace WEX::TestExecution
12686 }
12787
12888 private:
129- std::atomic<ULONG> _refCount{ 1 };
13089 size_t _index = 0 ;
13190 };
13291
133- struct ArrayIndexTaefAdapterSource : IDataSource
92+ struct ArrayIndexTaefAdapterSource : Microsoft::WRL::RuntimeClass<Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom | Microsoft::WRL::InhibitFtmBase>, IDataSource>
13493 {
135- explicit ArrayIndexTaefAdapterSource (size_t count) :
136- _count{ count } {}
137-
138- // IUnknown
139- STDMETHODIMP QueryInterface (REFIID riid, void ** ppvObject) override
94+ HRESULT RuntimeClassInitialize (const size_t count)
14095 {
141- if (!ppvObject)
142- {
143- return E_POINTER;
144- }
145-
146- if (riid == __uuidof (IUnknown))
147- {
148- AddRef ();
149- *ppvObject = static_cast <IUnknown*>(this );
150- return S_OK;
151- }
152- else if (riid == __uuidof (IDataSource))
153- {
154- *ppvObject = static_cast <IDataSource*>(this );
155- AddRef ();
156- return S_OK;
157- }
158- else
159- {
160- *ppvObject = nullptr ;
161- return E_NOINTERFACE;
162- }
163- }
164-
165- ULONG STDMETHODCALLTYPE AddRef () override
166- {
167- return _refCount.fetch_add (1 ) + 1 ;
168- }
169-
170- ULONG STDMETHODCALLTYPE Release () override
171- {
172- const auto count = _refCount.fetch_sub (1 ) - 1 ;
173- if (count == 0 )
174- {
175- delete this ;
176- }
177- return count;
96+ _count = count;
97+ return S_OK;
17898 }
17999
180- // IDataSource
181100 STDMETHODIMP Advance (IDataRow** ppDataRow) override
182101 {
183102 if (_index < _count)
184103 {
185- *ppDataRow = static_cast <IDataRow*>(new ArrayIndexTaefAdapterRow (_index++));
186- return S_OK;
104+ return Microsoft::WRL::MakeAndInitialize<ArrayIndexTaefAdapterRow>(ppDataRow, _index++);
187105 }
188106 else
189107 {
190108 *ppDataRow = nullptr ;
109+ return S_OK;
191110 }
192- return S_OK;
193111 }
194112
195113 STDMETHODIMP Reset () override
@@ -214,7 +132,6 @@ namespace WEX::TestExecution
214132 }
215133
216134 private:
217- std::atomic<ULONG> _refCount{ 1 };
218135 size_t _count = 0 ;
219136 size_t _index = 0 ;
220137 };
0 commit comments