mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-22 17:08:53 +02:00
New stack ADT implementation.
Fri Jan 22 02:06:10 EST 1999 Jeff Garzik <jgarzik@pobox.com> * gstack.c: New stack ADT implementation. * glib.h: Add g_stack function prototypes and macros.
This commit is contained in:
committed by
Jeff Garzik
parent
2ae91cff96
commit
ee3d2a3d4d
@@ -1,3 +1,11 @@
|
||||
Fri Jan 22 02:06:10 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* gstack.c:
|
||||
New stack ADT implementation.
|
||||
|
||||
* glib.h:
|
||||
Add g_stack function prototypes and macros.
|
||||
|
||||
Thu Jan 21 23:55:54 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* TODO:
|
||||
|
@@ -1,3 +1,11 @@
|
||||
Fri Jan 22 02:06:10 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* gstack.c:
|
||||
New stack ADT implementation.
|
||||
|
||||
* glib.h:
|
||||
Add g_stack function prototypes and macros.
|
||||
|
||||
Thu Jan 21 23:55:54 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* TODO:
|
||||
|
@@ -1,3 +1,11 @@
|
||||
Fri Jan 22 02:06:10 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* gstack.c:
|
||||
New stack ADT implementation.
|
||||
|
||||
* glib.h:
|
||||
Add g_stack function prototypes and macros.
|
||||
|
||||
Thu Jan 21 23:55:54 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* TODO:
|
||||
|
@@ -1,3 +1,11 @@
|
||||
Fri Jan 22 02:06:10 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* gstack.c:
|
||||
New stack ADT implementation.
|
||||
|
||||
* glib.h:
|
||||
Add g_stack function prototypes and macros.
|
||||
|
||||
Thu Jan 21 23:55:54 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* TODO:
|
||||
|
@@ -1,3 +1,11 @@
|
||||
Fri Jan 22 02:06:10 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* gstack.c:
|
||||
New stack ADT implementation.
|
||||
|
||||
* glib.h:
|
||||
Add g_stack function prototypes and macros.
|
||||
|
||||
Thu Jan 21 23:55:54 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* TODO:
|
||||
|
@@ -1,3 +1,11 @@
|
||||
Fri Jan 22 02:06:10 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* gstack.c:
|
||||
New stack ADT implementation.
|
||||
|
||||
* glib.h:
|
||||
Add g_stack function prototypes and macros.
|
||||
|
||||
Thu Jan 21 23:55:54 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* TODO:
|
||||
|
@@ -1,3 +1,11 @@
|
||||
Fri Jan 22 02:06:10 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* gstack.c:
|
||||
New stack ADT implementation.
|
||||
|
||||
* glib.h:
|
||||
Add g_stack function prototypes and macros.
|
||||
|
||||
Thu Jan 21 23:55:54 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* TODO:
|
||||
|
@@ -1,3 +1,11 @@
|
||||
Fri Jan 22 02:06:10 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* gstack.c:
|
||||
New stack ADT implementation.
|
||||
|
||||
* glib.h:
|
||||
Add g_stack function prototypes and macros.
|
||||
|
||||
Thu Jan 21 23:55:54 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* TODO:
|
||||
|
2
TODO
2
TODO
@@ -28,8 +28,6 @@ Ideas for GLib 1.3:
|
||||
* 'make check' tests one per module, plus bug report regression tests
|
||||
and such
|
||||
|
||||
* new func g_list_delete, combines g_list_remove_link and g_list_free1
|
||||
|
||||
* primitive memory leak checking by g_malloc, g_free
|
||||
|
||||
* alloca-based convenience macros, counterparts to:
|
||||
|
34
glib.h
34
glib.h
@@ -681,6 +681,7 @@ typedef struct _GRelation GRelation;
|
||||
typedef struct _GScanner GScanner;
|
||||
typedef struct _GScannerConfig GScannerConfig;
|
||||
typedef struct _GSList GSList;
|
||||
typedef struct _GStack GStack;
|
||||
typedef struct _GString GString;
|
||||
typedef struct _GStringChunk GStringChunk;
|
||||
typedef struct _GTimer GTimer;
|
||||
@@ -797,6 +798,11 @@ struct _GSList
|
||||
GSList *next;
|
||||
};
|
||||
|
||||
struct _GStack
|
||||
{
|
||||
GList *list;
|
||||
};
|
||||
|
||||
struct _GString
|
||||
{
|
||||
gchar *str;
|
||||
@@ -933,6 +939,34 @@ gpointer g_slist_nth_data (GSList *list,
|
||||
#define g_slist_next(slist) ((slist) ? (((GSList *)(slist))->next) : NULL)
|
||||
|
||||
|
||||
/* Stacks
|
||||
*/
|
||||
GStack * g_stack_new (void);
|
||||
#ifndef G_STACK_MACROIZE
|
||||
void g_stack_free (GStack *stack);
|
||||
void g_stack_push (GStack *stack, gpointer data);
|
||||
#endif
|
||||
gpointer g_stack_pop (GStack *stack);
|
||||
|
||||
#if G_STACK_MACROIZE
|
||||
#define g_stack_free(stack) G_STMT_START { \
|
||||
if ((GStack *)(stack)) { \
|
||||
if ((GStack *)(stack)->list) \
|
||||
g_list_free ((GStack *)(stack)->list); \
|
||||
g_free (stack); \
|
||||
} \
|
||||
} G_STMT_END
|
||||
|
||||
#define g_stack_push(stack) G_STMT_START { \
|
||||
if ((GStack *)(stack)) \
|
||||
(GStack *)(stack)->list = \
|
||||
g_list_prepend ((GStack *)(stack)->list, data); \
|
||||
} G_STMT_END
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Hash tables
|
||||
*/
|
||||
GHashTable* g_hash_table_new (GHashFunc hash_func,
|
||||
|
34
glib/glib.h
34
glib/glib.h
@@ -681,6 +681,7 @@ typedef struct _GRelation GRelation;
|
||||
typedef struct _GScanner GScanner;
|
||||
typedef struct _GScannerConfig GScannerConfig;
|
||||
typedef struct _GSList GSList;
|
||||
typedef struct _GStack GStack;
|
||||
typedef struct _GString GString;
|
||||
typedef struct _GStringChunk GStringChunk;
|
||||
typedef struct _GTimer GTimer;
|
||||
@@ -797,6 +798,11 @@ struct _GSList
|
||||
GSList *next;
|
||||
};
|
||||
|
||||
struct _GStack
|
||||
{
|
||||
GList *list;
|
||||
};
|
||||
|
||||
struct _GString
|
||||
{
|
||||
gchar *str;
|
||||
@@ -933,6 +939,34 @@ gpointer g_slist_nth_data (GSList *list,
|
||||
#define g_slist_next(slist) ((slist) ? (((GSList *)(slist))->next) : NULL)
|
||||
|
||||
|
||||
/* Stacks
|
||||
*/
|
||||
GStack * g_stack_new (void);
|
||||
#ifndef G_STACK_MACROIZE
|
||||
void g_stack_free (GStack *stack);
|
||||
void g_stack_push (GStack *stack, gpointer data);
|
||||
#endif
|
||||
gpointer g_stack_pop (GStack *stack);
|
||||
|
||||
#if G_STACK_MACROIZE
|
||||
#define g_stack_free(stack) G_STMT_START { \
|
||||
if ((GStack *)(stack)) { \
|
||||
if ((GStack *)(stack)->list) \
|
||||
g_list_free ((GStack *)(stack)->list); \
|
||||
g_free (stack); \
|
||||
} \
|
||||
} G_STMT_END
|
||||
|
||||
#define g_stack_push(stack) G_STMT_START { \
|
||||
if ((GStack *)(stack)) \
|
||||
(GStack *)(stack)->list = \
|
||||
g_list_prepend ((GStack *)(stack)->list, data); \
|
||||
} G_STMT_END
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Hash tables
|
||||
*/
|
||||
GHashTable* g_hash_table_new (GHashFunc hash_func,
|
||||
|
77
gstack.c
Normal file
77
gstack.c
Normal file
@@ -0,0 +1,77 @@
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
#include <glib.h>
|
||||
|
||||
/*
|
||||
* GStack, opaque ADT with interface:
|
||||
|
||||
stack = g_stack_new ();
|
||||
count = g_stack_size (stack);
|
||||
|
||||
g_stack_push (stack, data);
|
||||
data = g_stack_pop (stack);
|
||||
|
||||
slist = g_stack_get_list (stack);
|
||||
*/
|
||||
|
||||
GStack *
|
||||
g_stack_new (void)
|
||||
{
|
||||
GStack *s;
|
||||
|
||||
s = g_new (GStack, 1);
|
||||
if (!s)
|
||||
return NULL;
|
||||
|
||||
s->list = NULL;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
#ifndef G_STACK_MACROIZE
|
||||
|
||||
|
||||
void
|
||||
g_stack_free (GStack *stack)
|
||||
{
|
||||
if (stack) {
|
||||
if (stack->list)
|
||||
g_list_free (stack->list);
|
||||
|
||||
g_free (stack);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
g_stack_push (GStack *stack, gpointer data)
|
||||
{
|
||||
if (stack)
|
||||
stack->list = g_list_prepend (stack->list, data);
|
||||
}
|
||||
|
||||
#endif /* G_STACK_MACROIZE */
|
||||
|
||||
|
||||
gpointer
|
||||
g_stack_pop (GStack *stack)
|
||||
{
|
||||
gpointer data = NULL;
|
||||
|
||||
if ((stack) && (stack->list)) {
|
||||
GList *node = stack->list;
|
||||
|
||||
stack->list = stack->list->next;
|
||||
|
||||
data = node->data;
|
||||
|
||||
g_list_free_1 (node);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user