aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-object.h
diff options
context:
space:
mode:
authorNot Zed <NotZed@Ximian.com>2004-11-04 13:34:05 +0800
committerMichael Zucci <zucchi@src.gnome.org>2004-11-04 13:34:05 +0800
commit0b736de5187a40f7e2c1414387cc8251e8d5ac9a (patch)
tree7daaedce122b86bda5dc333808c705e67e40c0f6 /camel/camel-object.h
parent584ff682e56b90d2a20dc77250ab691a525a2873 (diff)
downloadgsoc2013-evolution-0b736de5187a40f7e2c1414387cc8251e8d5ac9a.tar
gsoc2013-evolution-0b736de5187a40f7e2c1414387cc8251e8d5ac9a.tar.gz
gsoc2013-evolution-0b736de5187a40f7e2c1414387cc8251e8d5ac9a.tar.bz2
gsoc2013-evolution-0b736de5187a40f7e2c1414387cc8251e8d5ac9a.tar.lz
gsoc2013-evolution-0b736de5187a40f7e2c1414387cc8251e8d5ac9a.tar.xz
gsoc2013-evolution-0b736de5187a40f7e2c1414387cc8251e8d5ac9a.tar.zst
gsoc2013-evolution-0b736de5187a40f7e2c1414387cc8251e8d5ac9a.zip
check interfaces for events too. (camel_object_trigger_event): check
2004-11-02 Not Zed <NotZed@Ximian.com> * camel-object.c (camel_object_hook_event): check interfaces for events too. (camel_object_trigger_event): check interfaces for events too. (camel_object_class_add_event): more checks for interfaces vs normal object classes. (camel_object_class_add_interface): add an interface to a class. (camel_object_get_interface): query for interfaces on an object. (camel_object_get_type): register the interface type. svn path=/trunk/; revision=27834
Diffstat (limited to 'camel/camel-object.h')
-rw-r--r--camel/camel-object.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/camel/camel-object.h b/camel/camel-object.h
index 9ee9c45345..a1afdd71ca 100644
--- a/camel/camel-object.h
+++ b/camel/camel-object.h
@@ -72,6 +72,10 @@ typedef struct _CamelObject CamelObject;
typedef unsigned int CamelObjectHookID;
typedef struct _CamelObjectMeta CamelObjectMeta;
+extern CamelType camel_interface_type;
+#define CAMEL_INTERFACE_TYPE (camel_interface_type)
+typedef struct _CamelInterface CamelInterface;
+
typedef void (*CamelObjectClassInitFunc) (CamelObjectClass *);
typedef void (*CamelObjectClassFinalizeFunc) (CamelObjectClass *);
typedef void (*CamelObjectInitFunc) (CamelObject *, CamelObjectClass *);
@@ -165,6 +169,8 @@ struct _CamelObjectClass
void (*init)(struct _CamelObject *, struct _CamelObjectClass *);
void (*finalise)(struct _CamelObject *);
+ /* root-class fields follow, type system above */
+
/* get/set interface */
int (*setv)(struct _CamelObject *, struct _CamelException *ex, CamelArgV *args);
int (*getv)(struct _CamelObject *, struct _CamelException *ex, CamelArgGetV *args);
@@ -180,6 +186,11 @@ struct _CamelObjectClass
int (*state_write)(struct _CamelObject *, FILE *fp);
};
+/* an interface is just a class with no instance data */
+struct _CamelInterface {
+ struct _CamelObjectClass type;
+};
+
/* The type system .... it's pretty simple..... */
void camel_type_init (void);
CamelType camel_type_register(CamelType parent, const char * name, /*unsigned int ver, unsigned int rev,*/
@@ -190,6 +201,11 @@ CamelType camel_type_register(CamelType parent, const char * name, /*unsigned in
CamelObjectInitFunc instance_init,
CamelObjectFinalizeFunc instance_finalize);
+CamelType camel_interface_register(CamelType parent, const char *name,
+ size_t classfuncs_size,
+ CamelObjectClassInitFunc class_init,
+ CamelObjectClassFinalizeFunc class_finalize);
+
/* deprecated interface */
#define camel_type_get_global_classfuncs(x) ((CamelObjectClass *)(x))
@@ -197,6 +213,7 @@ CamelType camel_type_register(CamelType parent, const char * name, /*unsigned in
const char *camel_type_to_name (CamelType type);
CamelType camel_name_to_type (const char *name);
void camel_object_class_add_event (CamelObjectClass *klass, const char *name, CamelObjectEventPrepFunc prep);
+void camel_object_class_add_interface(CamelObjectClass *klass, CamelType itype);
void camel_object_class_dump_tree (CamelType root);
@@ -207,6 +224,9 @@ gboolean camel_object_is(CamelObject *obj, CamelType ctype);
CamelObjectClass *camel_object_class_cast (CamelObjectClass *klass, CamelType ctype);
gboolean camel_object_class_is (CamelObjectClass *klass, CamelType ctype);
+CamelObjectClass *camel_interface_cast(CamelObjectClass *klass, CamelType ctype);
+gboolean camel_interface_is(CamelObjectClass *k, CamelType ctype);
+
CamelType camel_object_get_type (void);
CamelObject *camel_object_new (CamelType type);
@@ -226,6 +246,9 @@ void camel_object_remove_event(void *obj, CamelObjectHookID id);
void camel_object_unhook_event(void *obj, const char *name, CamelObjectEventHookFunc hook, void *data);
void camel_object_trigger_event(void *obj, const char *name, void *event_data);
+/* interfaces */
+void *camel_object_get_interface(void *vo, CamelType itype);
+
/* get/set methods */
int camel_object_set(void *obj, struct _CamelException *ex, ...);
int camel_object_setv(void *obj, struct _CamelException *ex, CamelArgV *);