removed old G_ENUM(), G_FLAGS(), G_NV() and G_SV() macros. added macros

Sat Oct 31 05:08:26 1998  Tim Janik  <timj@gtk.org>

        * glib.h: removed old G_ENUM(), G_FLAGS(), G_NV() and G_SV() macros.
        added macros G_STRUCT_OFFSET(), G_STRUCT_MEMBER_P() and
        G_STRUCT_MEMBER() for handling structure fields through their offsets.
        (struct _GHookList): added a hook_free function member, that can be used
        to free additional fields in derived hook structures.
        g_hook_free(): if hook_list->hook_free != NULL, call this function prior
        to freeing the hook. (this functionality should have been there in the
        first place, it just got forgotten as an implementation detail).
This commit is contained in:
Tim Janik 1998-10-31 18:57:36 +00:00 committed by Tim Janik
parent a32e40e2c4
commit e8a920f88d
12 changed files with 120 additions and 28 deletions

View File

@ -1,3 +1,14 @@
Sat Oct 31 05:08:26 1998 Tim Janik <timj@gtk.org>
* glib.h: removed old G_ENUM(), G_FLAGS(), G_NV() and G_SV() macros.
added macros G_STRUCT_OFFSET(), G_STRUCT_MEMBER_P() and
G_STRUCT_MEMBER() for handling structure fields through their offsets.
(struct _GHookList): added a hook_free function member, that can be used
to free additional fields in derived hook structures.
g_hook_free(): if hook_list->hook_free != NULL, call this function prior
to freeing the hook. (this functionality should have been there in the
first place, it just got forgotten as an implementation detail).
Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org> Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org>
* glib.h: G_BREAKPOINT for alpha from Robert Wilhelm * glib.h: G_BREAKPOINT for alpha from Robert Wilhelm

View File

@ -1,3 +1,14 @@
Sat Oct 31 05:08:26 1998 Tim Janik <timj@gtk.org>
* glib.h: removed old G_ENUM(), G_FLAGS(), G_NV() and G_SV() macros.
added macros G_STRUCT_OFFSET(), G_STRUCT_MEMBER_P() and
G_STRUCT_MEMBER() for handling structure fields through their offsets.
(struct _GHookList): added a hook_free function member, that can be used
to free additional fields in derived hook structures.
g_hook_free(): if hook_list->hook_free != NULL, call this function prior
to freeing the hook. (this functionality should have been there in the
first place, it just got forgotten as an implementation detail).
Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org> Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org>
* glib.h: G_BREAKPOINT for alpha from Robert Wilhelm * glib.h: G_BREAKPOINT for alpha from Robert Wilhelm

View File

@ -1,3 +1,14 @@
Sat Oct 31 05:08:26 1998 Tim Janik <timj@gtk.org>
* glib.h: removed old G_ENUM(), G_FLAGS(), G_NV() and G_SV() macros.
added macros G_STRUCT_OFFSET(), G_STRUCT_MEMBER_P() and
G_STRUCT_MEMBER() for handling structure fields through their offsets.
(struct _GHookList): added a hook_free function member, that can be used
to free additional fields in derived hook structures.
g_hook_free(): if hook_list->hook_free != NULL, call this function prior
to freeing the hook. (this functionality should have been there in the
first place, it just got forgotten as an implementation detail).
Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org> Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org>
* glib.h: G_BREAKPOINT for alpha from Robert Wilhelm * glib.h: G_BREAKPOINT for alpha from Robert Wilhelm

View File

@ -1,3 +1,14 @@
Sat Oct 31 05:08:26 1998 Tim Janik <timj@gtk.org>
* glib.h: removed old G_ENUM(), G_FLAGS(), G_NV() and G_SV() macros.
added macros G_STRUCT_OFFSET(), G_STRUCT_MEMBER_P() and
G_STRUCT_MEMBER() for handling structure fields through their offsets.
(struct _GHookList): added a hook_free function member, that can be used
to free additional fields in derived hook structures.
g_hook_free(): if hook_list->hook_free != NULL, call this function prior
to freeing the hook. (this functionality should have been there in the
first place, it just got forgotten as an implementation detail).
Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org> Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org>
* glib.h: G_BREAKPOINT for alpha from Robert Wilhelm * glib.h: G_BREAKPOINT for alpha from Robert Wilhelm

View File

@ -1,3 +1,14 @@
Sat Oct 31 05:08:26 1998 Tim Janik <timj@gtk.org>
* glib.h: removed old G_ENUM(), G_FLAGS(), G_NV() and G_SV() macros.
added macros G_STRUCT_OFFSET(), G_STRUCT_MEMBER_P() and
G_STRUCT_MEMBER() for handling structure fields through their offsets.
(struct _GHookList): added a hook_free function member, that can be used
to free additional fields in derived hook structures.
g_hook_free(): if hook_list->hook_free != NULL, call this function prior
to freeing the hook. (this functionality should have been there in the
first place, it just got forgotten as an implementation detail).
Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org> Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org>
* glib.h: G_BREAKPOINT for alpha from Robert Wilhelm * glib.h: G_BREAKPOINT for alpha from Robert Wilhelm

View File

@ -1,3 +1,14 @@
Sat Oct 31 05:08:26 1998 Tim Janik <timj@gtk.org>
* glib.h: removed old G_ENUM(), G_FLAGS(), G_NV() and G_SV() macros.
added macros G_STRUCT_OFFSET(), G_STRUCT_MEMBER_P() and
G_STRUCT_MEMBER() for handling structure fields through their offsets.
(struct _GHookList): added a hook_free function member, that can be used
to free additional fields in derived hook structures.
g_hook_free(): if hook_list->hook_free != NULL, call this function prior
to freeing the hook. (this functionality should have been there in the
first place, it just got forgotten as an implementation detail).
Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org> Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org>
* glib.h: G_BREAKPOINT for alpha from Robert Wilhelm * glib.h: G_BREAKPOINT for alpha from Robert Wilhelm

View File

@ -1,3 +1,14 @@
Sat Oct 31 05:08:26 1998 Tim Janik <timj@gtk.org>
* glib.h: removed old G_ENUM(), G_FLAGS(), G_NV() and G_SV() macros.
added macros G_STRUCT_OFFSET(), G_STRUCT_MEMBER_P() and
G_STRUCT_MEMBER() for handling structure fields through their offsets.
(struct _GHookList): added a hook_free function member, that can be used
to free additional fields in derived hook structures.
g_hook_free(): if hook_list->hook_free != NULL, call this function prior
to freeing the hook. (this functionality should have been there in the
first place, it just got forgotten as an implementation detail).
Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org> Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org>
* glib.h: G_BREAKPOINT for alpha from Robert Wilhelm * glib.h: G_BREAKPOINT for alpha from Robert Wilhelm

View File

@ -1,3 +1,14 @@
Sat Oct 31 05:08:26 1998 Tim Janik <timj@gtk.org>
* glib.h: removed old G_ENUM(), G_FLAGS(), G_NV() and G_SV() macros.
added macros G_STRUCT_OFFSET(), G_STRUCT_MEMBER_P() and
G_STRUCT_MEMBER() for handling structure fields through their offsets.
(struct _GHookList): added a hook_free function member, that can be used
to free additional fields in derived hook structures.
g_hook_free(): if hook_list->hook_free != NULL, call this function prior
to freeing the hook. (this functionality should have been there in the
first place, it just got forgotten as an implementation detail).
Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org> Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org>
* glib.h: G_BREAKPOINT for alpha from Robert Wilhelm * glib.h: G_BREAKPOINT for alpha from Robert Wilhelm

View File

@ -42,6 +42,7 @@ g_hook_list_init (GHookList *hook_list,
hook_size, hook_size,
hook_size * G_HOOKS_PREALLOC, hook_size * G_HOOKS_PREALLOC,
G_ALLOC_AND_FREE); G_ALLOC_AND_FREE);
hook_list->hook_free = NULL;
} }
void void
@ -106,6 +107,9 @@ g_hook_free (GHookList *hook_list,
g_return_if_fail (hook != NULL); g_return_if_fail (hook != NULL);
g_return_if_fail (G_HOOK_IS_UNLINKED (hook)); g_return_if_fail (G_HOOK_IS_UNLINKED (hook));
if (hook_list->hook_free)
hook_list->hook_free (hook_list, hook);
g_chunk_free (hook, hook_list->hook_memchunk); g_chunk_free (hook, hook_list->hook_memchunk);
} }
@ -176,7 +180,7 @@ g_hook_unref (GHookList *hook_list,
} }
hook->prev = NULL; hook->prev = NULL;
g_chunk_free (hook, hook_list->hook_memchunk); g_hook_free (hook_list, hook);
if (!hook_list->hooks && if (!hook_list->hooks &&
!hook_list->is_setup) !hook_list->is_setup)

24
glib.h
View File

@ -181,20 +181,15 @@ extern "C" {
#endif /* !G_VA_COPY */ #endif /* !G_VA_COPY */
/* Provide simple enum value macro wrappers that ease automated /* Provide convenience macros for handling structure
* enum value stringification code. [abandoned] * fields through their offsets.
*/ */
#if !defined (G_CODE_GENERATION) #define G_STRUCT_OFFSET(struct_type, member) \
#define G_ENUM( EnumerationName ) EnumerationName ((gulong) ((gchar*) &((struct_type*) 0)->member))
#define G_FLAGS( EnumerationName ) EnumerationName #define G_STRUCT_MEMBER_P(struct_p, struct_offset) \
#define G_NV( VALUE_NAME , value_nick, VALUE) VALUE_NAME = (VALUE) ((gpointer) ((gchar*) (struct_p) + (gulong) (struct_offset)))
#define G_SV( VALUE_NAME, value_nick ) VALUE_NAME #define G_STRUCT_MEMBER(member_type, struct_p, struct_offset) \
#else /* G_CODE_GENERATION */ (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
#define G_ENUM( EnumerationName ) G_ENUM_E + EnumerationName +
#define G_FLAGS( EnumerationName ) G_ENUM_F + EnumerationName +
#define G_NV( VALUE_NAME , value_nick, VALUE) G_ENUM_V + VALUE_NAME + value_nick +
#define G_SV( VALUE_NAME, value_nick ) G_ENUM_V + VALUE_NAME + value_nick +
#endif /* G_CODE_GENERATION */
/* inlining hassle. for compilers that don't allow the `inline' keyword, /* inlining hassle. for compilers that don't allow the `inline' keyword,
@ -936,6 +931,8 @@ typedef void (*GHookMarshaller) (GHook *hook,
gpointer data); gpointer data);
typedef void (*GHookFunc) (gpointer data); typedef void (*GHookFunc) (gpointer data);
typedef gboolean (*GHookCheckFunc) (gpointer data); typedef gboolean (*GHookCheckFunc) (gpointer data);
typedef void (*GHookFreeFunc) (GHookList *hook_list,
GHook *hook);
typedef void (*GLogFunc) (const gchar *log_domain, typedef void (*GLogFunc) (const gchar *log_domain,
GLogLevelFlags log_level, GLogLevelFlags log_level,
const gchar *message, const gchar *message,
@ -1286,6 +1283,7 @@ struct _GHookList
guint is_setup : 1; guint is_setup : 1;
GHook *hooks; GHook *hooks;
GMemChunk *hook_memchunk; GMemChunk *hook_memchunk;
GHookFreeFunc hook_free; /* virtual function */
}; };
struct _GHook struct _GHook

View File

@ -42,6 +42,7 @@ g_hook_list_init (GHookList *hook_list,
hook_size, hook_size,
hook_size * G_HOOKS_PREALLOC, hook_size * G_HOOKS_PREALLOC,
G_ALLOC_AND_FREE); G_ALLOC_AND_FREE);
hook_list->hook_free = NULL;
} }
void void
@ -106,6 +107,9 @@ g_hook_free (GHookList *hook_list,
g_return_if_fail (hook != NULL); g_return_if_fail (hook != NULL);
g_return_if_fail (G_HOOK_IS_UNLINKED (hook)); g_return_if_fail (G_HOOK_IS_UNLINKED (hook));
if (hook_list->hook_free)
hook_list->hook_free (hook_list, hook);
g_chunk_free (hook, hook_list->hook_memchunk); g_chunk_free (hook, hook_list->hook_memchunk);
} }
@ -176,7 +180,7 @@ g_hook_unref (GHookList *hook_list,
} }
hook->prev = NULL; hook->prev = NULL;
g_chunk_free (hook, hook_list->hook_memchunk); g_hook_free (hook_list, hook);
if (!hook_list->hooks && if (!hook_list->hooks &&
!hook_list->is_setup) !hook_list->is_setup)

View File

@ -181,20 +181,15 @@ extern "C" {
#endif /* !G_VA_COPY */ #endif /* !G_VA_COPY */
/* Provide simple enum value macro wrappers that ease automated /* Provide convenience macros for handling structure
* enum value stringification code. [abandoned] * fields through their offsets.
*/ */
#if !defined (G_CODE_GENERATION) #define G_STRUCT_OFFSET(struct_type, member) \
#define G_ENUM( EnumerationName ) EnumerationName ((gulong) ((gchar*) &((struct_type*) 0)->member))
#define G_FLAGS( EnumerationName ) EnumerationName #define G_STRUCT_MEMBER_P(struct_p, struct_offset) \
#define G_NV( VALUE_NAME , value_nick, VALUE) VALUE_NAME = (VALUE) ((gpointer) ((gchar*) (struct_p) + (gulong) (struct_offset)))
#define G_SV( VALUE_NAME, value_nick ) VALUE_NAME #define G_STRUCT_MEMBER(member_type, struct_p, struct_offset) \
#else /* G_CODE_GENERATION */ (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
#define G_ENUM( EnumerationName ) G_ENUM_E + EnumerationName +
#define G_FLAGS( EnumerationName ) G_ENUM_F + EnumerationName +
#define G_NV( VALUE_NAME , value_nick, VALUE) G_ENUM_V + VALUE_NAME + value_nick +
#define G_SV( VALUE_NAME, value_nick ) G_ENUM_V + VALUE_NAME + value_nick +
#endif /* G_CODE_GENERATION */
/* inlining hassle. for compilers that don't allow the `inline' keyword, /* inlining hassle. for compilers that don't allow the `inline' keyword,
@ -936,6 +931,8 @@ typedef void (*GHookMarshaller) (GHook *hook,
gpointer data); gpointer data);
typedef void (*GHookFunc) (gpointer data); typedef void (*GHookFunc) (gpointer data);
typedef gboolean (*GHookCheckFunc) (gpointer data); typedef gboolean (*GHookCheckFunc) (gpointer data);
typedef void (*GHookFreeFunc) (GHookList *hook_list,
GHook *hook);
typedef void (*GLogFunc) (const gchar *log_domain, typedef void (*GLogFunc) (const gchar *log_domain,
GLogLevelFlags log_level, GLogLevelFlags log_level,
const gchar *message, const gchar *message,
@ -1286,6 +1283,7 @@ struct _GHookList
guint is_setup : 1; guint is_setup : 1;
GHook *hooks; GHook *hooks;
GMemChunk *hook_memchunk; GMemChunk *hook_memchunk;
GHookFreeFunc hook_free; /* virtual function */
}; };
struct _GHook struct _GHook