ipc_splay.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /*
  2. * Mach Operating System
  3. * Copyright (c) 1991,1990,1989 Carnegie Mellon University
  4. * All Rights Reserved.
  5. *
  6. * Permission to use, copy, modify and distribute this software and its
  7. * documentation is hereby granted, provided that both the copyright
  8. * notice and this permission notice appear in all copies of the
  9. * software, derivative works or modified versions, and any portions
  10. * thereof, and that both notices appear in supporting documentation.
  11. *
  12. * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
  13. * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
  14. * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
  15. *
  16. * Carnegie Mellon requests users of this software to return to
  17. *
  18. * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
  19. * School of Computer Science
  20. * Carnegie Mellon University
  21. * Pittsburgh PA 15213-3890
  22. *
  23. * any improvements or extensions that they make and grant Carnegie Mellon
  24. * the rights to redistribute these changes.
  25. */
  26. /*
  27. */
  28. /*
  29. * File: ipc/ipc_splay.h
  30. * Author: Rich Draves
  31. * Date: 1989
  32. *
  33. * Declarations of primitive splay tree operations.
  34. */
  35. #ifndef _IPC_IPC_SPLAY_H_
  36. #define _IPC_IPC_SPLAY_H_
  37. #include <mach/port.h>
  38. #include <kern/assert.h>
  39. //#include <kern/macro_help.h>
  40. #include <ipc/ipc_entry.h>
  41. typedef struct ipc_splay_tree {
  42. mach_port_t ist_name; /* name used in last lookup */
  43. ipc_tree_entry_t ist_root; /* root of middle tree */
  44. ipc_tree_entry_t ist_ltree; /* root of left tree */
  45. ipc_tree_entry_t *ist_ltreep; /* pointer into left tree */
  46. ipc_tree_entry_t ist_rtree; /* root of right tree */
  47. ipc_tree_entry_t *ist_rtreep; /* pointer into right tree */
  48. } *ipc_splay_tree_t;
  49. #define ist_lock(splay) /* no locking */
  50. #define ist_unlock(splay) /* no locking */
  51. /* Initialize a raw splay tree */
  52. extern void ipc_splay_tree_init(
  53. ipc_splay_tree_t splay);
  54. /* Pick a random entry in a splay tree */
  55. extern boolean_t ipc_splay_tree_pick(
  56. ipc_splay_tree_t splay,
  57. mach_port_t *namep,
  58. ipc_tree_entry_t *entryp);
  59. /* Find an entry in a splay tree */
  60. extern ipc_tree_entry_t ipc_splay_tree_lookup(
  61. ipc_splay_tree_t splay,
  62. mach_port_t name);
  63. /* Insert a new entry into a splay tree */
  64. extern void ipc_splay_tree_insert(
  65. ipc_splay_tree_t splay,
  66. mach_port_t name,
  67. ipc_tree_entry_t entry);
  68. /* Delete an entry from a splay tree */
  69. extern void ipc_splay_tree_delete(
  70. ipc_splay_tree_t splay,
  71. mach_port_t name,
  72. ipc_tree_entry_t entry);
  73. /* Split a splay tree */
  74. extern void ipc_splay_tree_split(
  75. ipc_splay_tree_t splay,
  76. mach_port_t name,
  77. ipc_splay_tree_t entry);
  78. /* Join two splay trees */
  79. extern void ipc_splay_tree_join(
  80. ipc_splay_tree_t splay,
  81. ipc_splay_tree_t small);
  82. /* Do a bounded splay tree lookup */
  83. extern void ipc_splay_tree_bounds(
  84. ipc_splay_tree_t splay,
  85. mach_port_t name,
  86. mach_port_t *lowerp,
  87. mach_port_t *upperp);
  88. /* Initialize a symmetric order traversal of a splay tree */
  89. extern ipc_tree_entry_t ipc_splay_traverse_start(
  90. ipc_splay_tree_t splay);
  91. /* Return the next entry in a symmetric order traversal of a splay tree */
  92. extern ipc_tree_entry_t ipc_splay_traverse_next(
  93. ipc_splay_tree_t splay,
  94. boolean_t delete);
  95. /* Terminate a symmetric order traversal of a splay tree */
  96. extern void ipc_splay_traverse_finish(
  97. ipc_splay_tree_t splay);
  98. #endif /* _IPC_IPC_SPLAY_H_ */