• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /* GLIB - Library of useful routines for C programming
2   * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
3   *
4   * This library is free software; you can redistribute it and/or
5   * modify it under the terms of the GNU Lesser General Public
6   * License as published by the Free Software Foundation; either
7   * version 2 of the License, or (at your option) any later version.
8   *
9   * This library is distributed in the hope that it will be useful,
10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
12   * Lesser General Public License for more details.
13   *
14   * You should have received a copy of the GNU Lesser General Public
15   * License along with this library; if not, write to the
16   * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17   * Boston, MA 02111-1307, USA.
18   */
19  
20  /*
21   * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
22   * file for a list of people on the GLib Team.  See the ChangeLog
23   * files for a list of changes.  These files are distributed with
24   * GLib at ftp://ftp.gtk.org/pub/gtk/.
25   */
26  
27  #if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
28  #error "Only <glib.h> can be included directly."
29  #endif
30  
31  #ifndef __G_QUEUE_H__
32  #define __G_QUEUE_H__
33  
34  #include <glib/glist.h>
35  
36  G_BEGIN_DECLS
37  
38  typedef struct _GQueue		GQueue;
39  
40  struct _GQueue
41  {
42    GList *head;
43    GList *tail;
44    guint  length;
45  };
46  
47  #define G_QUEUE_INIT { NULL, NULL, 0 }
48  
49  /* Queues
50   */
51  GQueue*  g_queue_new            (void);
52  void     g_queue_free           (GQueue           *queue);
53  void     g_queue_init           (GQueue           *queue);
54  void     g_queue_clear          (GQueue           *queue);
55  gboolean g_queue_is_empty       (GQueue           *queue);
56  guint    g_queue_get_length     (GQueue           *queue);
57  void     g_queue_reverse        (GQueue           *queue);
58  GQueue * g_queue_copy           (GQueue           *queue);
59  void     g_queue_foreach        (GQueue           *queue,
60  				 GFunc             func,
61  				 gpointer          user_data);
62  GList *  g_queue_find           (GQueue           *queue,
63  				 gconstpointer     data);
64  GList *  g_queue_find_custom    (GQueue           *queue,
65  				 gconstpointer     data,
66  				 GCompareFunc      func);
67  void     g_queue_sort           (GQueue           *queue,
68  				 GCompareDataFunc  compare_func,
69  				 gpointer          user_data);
70  
71  void     g_queue_push_head      (GQueue           *queue,
72  				 gpointer          data);
73  void     g_queue_push_tail      (GQueue           *queue,
74  				 gpointer          data);
75  void     g_queue_push_nth       (GQueue           *queue,
76  				 gpointer          data,
77  				 gint              n);
78  gpointer g_queue_pop_head       (GQueue           *queue);
79  gpointer g_queue_pop_tail       (GQueue           *queue);
80  gpointer g_queue_pop_nth        (GQueue           *queue,
81  				 guint             n);
82  gpointer g_queue_peek_head      (GQueue           *queue);
83  gpointer g_queue_peek_tail      (GQueue           *queue);
84  gpointer g_queue_peek_nth       (GQueue           *queue,
85  				 guint             n);
86  gint     g_queue_index          (GQueue           *queue,
87  				 gconstpointer     data);
88  void     g_queue_remove         (GQueue           *queue,
89  				 gconstpointer     data);
90  void     g_queue_remove_all     (GQueue           *queue,
91  				 gconstpointer     data);
92  void     g_queue_insert_before  (GQueue           *queue,
93  				 GList            *sibling,
94  				 gpointer          data);
95  void     g_queue_insert_after   (GQueue           *queue,
96  				 GList            *sibling,
97  				 gpointer          data);
98  void     g_queue_insert_sorted  (GQueue           *queue,
99  				 gpointer          data,
100  				 GCompareDataFunc  func,
101  				 gpointer          user_data);
102  
103  void     g_queue_push_head_link (GQueue           *queue,
104  				 GList            *link_);
105  void     g_queue_push_tail_link (GQueue           *queue,
106  				 GList            *link_);
107  void     g_queue_push_nth_link  (GQueue           *queue,
108  				 gint              n,
109  				 GList            *link_);
110  GList*   g_queue_pop_head_link  (GQueue           *queue);
111  GList*   g_queue_pop_tail_link  (GQueue           *queue);
112  GList*   g_queue_pop_nth_link   (GQueue           *queue,
113  				 guint             n);
114  GList*   g_queue_peek_head_link (GQueue           *queue);
115  GList*   g_queue_peek_tail_link (GQueue           *queue);
116  GList*   g_queue_peek_nth_link  (GQueue           *queue,
117  				 guint             n);
118  gint     g_queue_link_index     (GQueue           *queue,
119  				 GList            *link_);
120  void     g_queue_unlink         (GQueue           *queue,
121  				 GList            *link_);
122  void     g_queue_delete_link    (GQueue           *queue,
123  				 GList            *link_);
124  
125  G_END_DECLS
126  
127  #endif /* __G_QUEUE_H__ */
128