Re: Upcoming GLib changes
- From: Tim Janik <timj gtk org>
- To: Scott Wimer <scottw cgibuilder com>
- cc: Gtk+ Developers <gtk-devel-list redhat com>
- Subject: Re: Upcoming GLib changes
- Date: Fri, 2 Jul 1999 12:48:20 +0200 (CEST)
On Sat, 3 Jul 1999, Scott Wimer wrote:
> Tim,
>
> Basically, I want an array/list where I can work off of either
> end with equal ease.
>
> I've only rarely needed a queue. I've on many occasions wanted
> to work of both ends of a list.
ok, imagine something like:
typedef struct _GQueue GQueue;
struct _GQueue
{
GList *head;
GList *tail;
};
GQueue* g_queue_create (void);
void g_queue_free (GQueue *queue);
void g_queue_push_head (GQueue *queue,
gpointer data);
void g_queue_push_tail (GQueue *queue,
gpointer data);
gpointer g_queue_pop_head (GQueue *queue);
gpointer g_queue_pop_tail (GQueue *queue);
guint g_queue_length (GQueue *queue);
gboolean g_queue_is_empty (GQueue *queue);
/* and maybe */
gpointer g_queue_peek_head (GQueue *queue);
gpointer g_queue_peek_tail (GQueue *queue);
/* and maybe for interoparability */
void g_queue_push_head_link (GQueue *queue,
GList *link);
void g_queue_push_tail_link (GQueue *queue,
GList *link);
GList* g_queue_pop_head_link (GQueue *queue);
GList* g_queue_pop_tail_link (GQueue *queue);
that would be everything you could need, right?
i.e. normal stack (LIFO) behaviour:
g_queue_push_head (q, data);
data = g_queue_pop_head (q);
or even
g_queue_push_tail (q, data);
data = g_queue_pop_tail (q);
and "double ended" stack (FIFO) behaviour:
g_queue_push_head (q, data);
data = g_queue_pop_tail (q);
or
g_queue_push_tail (q, data);
data = g_queue_pop_head (q);
it just happens that we refer to these double ended stacks as "Queues".
it doesn't really matter how you call it, the implementation is the same:
FIFO lists = queues = doubly linked list + tail cache = double ended stack.
>
> Just my 2 cents,
> scottwimer
>
just my, erm - 10 Pfennig? ;)
---
ciaoTJ
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]