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