00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 #ifndef DBUS_GOBJECT_TYPE_SPECIALIZED_H
00025 #define DBUS_GOBJECT_TYPE_SPECIALIZED_H
00026 
00027 #include <glib.h>
00028 #include <glib-object.h>
00029 
00030 G_BEGIN_DECLS
00031 
00032 GType          dbus_g_type_get_collection                   (const char *container,
00033                                                              GType       specialization);
00034 GType          dbus_g_type_get_map                          (const char *container,
00035                                                              GType       key_specialization,
00036                                                              GType       value_specialization);
00037 GType          dbus_g_type_get_structv                      (const char *container,
00038                                                              guint       num_members,
00039                                                              GType      *types);
00040 GType          dbus_g_type_get_struct                       (const char *container,
00041                                                              GType       first_type,
00042                                                              ...);
00043 gboolean       dbus_g_type_is_collection                    (GType       gtype);
00044 gboolean       dbus_g_type_is_map                           (GType       gtype);
00045 gboolean       dbus_g_type_is_struct                        (GType       gtype);
00046 GType          dbus_g_type_get_collection_specialization    (GType       gtype);
00047 GType          dbus_g_type_get_map_key_specialization       (GType       gtype);
00048 GType          dbus_g_type_get_map_value_specialization     (GType       gtype);
00049 GType          dbus_g_type_get_struct_member_type           (GType       gtype,
00050                                                              guint       member);
00051 guint          dbus_g_type_get_struct_size                  (GType       gtype);
00052 
00053 typedef void   (*DBusGTypeSpecializedCollectionIterator)    (const GValue *value,
00054                                                              gpointer      user_data);
00055 typedef void   (*DBusGTypeSpecializedMapIterator)           (const GValue *key_val,
00056                                                              const GValue *value_val,
00057                                                              gpointer      user_data);
00058 
00059 gpointer       dbus_g_type_specialized_construct            (GType gtype);
00060 
00061 typedef struct {
00062   
00063   GValue *val;
00064   GType specialization_type;
00065   
00066   gpointer b;
00067   guint c;
00068   gpointer d;
00069 } DBusGTypeSpecializedAppendContext;
00070 
00071 void           dbus_g_type_specialized_init_append             (GValue *value, DBusGTypeSpecializedAppendContext *ctx);
00072 
00073 void           dbus_g_type_specialized_collection_append       (DBusGTypeSpecializedAppendContext *ctx, GValue *elt);
00074 
00075 void           dbus_g_type_specialized_collection_end_append   (DBusGTypeSpecializedAppendContext *ctx);
00076 
00077 void           dbus_g_type_specialized_map_append              (DBusGTypeSpecializedAppendContext *ctx,
00078                                                                 GValue                            *key,
00079                                                                 GValue                            *val);
00080                                                                 
00081 
00082 gboolean       dbus_g_type_collection_get_fixed             (GValue                                 *value,
00083                                                              gpointer                               *data,
00084                                                              guint                                  *len);
00085 
00086 void           dbus_g_type_collection_value_iterate         (const GValue                           *value,
00087                                                              DBusGTypeSpecializedCollectionIterator  iterator,
00088                                                              gpointer                                user_data);
00089 
00090 void           dbus_g_type_map_value_iterate                (const GValue                           *value,
00091                                                              DBusGTypeSpecializedMapIterator         iterator,
00092                                                              gpointer                                user_data);
00093 
00094 gboolean       dbus_g_type_struct_get_member            (const GValue *value,
00095                                                          guint member,
00096                                                          GValue *dest);
00097 gboolean       dbus_g_type_struct_set_member            (GValue *value,
00098                                                          guint member,
00099                                                          const GValue *src);
00100 
00101 gboolean       dbus_g_type_struct_get                   (const GValue *value,
00102                                                          guint member,
00103                                                          ...);
00104 
00105 gboolean       dbus_g_type_struct_set                   (GValue *value,
00106                                                          guint member,
00107                                                          ...);
00108 
00109 typedef gpointer (*DBusGTypeSpecializedConstructor)     (GType type);
00110 typedef void     (*DBusGTypeSpecializedFreeFunc)        (GType type, gpointer val);
00111 typedef gpointer (*DBusGTypeSpecializedCopyFunc)        (GType type, gpointer src);
00112 
00113 typedef struct {
00114   DBusGTypeSpecializedConstructor    constructor;
00115   DBusGTypeSpecializedFreeFunc       free_func;
00116   DBusGTypeSpecializedCopyFunc       copy_func;
00117   GDestroyNotify                     simple_free_func; 
00118   gpointer                           padding2;
00119   gpointer                           padding3;
00120 } DBusGTypeSpecializedVtable;
00121 
00122 typedef gboolean (*DBusGTypeSpecializedCollectionFixedAccessorFunc) (GType type, gpointer instance, gpointer *values, guint *len);
00123 typedef void     (*DBusGTypeSpecializedCollectionIteratorFunc)      (GType type, gpointer instance, DBusGTypeSpecializedCollectionIterator iterator, gpointer user_data);
00124 typedef void     (*DBusGTypeSpecializedCollectionAppendFunc)        (DBusGTypeSpecializedAppendContext *ctx, GValue *val);
00125 typedef void     (*DBusGTypeSpecializedCollectionEndAppendFunc)     (DBusGTypeSpecializedAppendContext *ctx);
00126 
00127 typedef struct {
00128   DBusGTypeSpecializedVtable                        base_vtable;
00129   DBusGTypeSpecializedCollectionFixedAccessorFunc   fixed_accessor;
00130   DBusGTypeSpecializedCollectionIteratorFunc        iterator;
00131   DBusGTypeSpecializedCollectionAppendFunc          append_func;
00132   DBusGTypeSpecializedCollectionEndAppendFunc       end_append_func;
00133 } DBusGTypeSpecializedCollectionVtable;
00134 
00135 typedef void (*DBusGTypeSpecializedMapIteratorFunc) (GType type, gpointer instance, DBusGTypeSpecializedMapIterator iterator, gpointer user_data);
00136 typedef void (*DBusGTypeSpecializedMapAppendFunc)   (DBusGTypeSpecializedAppendContext *ctx, GValue *key, GValue *val);
00137 
00138 typedef struct {
00139   DBusGTypeSpecializedVtable                        base_vtable;
00140   DBusGTypeSpecializedMapIteratorFunc               iterator;
00141   DBusGTypeSpecializedMapAppendFunc                 append_func;
00142 } DBusGTypeSpecializedMapVtable;
00143 
00144 typedef gboolean (*DBusGTypeSpecializedStructGetMember) (GType type, gpointer instance, guint member, GValue *ret_value);
00145 typedef gboolean (*DBusGTypeSpecializedStructSetMember) (GType type, gpointer instance, guint member, const GValue *new_value);
00146 
00147 typedef struct {
00148   DBusGTypeSpecializedVtable                        base_vtable;
00149   DBusGTypeSpecializedStructGetMember               get_member;
00150   DBusGTypeSpecializedStructSetMember               set_member;
00151 } DBusGTypeSpecializedStructVtable;
00152 
00153 void           dbus_g_type_specialized_init           (void);
00154 
00155 void           dbus_g_type_register_collection        (const char                                   *name,
00156                                                        const DBusGTypeSpecializedCollectionVtable   *vtable,
00157                                                        guint                                         flags);
00158   
00159 void           dbus_g_type_register_map               (const char                                   *name,
00160                                                        const DBusGTypeSpecializedMapVtable          *vtable,
00161                                                        guint                                         flags);
00162 
00163 void           dbus_g_type_register_struct             (const char                                   *name,
00164                                                        const DBusGTypeSpecializedStructVtable        *vtable,
00165                                                        guint                                          flags);
00166 
00167 const DBusGTypeSpecializedMapVtable* dbus_g_type_map_peek_vtable (GType map_type);
00168 const DBusGTypeSpecializedCollectionVtable* dbus_g_type_collection_peek_vtable (GType collection_type);
00169 
00170 const DBusGTypeSpecializedStructVtable* dbus_g_type_struct_peek_vtable (GType struct_type);
00171 
00172 G_END_DECLS
00173 
00174 #endif