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