1 krisbash 1.1 /*============================================================================
2 * Copyright (C) Microsoft Corporation, All rights reserved.
3 *============================================================================
4 */
5 #ifndef _CLASS_h
6 #define _CLASS_h
7
8 #if defined(_MSC_VER)
9 #if defined(GetClassName)
10 # undef GetClassName
11 #endif
12 #endif
13
14 #include <base/batch.h>
15 #include "MI.h"
16
17 #define MI_CLASS_NULL { NULL, NULL, NULL, NULL, {0, 0, 0, 0} }
18
19
20 /*============================================================================
21 * This table should be used only internally; this provides functions which can be used to get more information
22 krisbash 1.1 * from schema than the MI_ClassFT functions.
23 *============================================================================
24 */
25 typedef struct _MI_ClassExtendedFTInternal
26 {
27 // existing functions from MI_ClassFT
28 MI_Result (MI_CALL *GetClassName)(
29 _In_ const MI_Class* self,
30 _Outptr_result_maybenull_z_ const MI_Char** className);
31
32 MI_Result (MI_CALL *GetNameSpace)(
33 _In_ const MI_Class* self,
34 _Outptr_result_maybenull_z_ const MI_Char** nameSpace);
35
36 MI_Result (MI_CALL *GetServerName)(
37 _In_ const MI_Class* self,
38 _Outptr_result_maybenull_z_ const MI_Char** serverName);
39
40 MI_Result (MI_CALL *GetElementCount)(
41 _In_ const MI_Class* self,
42 _Out_ MI_Uint32* count);
43 krisbash 1.1
44 MI_Result (MI_CALL *GetElement)(
45 _In_ const MI_Class* self,
46 _In_z_ const MI_Char* name,
47 _Out_opt_ MI_Value* value,
48 _Out_opt_ MI_Boolean* valueExists,
49 _Out_opt_ MI_Type* type,
50 _Outptr_opt_result_maybenull_z_ MI_Char **referenceClass,
51 _Out_opt_ MI_QualifierSet *qualifierSet,
52 _Out_opt_ MI_Uint32* flags,
53 _Out_opt_ MI_Uint32* index);
54
55 MI_Result (MI_CALL *GetElementAt)(
56 _In_ const MI_Class* self,
57 MI_Uint32 index,
58 _Outptr_opt_result_maybenull_z_ const MI_Char** name,
59 _Out_opt_ MI_Value* value,
60 _Out_opt_ MI_Boolean* valueExists,
61 _Out_opt_ MI_Type* type,
62 _Outptr_opt_result_maybenull_z_ MI_Char **referenceClass,
63 _Out_opt_ MI_QualifierSet *qualifierSet,
64 krisbash 1.1 _Out_opt_ MI_Uint32* flags);
65
66 MI_Result (MI_CALL *GetClassQualifierSet)(
67 _In_ const MI_Class* self,
68 _Out_opt_ MI_QualifierSet *qualifierSet
69 );
70
71 MI_Result (MI_CALL *GetMethodCount)(
72 _In_ const MI_Class* self,
73 _Out_ MI_Uint32* count);
74
75 MI_Result (MI_CALL *GetMethodAt)(
76 _In_ const MI_Class *self,
77 MI_Uint32 index,
78 _Outptr_result_z_ const MI_Char **name,
79 _Out_opt_ MI_QualifierSet *qualifierSet,
80 _Out_opt_ MI_ParameterSet *parameterSet
81 );
82
83 MI_Result (MI_CALL *GetMethod)(
84 _In_ const MI_Class *self,
85 krisbash 1.1 _In_z_ const MI_Char *name,
86 _Out_opt_ MI_QualifierSet *qualifierSet,
87 _Out_opt_ MI_ParameterSet *parameterSet,
88 _Out_opt_ MI_Uint32 *index
89 );
90
91 MI_Result (MI_CALL *GetParentClassName)(
92 _In_ const MI_Class *self,
93 _Outptr_result_maybenull_z_ const MI_Char **name);
94
95 MI_Result (MI_CALL *GetParentClass)(
96 _In_ const MI_Class *self,
97 _Outptr_ MI_Class **parentClass);
98
99 MI_Result (MI_CALL *Delete)(
100 _Inout_ MI_Class* self);
101
102 MI_Result (MI_CALL *Clone)(
103 _In_ const MI_Class* self,
104 _Outptr_ MI_Class** newClass);
105
106 krisbash 1.1 // new functions extending the existing functionality
107 MI_Result (MI_CALL *GetClassFlagsExt)(
108 _In_ const MI_Class* self,
109 _Out_ MI_Uint32* flags);
110
111 // here the caller provides a class object and the function just fills in the class decl
112 MI_Result (MI_CALL *GetParentClassExt)(
113 _In_ const MI_Class* self,
114 _Out_ MI_Class *parentClass);
115
116 MI_Result (MI_CALL *GetElementAtExt)(
117 _In_ const MI_Class* self,
118 MI_Uint32 index,
119 _Outptr_opt_result_maybenull_z_ const MI_Char** name,
120 _Out_opt_ MI_Value* value,
121 _Out_opt_ MI_Boolean* valueExists,
122 _Out_opt_ MI_Type* type,
123 _Out_opt_ MI_Uint32* subscript,
124 _Out_opt_ MI_Uint32* offset,
125 _Outptr_opt_result_maybenull_z_ MI_Char **referenceClass,
126 _Outptr_opt_result_maybenull_z_ MI_Char **originClass,
127 krisbash 1.1 _Outptr_opt_result_maybenull_z_ MI_Char **propagatorClass,
128 _Out_opt_ MI_QualifierSet *qualifierSet,
129 _Out_opt_ MI_Uint32* flags);
130
131 MI_Result (MI_CALL *GetMethodAtExt)(
132 _In_ const MI_Class *self,
133 MI_Uint32 index,
134 _Outptr_result_z_ const MI_Char **name,
135 _Outptr_opt_result_maybenull_z_ MI_Char **originClass,
136 _Outptr_opt_result_maybenull_z_ MI_Char **propagatorClass,
137 _Out_opt_ MI_QualifierSet *qualifierSet,
138 _Out_opt_ MI_ParameterSet *parameterSet,
139 _Out_opt_ MI_Uint32* flags);
140 } MI_ClassExtendedFTInternal;
141
142 typedef struct _MI_ParameterSetExtendedFTInternal
143 {
144 // existing functions from MI_ClassFT
145
146 MI_Result (MI_CALL *GetMethodReturnType)(
147 _In_ const MI_ParameterSet *self,
148 krisbash 1.1 _Out_ MI_Type *returnType,
149 _Out_ MI_QualifierSet *qualifierSet);
150
151 MI_Result (MI_CALL *GetParameterCount)(
152 _In_ const MI_ParameterSet *self,
153 _Out_ MI_Uint32 *count);
154
155 MI_Result (MI_CALL *GetParameterAt)(
156 _In_ const MI_ParameterSet *self,
157 MI_Uint32 index,
158 _Outptr_result_z_ const MI_Char **name,
159 MI_Type *parameterType,
160 _Outptr_opt_result_maybenull_z_ MI_Char **referenceClass,
161 _Out_ MI_QualifierSet *qualifierSet);
162
163 MI_Result (MI_CALL *GetParameter)(
164 _In_ const MI_ParameterSet *self,
165 _In_z_ const MI_Char *name,
166 _Out_ MI_Type *parameterType,
167 _Outptr_opt_result_maybenull_z_ MI_Char **referenceClass,
168 _Out_ MI_QualifierSet *qualifierSet,
169 krisbash 1.1 _Out_ MI_Uint32 *index);
170
171 // new functions extending the existing functionality
172
173 MI_Result (MI_CALL *GetParameterAtExt)(
174 _In_ const MI_ParameterSet *self,
175 MI_Uint32 index,
176 _Outptr_result_z_ const MI_Char **name,
177 MI_Type *parameterType,
178 _Out_opt_ MI_Uint32* subscript,
179 _Outptr_opt_result_maybenull_z_ MI_Char **referenceClass,
180 _Out_ MI_QualifierSet *qualifierSet,
181 _Out_opt_ MI_Uint32* flags);
182
183 } MI_ParameterSetExtendedFTInternal;
184
185
186 /* Helper functions */
187 MI_EXTERN_C MI_Result Class_Clone_ArrayValue(
188 _Inout_ Batch *batch,
189 MI_Type type,
190 krisbash 1.1 _In_ void *destinationArrayStart,
191 MI_Uint32 arrayLocation,
192 _In_ const void *oldValueLocation);
193
194 MI_EXTERN_C MI_ClassDecl* Class_Clone_ClassDecl(
195 _Inout_ Batch *batch,
196 _In_ const MI_ClassDecl *classDecl);
197
198
199 /*============================================================================
200 * Assumes that the Class extended function table is present in ft field of MI_Class pointer being passed in
201 *============================================================================
202 */
203
204 MI_INLINE const MI_ClassExtendedFTInternal * MI_CALL GetClassExtendedFt(const MI_Class *miClass)
205 {
206 return ((const MI_ClassExtendedFTInternal *)(miClass->ft));
207 }
208
209 /*============================================================================
210 * Assumes that ParameterSet extended function table is present in ft field of ParameterSetFT pointer being passed in
211 krisbash 1.1 *============================================================================
212 */
213
214 MI_INLINE const MI_ParameterSetExtendedFTInternal * MI_CALL GetParameterSetExtendedFt(const MI_ParameterSet *parameterSet)
215 {
216 return ((const MI_ParameterSetExtendedFTInternal *)(parameterSet->ft));
217 }
218
219 /*============================================================================
220 * Get function table from qualifierSet
221 *============================================================================
222 */
223 MI_INLINE const MI_QualifierSetFT * MI_CALL GetQualifierSetFt(const MI_QualifierSet *qualifierSet)
224 {
225 return qualifierSet->ft;
226 }
227
228 MI_EXTERN_C MI_Result MI_CALL Class_Construct(MI_Class* self, const MI_ClassDecl* classDecl);
229
230 MI_EXTERN_C MI_Result MI_CALL Class_New(
231 _In_ const MI_ClassDecl *classDecl,
232 krisbash 1.1 _In_opt_z_ const MI_Char *namespaceName,
233 _In_opt_z_ const MI_Char *serverName,
234 _Out_ MI_Class **newClass);
235
236
237 #endif // End _CLASS_h
|