diff options
author | Tim Janik <timj@gtk.org> | 1998-05-06 01:43:56 +0000 |
---|---|---|
committer | Tim Janik <timj@src.gnome.org> | 1998-05-06 01:43:56 +0000 |
commit | 518a8a9c4ed18ea4571e3c9c43c1dbc387e6627b (patch) | |
tree | eb5b0af8fefd7e726af9b6d6d55d19f7f22997a9 /gtk/gtkobject.h | |
parent | c3e04d86ec5a4cd6eb6f62e89e63381f9a70d1fc (diff) | |
download | gtk+-518a8a9c4ed18ea4571e3c9c43c1dbc387e6627b.tar.gz |
reimplemented the signal storage system to use a linear array rather than
Wed May 6 02:16:34 1998 Tim Janik <timj@gtk.org>
* gtk/gtksignal.c: reimplemented the signal storage system to use a
linear array rather than a hash table.
be carefull *not* to keep any GtkSignal pointers across invokations
of gtk_signal_next_and_invalidate() and therefore gtk_signal_new[v]().
general code cleanups, made all allocations through memchunks.
(gtk_signal_lookup): we now do the lookup of signals through a key_id
for the signal names to avoid multiple hashing of the signal name on
lookups for the several hirarchy levels of an object.
Tue May 5 15:33:27 1998 Tim Janik <timj@gtk.org>
* gtk/gtkmain.c (gtk_init): added gtk_signal_init() to avoid repeatedly
checking for signal initialization in gtksignal.c.
* gtk/gtktypeutils.c (TYPE_NODES_BLOCK_SIZE): reseted this to 200 after
a long debugging period ;)
Mon May 4 00:30:11 1998 Tim Janik <timj@gtk.org>
* gtk/gtktypeutils.h (GTK_TYPE_IS_A): new macro to speedup
gtk_type_is_a().
* gtk/gtktypeutils.c: reimplemented the type storage system to use a
linear array rather than a hash table. it actually speeded up testgtk
for a *considerable* amount. be carefull *not* to keep any GtkTypeNode
pointers across invokations of gtk_type_node_next_and_invalidate() and
therefore gtk_type_unique()!
* gtk/gtkobject.h (GTK_IS_OBJECT_CLASS): new macro to test for the
inheritance of a class pointer.
(GTK_OBJECT): modifications for speedups.
(GTK_IS_OBJECT): likewise.
(GTK_OBJECT_CLASS): likewise.
(suggested by owen).
* gtk/gtkcontainer.h (GTK_IS_CONTAINER_CLASS): new macro.
* gtk/gtkwidget.h (GTK_IS_WIDGET_CLASS): new macro.
* gtk/gtk.defs (GtkTooltips): define GtkTooltips as object not as boxed,
since its derivation changed 4 month ago ;(. showed up with the unique
type name checking code in gtk_type_unique().
* random guint->GtkType and macro fixups.
Diffstat (limited to 'gtk/gtkobject.h')
-rw-r--r-- | gtk/gtkobject.h | 65 |
1 files changed, 44 insertions, 21 deletions
diff --git a/gtk/gtkobject.h b/gtk/gtkobject.h index 37f7017cfb..7017498745 100644 --- a/gtk/gtkobject.h +++ b/gtk/gtkobject.h @@ -27,6 +27,7 @@ #ifdef __cplusplus extern "C" { +#pragma } #endif /* __cplusplus */ @@ -51,18 +52,43 @@ extern "C" { #endif /* GTK_NO_CHECK_CASTS */ -/* Determines whether 'obj' is a type of 'otype'. +/* Determines whether `obj' and `klass' are a type of `otype'. */ -#define GTK_CHECK_TYPE(obj,otype) (gtk_type_is_a (((GtkObject*) (obj))->klass->type, (otype))) - - -/* Macro for casting a pointer to a GtkObject pointer. +#define GTK_CHECK_TYPE(obj,otype) ( \ + GTK_TYPE_IS_A (((GtkObject*) (obj))->klass->type, (otype)) \ +) +#define GTK_CHECK_CLASS_TYPE(klass,otype) ( \ + GTK_TYPE_IS_A (((GtkObjectClass*) (klass))->type, (otype)) \ +) + +/* Macro for casting a pointer to a GtkObject or GtkObjectClass pointer. + * The second portion of the ?: statments are just in place to offer + * descriptive warning message. + */ +#define GTK_OBJECT(object) ( \ + GTK_IS_OBJECT (object) ? \ + (GtkObject*) (object) : \ + (GtkObject*) gtk_object_check_cast ((GtkObject*) (object), GTK_TYPE_OBJECT) \ +) +#define GTK_OBJECT_CLASS(klass) ( \ + GTK_IS_OBJECT_CLASS (klass) ? \ + (GtkObjectClass*) (klass) : \ + (GtkObjectClass*) gtk_object_check_class_cast ((GtkObjectClass*) (klass), GTK_TYPE_OBJECT) \ +) + +/* Macro for testing whether `object' and `klass' are of type GTK_TYPE_OBJECT. */ -#define GTK_OBJECT(obj) GTK_CHECK_CAST ((obj), gtk_object_get_type (), GtkObject) +#define GTK_IS_OBJECT(object) ( \ + (object) != NULL && \ + GTK_IS_OBJECT_CLASS (((GtkObject*) (object))->klass) \ +) +#define GTK_IS_OBJECT_CLASS(klass) ( \ + (klass) != NULL && \ + GTK_FUNDAMENTAL_TYPE (((GtkObjectClass*) (klass))->type) == GTK_TYPE_OBJECT \ +) /* Macros for extracting various fields from GtkObject and GtkObjectClass. */ -#define GTK_OBJECT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), gtk_object_get_type (), GtkObjectClass)) #define GTK_OBJECT_TYPE(obj) (GTK_OBJECT (obj)->klass->type) #define GTK_OBJECT_SIGNALS(obj) (GTK_OBJECT (obj)->klass->signals) #define GTK_OBJECT_NSIGNALS(obj) (GTK_OBJECT (obj)->klass->nsignals) @@ -81,17 +107,6 @@ enum GTK_OBJECT_FLAG_LAST = GTK_RESERVED_2 }; -/* GtkArg flag bits for gtk_object_add_arg_type - */ -enum -{ - GTK_ARG_READABLE = 1 << 0, - GTK_ARG_WRITABLE = 1 << 1, - GTK_ARG_CONSTRUCT = 1 << 2 -}; -#define GTK_ARG_READWRITE (GTK_ARG_READABLE | GTK_ARG_WRITABLE) - - /* Macros for extracting the object_flags from GtkObject. */ #define GTK_OBJECT_FLAGS(obj) (GTK_OBJECT (obj)->flags) @@ -103,9 +118,17 @@ enum #define GTK_OBJECT_SET_FLAGS(obj,flag) G_STMT_START{ (GTK_OBJECT_FLAGS (obj) |= (flag)); }G_STMT_END #define GTK_OBJECT_UNSET_FLAGS(obj,flag) G_STMT_START{ (GTK_OBJECT_FLAGS (obj) &= ~(flag)); }G_STMT_END -/* Macro for testing whether "obj" is of type GtkObject. +/* GtkArg flag bits for gtk_object_add_arg_type */ -#define GTK_IS_OBJECT(obj) (GTK_CHECK_TYPE ((obj), gtk_object_get_type ())) +enum +{ + GTK_ARG_READABLE = 1 << 0, + GTK_ARG_WRITABLE = 1 << 1, + GTK_ARG_CONSTRUCT = 1 << 2, + /* aliases + */ + GTK_ARG_READWRITE = GTK_ARG_READABLE | GTK_ARG_WRITABLE +}; typedef struct _GtkObjectClass GtkObjectClass; @@ -193,7 +216,7 @@ typedef void (*GtkSignalMarshaller) (GtkObject *object, /* Get the type identifier for GtkObject's. */ -guint gtk_object_get_type (void); +GtkType gtk_object_get_type (void); /* Append "signals" to those already defined in "class". */ |