Added stack, queue ADTs and related tests.

Tue Mar  9 14:37:32 1999  Jeff Garzik  <jgarzik@pobox.com>

        * Makefile.am, glib.h, gstack.c, gqueue.c,
          tests/Makefile.am, tests/queue-test.c, tests/stack-test.c:
        Added stack, queue ADTs and related tests.

        * glib.h, glist.c:
        New g_list_delete() function.
This commit is contained in:
Jeff Garzik
1999-03-09 19:41:19 +00:00
committed by Jeff Garzik
parent 0ecd369530
commit fd7ba69e32
21 changed files with 751 additions and 10 deletions

76
glib.h
View File

@@ -685,10 +685,12 @@ typedef struct _GList GList;
typedef struct _GMemChunk GMemChunk;
typedef struct _GNode GNode;
typedef struct _GPtrArray GPtrArray;
typedef struct _GQueue GQueue;
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;
@@ -805,6 +807,18 @@ struct _GSList
GSList *next;
};
struct _GStack
{
GList *list;
};
struct _GQueue
{
GList *list;
GList *list_end;
guint list_size;
};
struct _GString
{
gchar *str;
@@ -860,6 +874,8 @@ GList* g_list_insert_sorted (GList *list,
GCompareFunc func);
GList* g_list_concat (GList *list1,
GList *list2);
GList* g_list_delete (GList *list,
GList *link);
GList* g_list_remove (GList *list,
gpointer data);
GList* g_list_remove_link (GList *list,
@@ -939,6 +955,66 @@ gpointer g_slist_nth_data (GSList *list,
#define g_slist_next(slist) ((slist) ? (((GSList *)(slist))->next) : NULL)
/* Stacks
*/
GStack * g_stack_new (void);
void g_stack_free (GStack *stack);
gpointer g_stack_pop (GStack *stack);
#define g_stack_empty(stack) \
((((GStack *)(stack)) && ((GStack *)(stack))->list) ? FALSE : TRUE)
#define g_stack_peek(stack) \
((((GStack *)(stack)) && ((GStack *)(stack))->list) ? \
((GStack *)(stack))->list->data : NULL)
#define g_stack_index(stack,ptr) \
((((GStack *)(stack)) && ((GStack *)(stack))->list) ? \
g_list_index (((GStack *)(stack))->list, (ptr)) : -1)
#define g_stack_push(stack,data) G_STMT_START { \
if ((GStack *)(stack)) \
((GStack *)(stack))->list = \
g_list_prepend (((GStack *)(stack))->list, (data)); \
} G_STMT_END
/* Queues
*/
GQueue * g_queue_new (void);
void g_queue_free (GQueue *q);
guint g_queue_get_size (GQueue *q);
void g_queue_push_front (GQueue *q, gpointer data);
void g_queue_push_back (GQueue *q, gpointer data);
gpointer g_queue_pop_front (GQueue *q);
gpointer g_queue_pop_back (GQueue *q);
#define g_queue_empty(queue) \
((((GQueue *)(queue)) && ((GQueue *)(queue))->list) ? FALSE : TRUE)
#define g_queue_peek_front(queue) \
((((GQueue *)(queue)) && ((GQueue *)(queue))->list) ? \
((GQueue *)(queue))->list->data : NULL)
#define g_queue_peek_back(queue) \
((((GQueue *)(queue)) && ((GQueue *)(queue))->list_end) ? \
((GQueue *)(queue))->list_end->data : NULL)
#define g_queue_index(queue,ptr) \
((((GQueue *)(queue)) && ((GQueue *)(queue))->list) ? \
g_list_index (((GQueue *)(queue))->list, (ptr)) : -1)
#define g_queue_push g_queue_push_back
#define g_queue_pop g_queue_pop_front
#define g_queue_peek g_queue_peek_front
/* Hash tables
*/
GHashTable* g_hash_table_new (GHashFunc hash_func,