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