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