gtree.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. * Modified by the GLib Team and others 1997-2000. See the AUTHORS
  21. * file for a list of people on the GLib Team. See the ChangeLog
  22. * files for a list of changes. These files are distributed with
  23. * GLib at ftp://ftp.gtk.org/pub/gtk/.
  24. */
  25. #ifndef __G_TREE_H__
  26. #define __G_TREE_H__
  27. #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
  28. #error "Only <glib.h> can be included directly."
  29. #endif
  30. #include <glib/gnode.h>
  31. G_BEGIN_DECLS
  32. #undef G_TREE_DEBUG
  33. typedef struct _GTree GTree;
  34. /**
  35. * GTreeNode:
  36. *
  37. * An opaque type which identifies a specific node in a #GTree.
  38. *
  39. * Since: 2.68
  40. */
  41. typedef struct _GTreeNode GTreeNode;
  42. typedef gboolean (*GTraverseFunc) (gpointer key,
  43. gpointer value,
  44. gpointer data);
  45. /**
  46. * GTraverseNodeFunc:
  47. * @node: a #GTreeNode
  48. * @data: user data passed to g_tree_foreach_node()
  49. *
  50. * Specifies the type of function passed to g_tree_foreach_node(). It is
  51. * passed each node, together with the @user_data parameter passed to
  52. * g_tree_foreach_node(). If the function returns %TRUE, the traversal is
  53. * stopped.
  54. *
  55. * Returns: %TRUE to stop the traversal
  56. * Since: 2.68
  57. */
  58. typedef gboolean (*GTraverseNodeFunc) (GTreeNode *node,
  59. gpointer data);
  60. /* Balanced binary trees
  61. */
  62. GLIB_AVAILABLE_IN_ALL
  63. GTree* g_tree_new (GCompareFunc key_compare_func);
  64. GLIB_AVAILABLE_IN_ALL
  65. GTree* g_tree_new_with_data (GCompareDataFunc key_compare_func,
  66. gpointer key_compare_data);
  67. GLIB_AVAILABLE_IN_ALL
  68. GTree* g_tree_new_full (GCompareDataFunc key_compare_func,
  69. gpointer key_compare_data,
  70. GDestroyNotify key_destroy_func,
  71. GDestroyNotify value_destroy_func);
  72. GLIB_AVAILABLE_IN_2_68
  73. GTreeNode *g_tree_node_first (GTree *tree);
  74. GLIB_AVAILABLE_IN_2_68
  75. GTreeNode *g_tree_node_last (GTree *tree);
  76. GLIB_AVAILABLE_IN_2_68
  77. GTreeNode *g_tree_node_previous (GTreeNode *node);
  78. GLIB_AVAILABLE_IN_2_68
  79. GTreeNode *g_tree_node_next (GTreeNode *node);
  80. GLIB_AVAILABLE_IN_ALL
  81. GTree* g_tree_ref (GTree *tree);
  82. GLIB_AVAILABLE_IN_ALL
  83. void g_tree_unref (GTree *tree);
  84. GLIB_AVAILABLE_IN_ALL
  85. void g_tree_destroy (GTree *tree);
  86. GLIB_AVAILABLE_IN_2_68
  87. GTreeNode *g_tree_insert_node (GTree *tree,
  88. gpointer key,
  89. gpointer value);
  90. GLIB_AVAILABLE_IN_ALL
  91. void g_tree_insert (GTree *tree,
  92. gpointer key,
  93. gpointer value);
  94. GLIB_AVAILABLE_IN_2_68
  95. GTreeNode *g_tree_replace_node (GTree *tree,
  96. gpointer key,
  97. gpointer value);
  98. GLIB_AVAILABLE_IN_ALL
  99. void g_tree_replace (GTree *tree,
  100. gpointer key,
  101. gpointer value);
  102. GLIB_AVAILABLE_IN_ALL
  103. gboolean g_tree_remove (GTree *tree,
  104. gconstpointer key);
  105. GLIB_AVAILABLE_IN_2_70
  106. void g_tree_remove_all (GTree *tree);
  107. GLIB_AVAILABLE_IN_ALL
  108. gboolean g_tree_steal (GTree *tree,
  109. gconstpointer key);
  110. GLIB_AVAILABLE_IN_2_68
  111. gpointer g_tree_node_key (GTreeNode *node);
  112. GLIB_AVAILABLE_IN_2_68
  113. gpointer g_tree_node_value (GTreeNode *node);
  114. GLIB_AVAILABLE_IN_2_68
  115. GTreeNode *g_tree_lookup_node (GTree *tree,
  116. gconstpointer key);
  117. GLIB_AVAILABLE_IN_ALL
  118. gpointer g_tree_lookup (GTree *tree,
  119. gconstpointer key);
  120. GLIB_AVAILABLE_IN_ALL
  121. gboolean g_tree_lookup_extended (GTree *tree,
  122. gconstpointer lookup_key,
  123. gpointer *orig_key,
  124. gpointer *value);
  125. GLIB_AVAILABLE_IN_ALL
  126. void g_tree_foreach (GTree *tree,
  127. GTraverseFunc func,
  128. gpointer user_data);
  129. GLIB_AVAILABLE_IN_2_68
  130. void g_tree_foreach_node (GTree *tree,
  131. GTraverseNodeFunc func,
  132. gpointer user_data);
  133. GLIB_DEPRECATED
  134. void g_tree_traverse (GTree *tree,
  135. GTraverseFunc traverse_func,
  136. GTraverseType traverse_type,
  137. gpointer user_data);
  138. GLIB_AVAILABLE_IN_2_68
  139. GTreeNode *g_tree_search_node (GTree *tree,
  140. GCompareFunc search_func,
  141. gconstpointer user_data);
  142. GLIB_AVAILABLE_IN_ALL
  143. gpointer g_tree_search (GTree *tree,
  144. GCompareFunc search_func,
  145. gconstpointer user_data);
  146. GLIB_AVAILABLE_IN_2_68
  147. GTreeNode *g_tree_lower_bound (GTree *tree,
  148. gconstpointer key);
  149. GLIB_AVAILABLE_IN_2_68
  150. GTreeNode *g_tree_upper_bound (GTree *tree,
  151. gconstpointer key);
  152. GLIB_AVAILABLE_IN_ALL
  153. gint g_tree_height (GTree *tree);
  154. GLIB_AVAILABLE_IN_ALL
  155. gint g_tree_nnodes (GTree *tree);
  156. #ifdef G_TREE_DEBUG
  157. /*< private >*/
  158. #ifndef __GTK_DOC_IGNORE__
  159. void g_tree_dump (GTree *tree);
  160. #endif /* !__GTK_DOC_IGNORE__ */
  161. #endif /* G_TREE_DEBUG */
  162. G_END_DECLS
  163. #endif /* __G_TREE_H__ */