(root)/
glib-2.79.0/
glib/
gslist.h
       1  /* GLIB - Library of useful routines for C programming
       2   * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
       3   *
       4   * SPDX-License-Identifier: LGPL-2.1-or-later
       5   *
       6   * This library is free software; you can redistribute it and/or
       7   * modify it under the terms of the GNU Lesser General Public
       8   * License as published by the Free Software Foundation; either
       9   * version 2.1 of the License, or (at your option) any later version.
      10   *
      11   * This library is distributed in the hope that it will be useful,
      12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
      13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
      14   * Lesser General Public License for more details.
      15   *
      16   * You should have received a copy of the GNU Lesser General Public
      17   * License along with this library; if not, see <http://www.gnu.org/licenses/>.
      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  #ifndef __G_SLIST_H__
      28  #define __G_SLIST_H__
      29  
      30  #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
      31  #error "Only <glib.h> can be included directly."
      32  #endif
      33  
      34  #include <glib/gmem.h>
      35  #include <glib/gnode.h>
      36  
      37  G_BEGIN_DECLS
      38  
      39  typedef struct _GSList GSList;
      40  
      41  struct _GSList
      42  {
      43    gpointer data;
      44    GSList *next;
      45  };
      46  
      47  /* Singly linked lists
      48   */
      49  GLIB_AVAILABLE_IN_ALL
      50  GSList*  g_slist_alloc                   (void) G_GNUC_WARN_UNUSED_RESULT;
      51  GLIB_AVAILABLE_IN_ALL
      52  void     g_slist_free                    (GSList           *list);
      53  GLIB_AVAILABLE_IN_ALL
      54  void     g_slist_free_1                  (GSList           *list);
      55  #define	 g_slist_free1		         g_slist_free_1
      56  GLIB_AVAILABLE_IN_ALL
      57  void     g_slist_free_full               (GSList           *list,
      58  					  GDestroyNotify    free_func);
      59  GLIB_AVAILABLE_IN_ALL
      60  GSList*  g_slist_append                  (GSList           *list,
      61  					  gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
      62  GLIB_AVAILABLE_IN_ALL
      63  GSList*  g_slist_prepend                 (GSList           *list,
      64  					  gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
      65  GLIB_AVAILABLE_IN_ALL
      66  GSList*  g_slist_insert                  (GSList           *list,
      67  					  gpointer          data,
      68  					  gint              position) G_GNUC_WARN_UNUSED_RESULT;
      69  GLIB_AVAILABLE_IN_ALL
      70  GSList*  g_slist_insert_sorted           (GSList           *list,
      71  					  gpointer          data,
      72  					  GCompareFunc      func) G_GNUC_WARN_UNUSED_RESULT;
      73  GLIB_AVAILABLE_IN_ALL
      74  GSList*  g_slist_insert_sorted_with_data (GSList           *list,
      75  					  gpointer          data,
      76  					  GCompareDataFunc  func,
      77  					  gpointer          user_data) G_GNUC_WARN_UNUSED_RESULT;
      78  GLIB_AVAILABLE_IN_ALL
      79  GSList*  g_slist_insert_before           (GSList           *slist,
      80  					  GSList           *sibling,
      81  					  gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
      82  GLIB_AVAILABLE_IN_ALL
      83  GSList*  g_slist_concat                  (GSList           *list1,
      84  					  GSList           *list2) G_GNUC_WARN_UNUSED_RESULT;
      85  GLIB_AVAILABLE_IN_ALL
      86  GSList*  g_slist_remove                  (GSList           *list,
      87  					  gconstpointer     data) G_GNUC_WARN_UNUSED_RESULT;
      88  GLIB_AVAILABLE_IN_ALL
      89  GSList*  g_slist_remove_all              (GSList           *list,
      90  					  gconstpointer     data) G_GNUC_WARN_UNUSED_RESULT;
      91  GLIB_AVAILABLE_IN_ALL
      92  GSList*  g_slist_remove_link             (GSList           *list,
      93  					  GSList           *link_) G_GNUC_WARN_UNUSED_RESULT;
      94  GLIB_AVAILABLE_IN_ALL
      95  GSList*  g_slist_delete_link             (GSList           *list,
      96  					  GSList           *link_) G_GNUC_WARN_UNUSED_RESULT;
      97  GLIB_AVAILABLE_IN_ALL
      98  GSList*  g_slist_reverse                 (GSList           *list) G_GNUC_WARN_UNUSED_RESULT;
      99  GLIB_AVAILABLE_IN_ALL
     100  GSList*  g_slist_copy                    (GSList           *list) G_GNUC_WARN_UNUSED_RESULT;
     101  
     102  GLIB_AVAILABLE_IN_2_34
     103  GSList*  g_slist_copy_deep               (GSList            *list,
     104  					  GCopyFunc         func,
     105  					  gpointer          user_data) G_GNUC_WARN_UNUSED_RESULT;
     106  GLIB_AVAILABLE_IN_ALL
     107  GSList*  g_slist_nth                     (GSList           *list,
     108  					  guint             n);
     109  GLIB_AVAILABLE_IN_ALL
     110  GSList*  g_slist_find                    (GSList           *list,
     111  					  gconstpointer     data);
     112  GLIB_AVAILABLE_IN_ALL
     113  GSList*  g_slist_find_custom             (GSList           *list,
     114  					  gconstpointer     data,
     115  					  GCompareFunc      func);
     116  GLIB_AVAILABLE_IN_ALL
     117  gint     g_slist_position                (GSList           *list,
     118  					  GSList           *llink);
     119  GLIB_AVAILABLE_IN_ALL
     120  gint     g_slist_index                   (GSList           *list,
     121  					  gconstpointer     data);
     122  GLIB_AVAILABLE_IN_ALL
     123  GSList*  g_slist_last                    (GSList           *list);
     124  GLIB_AVAILABLE_IN_ALL
     125  guint    g_slist_length                  (GSList           *list);
     126  GLIB_AVAILABLE_IN_ALL
     127  void     g_slist_foreach                 (GSList           *list,
     128  					  GFunc             func,
     129  					  gpointer          user_data);
     130  GLIB_AVAILABLE_IN_ALL
     131  GSList*  g_slist_sort                    (GSList           *list,
     132  					  GCompareFunc      compare_func) G_GNUC_WARN_UNUSED_RESULT;
     133  GLIB_AVAILABLE_IN_ALL
     134  GSList*  g_slist_sort_with_data          (GSList           *list,
     135  					  GCompareDataFunc  compare_func,
     136  					  gpointer          user_data) G_GNUC_WARN_UNUSED_RESULT;
     137  GLIB_AVAILABLE_IN_ALL
     138  gpointer g_slist_nth_data                (GSList           *list,
     139  					  guint             n);
     140  
     141  GLIB_AVAILABLE_IN_2_64
     142  void     g_clear_slist                   (GSList          **slist_ptr,
     143                                            GDestroyNotify    destroy);
     144  
     145  #define  g_clear_slist(slist_ptr, destroy)       \
     146    G_STMT_START {                                 \
     147      GSList *_slist;                              \
     148                                                   \
     149      _slist = *(slist_ptr);                       \
     150      if (_slist)                                  \
     151        {                                          \
     152          *slist_ptr = NULL;                       \
     153                                                   \
     154          if ((destroy) != NULL)                   \
     155            g_slist_free_full (_slist, (destroy)); \
     156          else                                     \
     157            g_slist_free (_slist);                 \
     158        }                                          \
     159    } G_STMT_END                                   \
     160    GLIB_AVAILABLE_MACRO_IN_2_64
     161  
     162  #define  g_slist_next(slist)	         ((slist) ? (((GSList *)(slist))->next) : NULL)
     163  
     164  G_END_DECLS
     165  
     166  #endif /* __G_SLIST_H__ */