gdataset.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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_DATASET_H__
  26. #define __G_DATASET_H__
  27. #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
  28. #error "Only <glib.h> can be included directly."
  29. #endif
  30. #include <glib/gquark.h>
  31. G_BEGIN_DECLS
  32. typedef struct _GData GData;
  33. typedef void (*GDataForeachFunc) (GQuark key_id,
  34. gpointer data,
  35. gpointer user_data);
  36. /* Keyed Data List
  37. */
  38. GLIB_AVAILABLE_IN_ALL
  39. void g_datalist_init (GData **datalist);
  40. GLIB_AVAILABLE_IN_ALL
  41. void g_datalist_clear (GData **datalist);
  42. GLIB_AVAILABLE_IN_ALL
  43. gpointer g_datalist_id_get_data (GData **datalist,
  44. GQuark key_id);
  45. GLIB_AVAILABLE_IN_ALL
  46. void g_datalist_id_set_data_full (GData **datalist,
  47. GQuark key_id,
  48. gpointer data,
  49. GDestroyNotify destroy_func);
  50. GLIB_AVAILABLE_IN_2_74
  51. void g_datalist_id_remove_multiple (GData **datalist,
  52. GQuark *keys,
  53. gsize n_keys);
  54. typedef gpointer (*GDuplicateFunc) (gpointer data, gpointer user_data);
  55. GLIB_AVAILABLE_IN_2_34
  56. gpointer g_datalist_id_dup_data (GData **datalist,
  57. GQuark key_id,
  58. GDuplicateFunc dup_func,
  59. gpointer user_data);
  60. GLIB_AVAILABLE_IN_2_34
  61. gboolean g_datalist_id_replace_data (GData **datalist,
  62. GQuark key_id,
  63. gpointer oldval,
  64. gpointer newval,
  65. GDestroyNotify destroy,
  66. GDestroyNotify *old_destroy);
  67. GLIB_AVAILABLE_IN_ALL
  68. gpointer g_datalist_id_remove_no_notify (GData **datalist,
  69. GQuark key_id);
  70. GLIB_AVAILABLE_IN_ALL
  71. void g_datalist_foreach (GData **datalist,
  72. GDataForeachFunc func,
  73. gpointer user_data);
  74. /**
  75. * G_DATALIST_FLAGS_MASK:
  76. *
  77. * A bitmask that restricts the possible flags passed to
  78. * g_datalist_set_flags(). Passing a flags value where
  79. * flags & ~G_DATALIST_FLAGS_MASK != 0 is an error.
  80. */
  81. #define G_DATALIST_FLAGS_MASK 0x3
  82. GLIB_AVAILABLE_IN_ALL
  83. void g_datalist_set_flags (GData **datalist,
  84. guint flags);
  85. GLIB_AVAILABLE_IN_ALL
  86. void g_datalist_unset_flags (GData **datalist,
  87. guint flags);
  88. GLIB_AVAILABLE_IN_ALL
  89. guint g_datalist_get_flags (GData **datalist);
  90. #define g_datalist_id_set_data(dl, q, d) \
  91. g_datalist_id_set_data_full ((dl), (q), (d), NULL)
  92. #define g_datalist_id_remove_data(dl, q) \
  93. g_datalist_id_set_data ((dl), (q), NULL)
  94. #define g_datalist_set_data_full(dl, k, d, f) \
  95. g_datalist_id_set_data_full ((dl), g_quark_from_string (k), (d), (f))
  96. #define g_datalist_remove_no_notify(dl, k) \
  97. g_datalist_id_remove_no_notify ((dl), g_quark_try_string (k))
  98. #define g_datalist_set_data(dl, k, d) \
  99. g_datalist_set_data_full ((dl), (k), (d), NULL)
  100. #define g_datalist_remove_data(dl, k) \
  101. g_datalist_id_set_data ((dl), g_quark_try_string (k), NULL)
  102. /* Location Associated Keyed Data
  103. */
  104. GLIB_AVAILABLE_IN_ALL
  105. void g_dataset_destroy (gconstpointer dataset_location);
  106. GLIB_AVAILABLE_IN_ALL
  107. gpointer g_dataset_id_get_data (gconstpointer dataset_location,
  108. GQuark key_id);
  109. GLIB_AVAILABLE_IN_ALL
  110. gpointer g_datalist_get_data (GData **datalist,
  111. const gchar *key);
  112. GLIB_AVAILABLE_IN_ALL
  113. void g_dataset_id_set_data_full (gconstpointer dataset_location,
  114. GQuark key_id,
  115. gpointer data,
  116. GDestroyNotify destroy_func);
  117. GLIB_AVAILABLE_IN_ALL
  118. gpointer g_dataset_id_remove_no_notify (gconstpointer dataset_location,
  119. GQuark key_id);
  120. GLIB_AVAILABLE_IN_ALL
  121. void g_dataset_foreach (gconstpointer dataset_location,
  122. GDataForeachFunc func,
  123. gpointer user_data);
  124. #define g_dataset_id_set_data(l, k, d) \
  125. g_dataset_id_set_data_full ((l), (k), (d), NULL)
  126. #define g_dataset_id_remove_data(l, k) \
  127. g_dataset_id_set_data ((l), (k), NULL)
  128. #define g_dataset_get_data(l, k) \
  129. (g_dataset_id_get_data ((l), g_quark_try_string (k)))
  130. #define g_dataset_set_data_full(l, k, d, f) \
  131. g_dataset_id_set_data_full ((l), g_quark_from_string (k), (d), (f))
  132. #define g_dataset_remove_no_notify(l, k) \
  133. g_dataset_id_remove_no_notify ((l), g_quark_try_string (k))
  134. #define g_dataset_set_data(l, k, d) \
  135. g_dataset_set_data_full ((l), (k), (d), NULL)
  136. #define g_dataset_remove_data(l, k) \
  137. g_dataset_id_set_data ((l), g_quark_try_string (k), NULL)
  138. G_END_DECLS
  139. #endif /* __G_DATASET_H__ */