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