]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* splay-tree.h: New file.
authorMark Mitchell <mark@markmitchell.com>
Wed, 21 Oct 1998 09:19:42 +0000 (09:19 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Wed, 21 Oct 1998 09:19:42 +0000 (09:19 +0000)
From-SVN: r23211

include/ChangeLog
include/splay-tree.h [new file with mode: 0644]

index 923c79ed39ac4b4b541c0bde5248e1c711916de4..1e395b1711c439c685e0bf3a4e3e49d6a068be0f 100644 (file)
@@ -1,3 +1,7 @@
+1998-10-21  Mark Mitchell  <mark@markmitchell.com>
+
+       * splay-tree.h: New file.
+
 Fri Oct  9 00:02:03 1998  Jeffrey A Law  (law@cygnus.com)
 
        * Merge devo and egcs include directories.
diff --git a/include/splay-tree.h b/include/splay-tree.h
new file mode 100644 (file)
index 0000000..0088106
--- /dev/null
@@ -0,0 +1,116 @@
+/* A splay-tree datatype.  
+   Copyright (C) 1998 Free Software Foundation, Inc.
+   Contributed by Mark Mitchell (mark@markmitchell.com).
+
+   This file is part of GNU CC.
+   
+   GNU CC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   GNU CC is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU CC; see the file COPYING.  If not, write to the Free
+   Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  
+
+   For an easily readable description of splay-trees, see:
+
+     Lewis, Harry R. and Denenberg, Larry.  Data Structures and Their
+     Algorithms.  Harper-Collins, Inc.  1991.  
+
+   The major feature of splay trees is that all basic tree operations
+   are amortized O(log n) time for a tree with n nodes.  */
+
+#ifndef _SPLAY_TREE_H
+#define _SPLAY_TREE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#ifdef IN_GCC
+#include "gansidecl.h"
+#define PARAMS(ARGS) PROTO(ARGS)
+#else /* ! IN_GCC */
+#include <ansidecl.h>
+#endif /* IN_GCC */
+
+/* Use typedefs for the key and data types to facilitate changing
+   these types, if necessary.  These types should be sufficiently wide
+   that any pointer or scalar can be cast to these types, and then
+   cast back, without loss of precision.  */
+typedef unsigned long int splay_tree_key;
+typedef unsigned long int splay_tree_value;
+
+/* Forward declaration for a node in the tree.  */
+typedef struct splay_tree_node *splay_tree_node;
+
+/* The type of a function which compares two splay-tree keys.  The
+   function should return values as for qsort.  */
+typedef int (*splay_tree_compare_fn)(splay_tree_key, splay_tree_key);
+
+/* The type of a function used to deallocate any resources associated
+   with the key.  */
+typedef void (*splay_tree_delete_key_fn)(splay_tree_key);
+
+/* The type of a function used to deallocate any resources associated
+   with the value.  */
+typedef void (*splay_tree_delete_value_fn)(splay_tree_value);
+
+/* The type of a function used to iterate over the tree.  */
+typedef int (*splay_tree_foreach_fn)(splay_tree_node, void*);
+
+/* The nodes in the splay tree.  */
+struct splay_tree_node
+{
+  /* The key.  */
+  splay_tree_key key;
+
+  /* The value.  */
+  splay_tree_value value;
+
+  /* The left and right children, respectively.  */
+  splay_tree_node left;
+  splay_tree_node right;
+};
+
+/* The splay tree itself.  */
+typedef struct splay_tree
+{
+  /* The root of the tree.  */
+  splay_tree_node root;
+
+  /* The comparision function.  */
+  splay_tree_compare_fn comp;
+
+  /* The deallocate-key function.  NULL if no cleanup is necessary.  */
+  splay_tree_delete_key_fn delete_key;
+
+  /* The deallocate-value function.  NULL if no cleanup is necessary.  */
+  splay_tree_delete_value_fn delete_value;
+} *splay_tree;
+
+extern splay_tree splay_tree_new        PARAMS((splay_tree_compare_fn,
+                                               splay_tree_delete_key_fn,
+                                               splay_tree_delete_value_fn));
+extern void splay_tree_delete           PARAMS((splay_tree));
+extern void splay_tree_insert           PARAMS((splay_tree,
+                                               splay_tree_key,
+                                               splay_tree_value));
+extern splay_tree_node splay_tree_lookup   
+                                        PARAMS((splay_tree,
+                                               splay_tree_key));
+extern int splay_tree_foreach           PARAMS((splay_tree,
+                                               splay_tree_foreach_fn,
+                                               void*));
+                                              
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _SPLAY_TREE_H */