acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
aaa__collection_impl1.h
1#pragma once
2
3
4
5template < typename ITERABLE >
6inline ::collection::count __iterable_count(const ITERABLE & iterable)
7{
8
9 return iterable.get_count();
10
11}
12
13
14
15
16
17
18
19#ifdef WINDOWS
20namespace gen
21{
22 namespace win
23 {
24 template < class TYPE, class ARG_TYPE >
25 bool CreateSafeArray(array < TYPE, ARG_TYPE > & ar, VARIANT * pvar, VARTYPE vt)
26 {
27 pvar->vt = VT_ARRAY | vt;
28 SAFEARRAYBOUND rgsabound[1];
29 rgsabound[0].lLbound = 0;
30 rgsabound[0].cElements = get_size();
31 pvar->parray = SafeArrayCreate(vt, 1, rgsabound);
32 if(pvar->parray == nullptr)
33 return false;
34 for(::i32 i = 0; i < get_size(); i++)
35 {
36 SafeArrayPutElement(pvar->parray, (long *) &i, &ar.element_at(i));
37 }
38 }
39
40 template < class TYPE, class ARG_TYPE >
41 bool CopySafeArray(array < TYPE, ARG_TYPE > & ar, VARIANT * ::payload)
42 {
43 // WINDOWS_DEFINITION_MANAGE_STATE(::windows_definition::GetStaticModuleState())
44 ASSERT(pvar->vt == (VT_ARRAY | VT_I4));
45 ar.erase_all();
46 ::u32 uDim;
47
48 if(1 != (uiDim = SafeArrayGetDim(pvar->parray)))
49 {
50 ASSERT(false);
51 return false;
52 }
53
54 HRESULT hr;
55 long lLBound;
56 long lUBound;
57
58 if(FAILED(hr = SafeArrayGetLBound(pvar->parray, uiDim, &lLBound)))
59 {
60 return false;
61 }
62
63 if(FAILED(hr = SafeArrayGetUBound(pvar->parray, uiDim, &lUBound)))
64 {
65 return false;
66 }
67
68 ::u32 dw;
69 for(::i32 i = lLBound; i <= lUBound; i++)
70 {
71 SafeArrayGetElement(pvar->parray, (long *) &i, &dw);
72 ar.add(dw);
73 }
74 return true;
75
76 }
77 }
78}
79#endif
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Definition iterable.h:4040