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