Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / metadata / class.h
1 /**
2  * \file
3  */
4
5 #ifndef _MONO_CLI_CLASS_H_
6 #define _MONO_CLI_CLASS_H_
7
8 #include <mono/metadata/metadata.h>
9 #include <mono/metadata/image.h>
10 #include <mono/metadata/loader.h>
11 #include <mono/utils/mono-error.h>
12
13 MONO_BEGIN_DECLS
14
15 typedef struct MonoVTable MonoVTable;
16
17 typedef struct _MonoClassField MonoClassField;
18 typedef struct _MonoProperty MonoProperty;
19 typedef struct _MonoEvent MonoEvent;
20
21 MONO_API MonoClass *
22 mono_class_get             (MonoImage *image, uint32_t type_token);
23
24 MONO_API MonoClass *
25 mono_class_get_full        (MonoImage *image, uint32_t type_token, MonoGenericContext *context);
26
27 MONO_API mono_bool
28 mono_class_init            (MonoClass *klass);
29
30 MONO_API MonoVTable *
31 mono_class_vtable          (MonoDomain *domain, MonoClass *klass);
32
33 MONO_RT_EXTERNAL_ONLY MONO_API MonoClass *
34 mono_class_from_name       (MonoImage *image, const char* name_space, const char *name);
35
36 MONO_RT_EXTERNAL_ONLY MONO_API MonoClass *
37 mono_class_from_name_case  (MonoImage *image, const char* name_space, const char *name);
38
39 MONO_API MonoMethod *
40 mono_class_get_method_from_name_flags (MonoClass *klass, const char *name, int param_count, int flags);
41
42 MONO_API MonoClass * 
43 mono_class_from_typeref    (MonoImage *image, uint32_t type_token);
44
45 MONO_API MonoClass *
46 mono_class_from_typeref_checked (MonoImage *image, uint32_t type_token, MonoError *error);
47
48 MONO_RT_EXTERNAL_ONLY
49 MONO_API MonoClass *
50 mono_class_from_generic_parameter (MonoGenericParam *param, MonoImage *image, mono_bool is_mvar);
51
52 MONO_RT_EXTERNAL_ONLY MONO_API MonoType*
53 mono_class_inflate_generic_type (MonoType *type, MonoGenericContext *context) /* MONO_DEPRECATED */;
54
55 MONO_API MonoMethod*
56 mono_class_inflate_generic_method (MonoMethod *method, MonoGenericContext *context);
57
58 MONO_API MonoMethod *
59 mono_get_inflated_method (MonoMethod *method);
60
61 MONO_API MonoClassField*
62 mono_field_from_token      (MonoImage *image, uint32_t token, MonoClass **retklass, MonoGenericContext *context);
63
64 MONO_API MonoClass *
65 mono_bounded_array_class_get (MonoClass *element_class, uint32_t rank, mono_bool bounded);
66
67 MONO_API MonoClass *
68 mono_array_class_get       (MonoClass *element_class, uint32_t rank);
69
70 MONO_API MonoClass *
71 mono_ptr_class_get         (MonoType *type);
72
73 MONO_API MonoClassField *
74 mono_class_get_field       (MonoClass *klass, uint32_t field_token);
75
76 MONO_API MonoClassField *
77 mono_class_get_field_from_name (MonoClass *klass, const char *name);
78
79 MONO_API uint32_t
80 mono_class_get_field_token (MonoClassField *field);
81
82 MONO_API uint32_t
83 mono_class_get_event_token (MonoEvent *event);
84
85 MONO_API MonoProperty*
86 mono_class_get_property_from_name (MonoClass *klass, const char *name);
87
88 MONO_API uint32_t
89 mono_class_get_property_token (MonoProperty *prop);
90
91 MONO_API int32_t
92 mono_array_element_size    (MonoClass *ac);
93
94 MONO_API int32_t
95 mono_class_instance_size   (MonoClass *klass);
96
97 MONO_API int32_t
98 mono_class_array_element_size (MonoClass *klass);
99
100 MONO_API int32_t
101 mono_class_data_size       (MonoClass *klass);
102
103 MONO_API int32_t
104 mono_class_value_size      (MonoClass *klass, uint32_t *align);
105
106 MONO_API int32_t
107 mono_class_min_align       (MonoClass *klass);
108
109 MONO_API MonoClass *
110 mono_class_from_mono_type  (MonoType *type);
111
112 MONO_API mono_bool
113 mono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc, 
114                                                    mono_bool check_interfaces);
115
116 MONO_API mono_bool
117 mono_class_is_assignable_from (MonoClass *klass, MonoClass *oklass);
118
119 MONO_API void*
120 mono_ldtoken               (MonoImage *image, uint32_t token, MonoClass **retclass, MonoGenericContext *context);
121
122 MONO_API char*         
123 mono_type_get_name         (MonoType *type);
124
125 MONO_API MonoType*
126 mono_type_get_underlying_type (MonoType *type);
127
128 /* MonoClass accessors */
129 MONO_API MonoImage*
130 mono_class_get_image         (MonoClass *klass);
131
132 MONO_API MonoClass*
133 mono_class_get_element_class (MonoClass *klass);
134
135 MONO_API mono_bool
136 mono_class_is_valuetype      (MonoClass *klass);
137
138 MONO_API mono_bool
139 mono_class_is_enum          (MonoClass *klass);
140
141 MONO_API MonoType*
142 mono_class_enum_basetype    (MonoClass *klass);
143
144 MONO_API MonoClass*
145 mono_class_get_parent        (MonoClass *klass);
146
147 MONO_API MonoClass*
148 mono_class_get_nesting_type  (MonoClass *klass);
149
150 MONO_API int
151 mono_class_get_rank          (MonoClass *klass);
152
153 MONO_API uint32_t
154 mono_class_get_flags         (MonoClass *klass);
155
156 MONO_API const char*
157 mono_class_get_name          (MonoClass *klass);
158
159 MONO_API const char*
160 mono_class_get_namespace     (MonoClass *klass);
161
162 MONO_API MonoType*
163 mono_class_get_type          (MonoClass *klass);
164
165 MONO_API uint32_t
166 mono_class_get_type_token    (MonoClass *klass);
167
168 MONO_API MonoType*
169 mono_class_get_byref_type    (MonoClass *klass);
170
171 MONO_API int
172 mono_class_num_fields        (MonoClass *klass);
173
174 MONO_API int
175 mono_class_num_methods       (MonoClass *klass);
176
177 MONO_API int
178 mono_class_num_properties    (MonoClass *klass);
179
180 MONO_API int
181 mono_class_num_events        (MonoClass *klass);
182
183 MONO_API MonoClassField*
184 mono_class_get_fields        (MonoClass* klass, void **iter);
185
186 MONO_API MonoMethod*
187 mono_class_get_methods       (MonoClass* klass, void **iter);
188
189 MONO_API MonoProperty*
190 mono_class_get_properties    (MonoClass* klass, void **iter);
191
192 MONO_API MonoEvent*
193 mono_class_get_events        (MonoClass* klass, void **iter);
194
195 MONO_API MonoClass*
196 mono_class_get_interfaces    (MonoClass* klass, void **iter);
197
198 MONO_API MonoClass*
199 mono_class_get_nested_types  (MonoClass* klass, void **iter);
200
201 MONO_API mono_bool
202 mono_class_is_delegate       (MonoClass* klass);
203
204 MONO_API mono_bool
205 mono_class_implements_interface (MonoClass* klass, MonoClass* iface);
206
207 /* MonoClassField accessors */
208 MONO_API const char*
209 mono_field_get_name   (MonoClassField *field);
210
211 MONO_API MonoType*
212 mono_field_get_type   (MonoClassField *field);
213
214 MONO_API MonoClass*
215 mono_field_get_parent (MonoClassField *field);
216
217 MONO_API uint32_t
218 mono_field_get_flags  (MonoClassField *field);
219
220 MONO_API uint32_t
221 mono_field_get_offset  (MonoClassField *field);
222
223 MONO_API const char *
224 mono_field_get_data  (MonoClassField *field);
225
226 /* MonoProperty acessors */
227 MONO_API const char*
228 mono_property_get_name       (MonoProperty *prop);
229
230 MONO_API MonoMethod*
231 mono_property_get_set_method (MonoProperty *prop);
232
233 MONO_API MonoMethod*
234 mono_property_get_get_method (MonoProperty *prop);
235
236 MONO_API MonoClass*
237 mono_property_get_parent     (MonoProperty *prop);
238
239 MONO_API uint32_t
240 mono_property_get_flags      (MonoProperty *prop);
241
242 /* MonoEvent accessors */
243 MONO_API const char*
244 mono_event_get_name          (MonoEvent *event);
245
246 MONO_API MonoMethod*
247 mono_event_get_add_method    (MonoEvent *event);
248
249 MONO_API MonoMethod*
250 mono_event_get_remove_method (MonoEvent *event);
251
252 MONO_API MonoMethod*
253 mono_event_get_remove_method (MonoEvent *event);
254
255 MONO_API MonoMethod*
256 mono_event_get_raise_method  (MonoEvent *event);
257
258 MONO_API MonoClass*
259 mono_event_get_parent        (MonoEvent *event);
260
261 MONO_API uint32_t
262 mono_event_get_flags         (MonoEvent *event);
263
264 MONO_API MonoMethod *
265 mono_class_get_method_from_name (MonoClass *klass, const char *name, int param_count);
266
267 MONO_API char *
268 mono_class_name_from_token (MonoImage *image, uint32_t type_token);
269
270 MONO_API mono_bool
271 mono_method_can_access_field (MonoMethod *method, MonoClassField *field);
272
273 MONO_API mono_bool
274 mono_method_can_access_method (MonoMethod *method, MonoMethod *called);
275
276 MONO_END_DECLS
277
278 #endif /* _MONO_CLI_CLASS_H_ */