/[gnats]/gnats/include/splay-tree.h
ViewVC logotype

Diff of /gnats/include/splay-tree.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by jsm, Tue Oct 26 07:10:16 1999 UTC revision 1.2 by chewie, Sat Nov 13 05:14:17 2004 UTC
# Line 1  Line 1 
1  /* A splay-tree datatype.    /* A splay-tree datatype.  
2     Copyright (C) 1998 Free Software Foundation, Inc.     Copyright 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
3     Contributed by Mark Mitchell (mark@markmitchell.com).     Contributed by Mark Mitchell (mark@markmitchell.com).
4    
5  This file is part of GNU CC.  This file is part of GCC.
6        
7  GNU CC is free software; you can redistribute it and/or modify it  GCC is free software; you can redistribute it and/or modify it
8  under the terms of the GNU General Public License as published by  under the terms of the GNU General Public License as published by
9  the Free Software Foundation; either version 2, or (at your option)  the Free Software Foundation; either version 2, or (at your option)
10  any later version.  any later version.
11    
12  GNU CC is distributed in the hope that it will be useful, but  GCC is distributed in the hope that it will be useful, but
13  WITHOUT ANY WARRANTY; without even the implied warranty of  WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  General Public License for more details.  General Public License for more details.
16    
17  You should have received a copy of the GNU General Public License  You should have received a copy of the GNU General Public License
18  along with GNU CC; see the file COPYING.  If not, write to  along with GCC; see the file COPYING.  If not, write to
19  the Free Software Foundation, 59 Temple Place - Suite 330,  the Free Software Foundation, 59 Temple Place - Suite 330,
20  Boston, MA 02111-1307, USA.  */  Boston, MA 02111-1307, USA.  */
21    
# Line 34  Boston, MA 02111-1307, USA.  */ Line 34  Boston, MA 02111-1307, USA.  */
34  extern "C" {  extern "C" {
35  #endif /* __cplusplus */  #endif /* __cplusplus */
36    
37  #include <ansidecl.h>  #include "ansidecl.h"
38    
39    #ifndef GTY
40    #define GTY(X)
41    #endif
42    
43  /* Use typedefs for the key and data types to facilitate changing  /* Use typedefs for the key and data types to facilitate changing
44     these types, if necessary.  These types should be sufficiently wide     these types, if necessary.  These types should be sufficiently wide
# Line 44  typedef unsigned long int splay_tree_key Line 48  typedef unsigned long int splay_tree_key
48  typedef unsigned long int splay_tree_value;  typedef unsigned long int splay_tree_value;
49    
50  /* Forward declaration for a node in the tree.  */  /* Forward declaration for a node in the tree.  */
51  typedef struct splay_tree_node *splay_tree_node;  typedef struct splay_tree_node_s *splay_tree_node;
52    
53  /* The type of a function which compares two splay-tree keys.  The  /* The type of a function which compares two splay-tree keys.  The
54     function should return values as for qsort.  */     function should return values as for qsort.  */
# Line 61  typedef void (*splay_tree_delete_value_f Line 65  typedef void (*splay_tree_delete_value_f
65  /* The type of a function used to iterate over the tree.  */  /* The type of a function used to iterate over the tree.  */
66  typedef int (*splay_tree_foreach_fn) PARAMS((splay_tree_node, void*));  typedef int (*splay_tree_foreach_fn) PARAMS((splay_tree_node, void*));
67    
68    /* The type of a function used to allocate memory for tree root and
69       node structures.  The first argument is the number of bytes needed;
70       the second is a data pointer the splay tree functions pass through
71       to the allocator.  This function must never return zero.  */
72    typedef PTR (*splay_tree_allocate_fn) PARAMS((int, void *));
73    
74    /* The type of a function used to free memory allocated using the
75       corresponding splay_tree_allocate_fn.  The first argument is the
76       memory to be freed; the latter is a data pointer the splay tree
77       functions pass through to the freer.  */
78    typedef void (*splay_tree_deallocate_fn) PARAMS((void *, void *));
79    
80  /* The nodes in the splay tree.  */  /* The nodes in the splay tree.  */
81  struct splay_tree_node  struct splay_tree_node_s GTY(())
82  {  {
83    /* The key.  */    /* The key.  */
84    splay_tree_key key;    splay_tree_key GTY ((use_param1 (""))) key;
85    
86    /* The value.  */    /* The value.  */
87    splay_tree_value value;    splay_tree_value GTY ((use_param2 (""))) value;
88    
89    /* The left and right children, respectively.  */    /* The left and right children, respectively.  */
90    splay_tree_node left;    splay_tree_node GTY ((use_params (""))) left;
91    splay_tree_node right;    splay_tree_node GTY ((use_params (""))) right;
92  };  };
93    
94  /* The splay tree itself.  */  /* The splay tree itself.  */
95  typedef struct splay_tree  struct splay_tree_s GTY(())
96  {  {
97    /* The root of the tree.  */    /* The root of the tree.  */
98    splay_tree_node root;    splay_tree_node GTY ((use_params (""))) root;
99    
100    /* The comparision function.  */    /* The comparision function.  */
101    splay_tree_compare_fn comp;    splay_tree_compare_fn comp;
# Line 89  typedef struct splay_tree Line 105  typedef struct splay_tree
105    
106    /* The deallocate-value function.  NULL if no cleanup is necessary.  */    /* The deallocate-value function.  NULL if no cleanup is necessary.  */
107    splay_tree_delete_value_fn delete_value;    splay_tree_delete_value_fn delete_value;
108  } *splay_tree;  
109      /* Allocate/free functions, and a data pointer to pass to them.  */
110      splay_tree_allocate_fn allocate;
111      splay_tree_deallocate_fn deallocate;
112      PTR GTY((skip (""))) allocate_data;
113    
114    };
115    typedef struct splay_tree_s *splay_tree;
116    
117  extern splay_tree splay_tree_new        PARAMS((splay_tree_compare_fn,  extern splay_tree splay_tree_new        PARAMS((splay_tree_compare_fn,
118                                                  splay_tree_delete_key_fn,                                                  splay_tree_delete_key_fn,
119                                                  splay_tree_delete_value_fn));                                                  splay_tree_delete_value_fn));
120    extern splay_tree splay_tree_new_with_allocator
121                                            PARAMS((splay_tree_compare_fn,
122                                                    splay_tree_delete_key_fn,
123                                                    splay_tree_delete_value_fn,
124                                                    splay_tree_allocate_fn,
125                                                    splay_tree_deallocate_fn,
126                                                    void *));
127  extern void splay_tree_delete           PARAMS((splay_tree));  extern void splay_tree_delete           PARAMS((splay_tree));
128  extern void splay_tree_insert           PARAMS((splay_tree,  extern splay_tree_node splay_tree_insert          
129                                            PARAMS((splay_tree,
130                                                  splay_tree_key,                                                  splay_tree_key,
131                                                  splay_tree_value));                                                  splay_tree_value));
132    extern void splay_tree_remove           PARAMS((splay_tree,
133                                                    splay_tree_key));
134  extern splay_tree_node splay_tree_lookup    extern splay_tree_node splay_tree_lookup  
135                                          PARAMS((splay_tree,                                          PARAMS((splay_tree,
136                                                  splay_tree_key));                                                  splay_tree_key));
137    extern splay_tree_node splay_tree_predecessor
138                                            PARAMS((splay_tree,
139                                                    splay_tree_key));
140    extern splay_tree_node splay_tree_successor
141                                            PARAMS((splay_tree,
142                                                    splay_tree_key));
143    extern splay_tree_node splay_tree_max
144                                            PARAMS((splay_tree));
145    extern splay_tree_node splay_tree_min
146                                            PARAMS((splay_tree));
147  extern int splay_tree_foreach           PARAMS((splay_tree,  extern int splay_tree_foreach           PARAMS((splay_tree,
148                                                  splay_tree_foreach_fn,                                                  splay_tree_foreach_fn,
149                                                  void*));                                                  void*));

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26