Mon Nov 19 11:37:14 CET 2001 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / object.h
1 #ifndef _MONO_CLI_OBJECT_H_
2 #define _MONO_CLI_OBJECT_H_
3
4 #include <mono/metadata/class.h>
5 #include <mono/metadata/threads-types.h>
6
7 typedef struct {
8         MonoClass *klass;
9         MonoThreadsSync synchronisation;
10 } MonoObject;
11
12 typedef struct {
13         guint32 length;
14         guint32 lower_bound;
15 } MonoArrayBounds;
16
17 typedef struct {
18         MonoObject obj;
19         MonoArrayBounds *bounds;
20         /* we use double to ensure proper alignment on platforms that need it */
21         double vector [MONO_ZERO_LEN_ARRAY];
22 } MonoArray;
23
24 typedef struct {
25         MonoObject obj;
26         MonoArray *c_str;
27         gint32 length;
28 } MonoString;
29
30 typedef struct {
31         MonoObject object;
32         MonoObject *inner_ex;
33         MonoString *message;
34 } MonoException;
35
36 typedef struct {
37         MonoObject object;
38         MonoObject *target_type;
39         MonoObject *target;
40         MonoString *method;
41         gpointer    method_ptr;
42 } MonoDelegate;
43
44 #define mono_array_length(array) ((array)->bounds->length)
45 #define mono_array_addr(array,type,index) ( ((char*)(array)->vector) + sizeof (type) * (index) )
46 #define mono_array_addr_with_size(array,size,index) ( ((char*)(array)->vector) + (size) * (index) )
47 #define mono_array_get(array,type,index) ( *(type*)mono_array_addr ((array), type, (index)) ) 
48 #define mono_array_set(array,type,index,value)  \
49         do {    \
50                 type *__p = (type *) mono_array_addr ((array), type, (index));  \
51                 *__p = (value); \
52         } while (0)
53
54 #define mono_string_chars(s) ((gushort*)(s)->c_str->vector)
55
56 MonoObject *
57 mono_object_new             (MonoClass *klass);
58
59 MonoObject *
60 mono_object_new_from_token  (MonoImage *image, guint32 token);
61
62 MonoArray*
63 mono_array_new              (MonoClass *eclass, guint32 n);
64
65 MonoArray*
66 mono_array_new_full         (MonoClass *array_class, guint32 *lengths, guint32 *lower_bounds);
67
68 MonoString*
69 mono_string_new_utf16       (const guint16 *text, gint32 len);
70
71 MonoString*
72 mono_ldstr                  (MonoImage *image, guint32 index);
73
74 MonoString*
75 mono_string_is_interned     (MonoString *str);
76
77 MonoString*
78 mono_string_intern          (MonoString *str);
79
80 MonoString*
81 mono_string_new             (const char *text);
82
83 char *
84 mono_string_to_utf8         (MonoString *string_obj);
85
86 void       
87 mono_object_free            (MonoObject *o);
88
89 MonoObject *
90 mono_value_box              (MonoClass *klass, gpointer val);
91                       
92 MonoObject *
93 mono_object_clone           (MonoObject *obj);
94
95 gboolean
96 mono_object_isinst          (MonoObject *obj, MonoClass *klass);
97
98 typedef void (*MonoExceptionFunc) (MonoException *ex);
99
100 void
101 mono_install_handler        (MonoExceptionFunc func);
102
103 void
104 mono_raise_exception        (MonoException *ex);
105
106 #endif
107