lib/include/tree.h

Go to the documentation of this file.
00001 //  This file is part of MOS, the MANTIS Operating System
00002 //  See http://mantis.cs.colorado.edu/
00003 //
00004 //  Copyright (c) 2002 - 2007 University of Colorado, Boulder
00005 //
00006 //   All rights reserved.
00007 //
00008 //   Redistribution and use in source and binary forms, with or without
00009 //   modification, are permitted provided that the following conditions are
00010 //   met:
00011 //
00012 //       * Redistributions of source code must retain the above copyright
00013 //         notice, this list of conditions and the following disclaimer.
00014 //       * Redistributions in binary form must reproduce the above
00015 //         copyright notice, this list of conditions and the following
00016 //         disclaimer in the documentation and/or other materials provided
00017 //         with the distribution. 
00018 //       * Neither the name of the MANTIS Project nor the names of its
00019 //         contributors may be used to endorse or promote products derived
00020 //         from this software without specific prior written permission.
00021 //
00022 //   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00023 //   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00024 //   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00025 //   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00026 //   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00027 //   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00028 //   BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00029 //   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00030 //   CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00031 //   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00032 //   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00033 //   POSSIBILITY OF SUCH DAMAGE.
00034 
00042 #include <inttypes.h>
00043 
00044 enum {
00045    TREE_OK,
00046    TREE_NODE_EXISTS,
00047    TREE_NODE_NOT_FOUND,
00048    TREE_OUT_OF_MEM,
00049    TREE_INVALID_ROTATION
00050 };
00051 
00052 typedef struct node_t{
00053    uint16_t key;
00054    //uint16_t aux; //user data
00055    struct node_t *left,*right, *p;
00056 }tree_node;
00057 
00058 typedef tree_node* node_ptr;
00059 
00061 void print_tree(node_ptr starting_point);
00062 
00064 void clear_tree();
00065 
00067 node_ptr get_root();
00068 
00075 uint8_t insert(uint16_t key);
00076 
00081 node_ptr find(uint16_t key);
00082 
00084 node_ptr find_node(uint16_t key);
00085 
00091 uint8_t delete(uint16_t key);
00092 
00099 uint8_t left_rotate_node(uint16_t key);
00100 
00107 uint8_t right_rotate_node(uint16_t key);
00108 
00115 uint8_t left_rotate(node_ptr x);
00116 
00123 uint8_t right_rotate(node_ptr x);
00124 
00128 void splay(node_ptr x);
00129 
00133 void splay_node(uint16_t key);
00134 
00136 node_ptr get_min();
00137 
00139 node_ptr get_max();
00140 
00145 uint16_t count_nodes(node_ptr starting_point);
00146 
00152 uint16_t get_total(node_ptr starting_point);

Generated on Mon Nov 23 06:25:59 2009 for MANTIS by  doxygen 1.4.6