gsequence.h 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /* GLIB - Library of useful routines for C programming
  2. * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
  3. * Soeren Sandmann (sandmann@daimi.au.dk)
  4. *
  5. * SPDX-License-Identifier: LGPL-2.1-or-later
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * This library is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  19. */
  20. #ifndef __G_SEQUENCE_H__
  21. #define __G_SEQUENCE_H__
  22. #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
  23. #error "Only <glib.h> can be included directly."
  24. #endif
  25. #include <glib/gtypes.h>
  26. G_BEGIN_DECLS
  27. typedef struct _GSequence GSequence;
  28. typedef struct _GSequenceNode GSequenceIter;
  29. typedef gint (* GSequenceIterCompareFunc) (GSequenceIter *a,
  30. GSequenceIter *b,
  31. gpointer data);
  32. /* GSequence */
  33. GLIB_AVAILABLE_IN_ALL
  34. GSequence * g_sequence_new (GDestroyNotify data_destroy);
  35. GLIB_AVAILABLE_IN_ALL
  36. void g_sequence_free (GSequence *seq);
  37. GLIB_AVAILABLE_IN_ALL
  38. gint g_sequence_get_length (GSequence *seq);
  39. GLIB_AVAILABLE_IN_ALL
  40. void g_sequence_foreach (GSequence *seq,
  41. GFunc func,
  42. gpointer user_data);
  43. GLIB_AVAILABLE_IN_ALL
  44. void g_sequence_foreach_range (GSequenceIter *begin,
  45. GSequenceIter *end,
  46. GFunc func,
  47. gpointer user_data);
  48. GLIB_AVAILABLE_IN_ALL
  49. void g_sequence_sort (GSequence *seq,
  50. GCompareDataFunc cmp_func,
  51. gpointer cmp_data);
  52. GLIB_AVAILABLE_IN_ALL
  53. void g_sequence_sort_iter (GSequence *seq,
  54. GSequenceIterCompareFunc cmp_func,
  55. gpointer cmp_data);
  56. GLIB_AVAILABLE_IN_2_48
  57. gboolean g_sequence_is_empty (GSequence *seq);
  58. /* Getting iters */
  59. GLIB_AVAILABLE_IN_ALL
  60. GSequenceIter *g_sequence_get_begin_iter (GSequence *seq);
  61. GLIB_AVAILABLE_IN_ALL
  62. GSequenceIter *g_sequence_get_end_iter (GSequence *seq);
  63. GLIB_AVAILABLE_IN_ALL
  64. GSequenceIter *g_sequence_get_iter_at_pos (GSequence *seq,
  65. gint pos);
  66. GLIB_AVAILABLE_IN_ALL
  67. GSequenceIter *g_sequence_append (GSequence *seq,
  68. gpointer data);
  69. GLIB_AVAILABLE_IN_ALL
  70. GSequenceIter *g_sequence_prepend (GSequence *seq,
  71. gpointer data);
  72. GLIB_AVAILABLE_IN_ALL
  73. GSequenceIter *g_sequence_insert_before (GSequenceIter *iter,
  74. gpointer data);
  75. GLIB_AVAILABLE_IN_ALL
  76. void g_sequence_move (GSequenceIter *src,
  77. GSequenceIter *dest);
  78. GLIB_AVAILABLE_IN_ALL
  79. void g_sequence_swap (GSequenceIter *a,
  80. GSequenceIter *b);
  81. GLIB_AVAILABLE_IN_ALL
  82. GSequenceIter *g_sequence_insert_sorted (GSequence *seq,
  83. gpointer data,
  84. GCompareDataFunc cmp_func,
  85. gpointer cmp_data);
  86. GLIB_AVAILABLE_IN_ALL
  87. GSequenceIter *g_sequence_insert_sorted_iter (GSequence *seq,
  88. gpointer data,
  89. GSequenceIterCompareFunc iter_cmp,
  90. gpointer cmp_data);
  91. GLIB_AVAILABLE_IN_ALL
  92. void g_sequence_sort_changed (GSequenceIter *iter,
  93. GCompareDataFunc cmp_func,
  94. gpointer cmp_data);
  95. GLIB_AVAILABLE_IN_ALL
  96. void g_sequence_sort_changed_iter (GSequenceIter *iter,
  97. GSequenceIterCompareFunc iter_cmp,
  98. gpointer cmp_data);
  99. GLIB_AVAILABLE_IN_ALL
  100. void g_sequence_remove (GSequenceIter *iter);
  101. GLIB_AVAILABLE_IN_ALL
  102. void g_sequence_remove_range (GSequenceIter *begin,
  103. GSequenceIter *end);
  104. GLIB_AVAILABLE_IN_ALL
  105. void g_sequence_move_range (GSequenceIter *dest,
  106. GSequenceIter *begin,
  107. GSequenceIter *end);
  108. GLIB_AVAILABLE_IN_ALL
  109. GSequenceIter *g_sequence_search (GSequence *seq,
  110. gpointer data,
  111. GCompareDataFunc cmp_func,
  112. gpointer cmp_data);
  113. GLIB_AVAILABLE_IN_ALL
  114. GSequenceIter *g_sequence_search_iter (GSequence *seq,
  115. gpointer data,
  116. GSequenceIterCompareFunc iter_cmp,
  117. gpointer cmp_data);
  118. GLIB_AVAILABLE_IN_ALL
  119. GSequenceIter *g_sequence_lookup (GSequence *seq,
  120. gpointer data,
  121. GCompareDataFunc cmp_func,
  122. gpointer cmp_data);
  123. GLIB_AVAILABLE_IN_ALL
  124. GSequenceIter *g_sequence_lookup_iter (GSequence *seq,
  125. gpointer data,
  126. GSequenceIterCompareFunc iter_cmp,
  127. gpointer cmp_data);
  128. /* Dereferencing */
  129. GLIB_AVAILABLE_IN_ALL
  130. gpointer g_sequence_get (GSequenceIter *iter);
  131. GLIB_AVAILABLE_IN_ALL
  132. void g_sequence_set (GSequenceIter *iter,
  133. gpointer data);
  134. /* Operations on GSequenceIter * */
  135. GLIB_AVAILABLE_IN_ALL
  136. gboolean g_sequence_iter_is_begin (GSequenceIter *iter);
  137. GLIB_AVAILABLE_IN_ALL
  138. gboolean g_sequence_iter_is_end (GSequenceIter *iter);
  139. GLIB_AVAILABLE_IN_ALL
  140. GSequenceIter *g_sequence_iter_next (GSequenceIter *iter);
  141. GLIB_AVAILABLE_IN_ALL
  142. GSequenceIter *g_sequence_iter_prev (GSequenceIter *iter);
  143. GLIB_AVAILABLE_IN_ALL
  144. gint g_sequence_iter_get_position (GSequenceIter *iter);
  145. GLIB_AVAILABLE_IN_ALL
  146. GSequenceIter *g_sequence_iter_move (GSequenceIter *iter,
  147. gint delta);
  148. GLIB_AVAILABLE_IN_ALL
  149. GSequence * g_sequence_iter_get_sequence (GSequenceIter *iter);
  150. /* Search */
  151. GLIB_AVAILABLE_IN_ALL
  152. gint g_sequence_iter_compare (GSequenceIter *a,
  153. GSequenceIter *b);
  154. GLIB_AVAILABLE_IN_ALL
  155. GSequenceIter *g_sequence_range_get_midpoint (GSequenceIter *begin,
  156. GSequenceIter *end);
  157. G_END_DECLS
  158. #endif /* __G_SEQUENCE_H__ */