gtrashstack.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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, see <http://www.gnu.org/licenses/>.
  16. */
  17. /*
  18. * Modified by the GLib Team and others 1997-2000. See the AUTHORS
  19. * file for a list of people on the GLib Team. See the ChangeLog
  20. * files for a list of changes. These files are distributed with
  21. * GLib at ftp://ftp.gtk.org/pub/gtk/.
  22. */
  23. #ifndef __G_TRASH_STACK_H__
  24. #define __G_TRASH_STACK_H__
  25. #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
  26. #error "Only <glib.h> can be included directly."
  27. #endif
  28. #include <glib/gutils.h>
  29. G_BEGIN_DECLS
  30. typedef struct _GTrashStack GTrashStack;
  31. struct _GTrashStack
  32. {
  33. GTrashStack *next;
  34. };
  35. G_INLINE_FUNC void g_trash_stack_push (GTrashStack **stack_p,
  36. gpointer data_p);
  37. G_INLINE_FUNC gpointer g_trash_stack_pop (GTrashStack **stack_p);
  38. G_INLINE_FUNC gpointer g_trash_stack_peek (GTrashStack **stack_p);
  39. G_INLINE_FUNC guint g_trash_stack_height (GTrashStack **stack_p);
  40. #if defined (G_CAN_INLINE) || defined (__G_TRASH_STACK_C__)
  41. G_INLINE_FUNC void
  42. g_trash_stack_push (GTrashStack **stack_p,
  43. gpointer data_p)
  44. {
  45. GTrashStack *data = (GTrashStack *) data_p;
  46. data->next = *stack_p;
  47. *stack_p = data;
  48. }
  49. G_INLINE_FUNC gpointer
  50. g_trash_stack_pop (GTrashStack **stack_p)
  51. {
  52. GTrashStack *data;
  53. data = *stack_p;
  54. if (data)
  55. {
  56. *stack_p = data->next;
  57. /* NULLify private pointer here, most platforms store NULL as
  58. * subsequent 0 bytes
  59. */
  60. data->next = NULL;
  61. }
  62. return data;
  63. }
  64. G_INLINE_FUNC gpointer
  65. g_trash_stack_peek (GTrashStack **stack_p)
  66. {
  67. GTrashStack *data;
  68. data = *stack_p;
  69. return data;
  70. }
  71. G_INLINE_FUNC guint
  72. g_trash_stack_height (GTrashStack **stack_p)
  73. {
  74. GTrashStack *data;
  75. guint i = 0;
  76. for (data = *stack_p; data; data = data->next)
  77. i++;
  78. return i;
  79. }
  80. #endif /* G_CAN_INLINE || __G_TRASH_STACK_C__ */
  81. G_END_DECLS
  82. #endif /* __G_UTILS_H__ */