hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
 *
 * Copyright (c) 1994
 * Hewlett-Packard Company
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.  Hewlett-Packard Company makes no
 * representations about the suitability of this software for any
 * purpose.  It is provided "as is" without express or implied warranty.
 *
 *
 * Copyright (c) 1996
 * Silicon Graphics Computer Systems, Inc.
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.  Silicon Graphics makes no
 * representations about the suitability of this software for any
 * purpose.  It is provided "as is" without express or implied warranty.
 */
 
/*
Copyright (c) 2007 Lao wen bo
 
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
 
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
 
    1. The origin of this software must not be misrepresented; you must not
    claim that you wrote the original software. If you use this software
    in a product, an acknowledgment in the product documentation would be
    appreciated but is not required.
 
    2. Altered source versions must be plainly marked as such, and must not be
    misrepresented as being the original software.
 
    3. This notice may not be removed or altered from any source
    distribution.
 
   Lao wen bo
   viewpl(at)gmail.com
 */
 
/*
NOTE: This is an internal header file, You should not attempt to use it directly.
*/
 
#ifndef _C_TREE_H
#define _C_TREE_H
 
#include "c_def.h"
#include "c_iterator.h"
#include "c_memory.h"
#include "c_pair.h"
#include "c_function.h"
 
#define c_rb_tree             _c_rb_tree
#define c_prb_tree             _c_prb_tree
#define c_rb_tree_create        __c_rb_tree
#define c_rb_tree_destroy        __c_eert_br
#define c_rb_tree_assign        _c_rb_tree_assign
#define c_rb_tree_begin            _c_rb_tree_begin
#define c_rb_tree_end            _c_rb_tree_end
#define c_rb_tree_rbegin        _c_rb_tree_rbegin
#define c_rb_tree_rend            _c_rb_tree_rend
#define c_rb_tree_empty            _c_rb_tree_empty
#define c_rb_tree_size            _c_rb_tree_size
#define c_rb_tree_max_size        _c_rb_tree_max_size
#define c_rb_tree_swap            _c_rb_tree_swap
#define c_rb_tree_insert_unique        _c_rb_tree_insert_unique
#define c_rb_tree_insert_equal        _c_rb_tree_insert_equal
#define c_rb_tree_insert_unique1    _c_rb_tree_insert_unique1
#define c_rb_tree_insert_equal1        _c_rb_tree_insert_equal1
#define c_rb_tree_insert_unique2    _c_rb_tree_insert_unique2
#define c_rb_tree_insert_equal2        _c_rb_tree_insert_equal2
#define c_rb_tree_erase            _c_rb_tree_erase
#define c_rb_tree_erase1        _c_rb_tree_erase1
#define c_rb_tree_erase2        _c_rb_tree_erase2
#define c_rb_tree_clear            _c_rb_tree_clear
#define c_rb_tree_find            _c_rb_tree_find
#define c_rb_tree_count            _c_rb_tree_count
#define c_rb_tree_lower_bound        _c_rb_tree_lower_bound
#define c_rb_tree_upper_bound        _c_rb_tree_upper_bound
#define c_rb_tree_equal_range        _c_rb_tree_equal_range
#define c_rb_tree_less            _c_rb_tree_less
#define c_rb_tree_equal            _c_rb_tree_equal
 
 
typedef c_bool _c_rb_tree_color_type;
typedef value_type key_type;
typedef struct _c_rb_tree_node _c_rb_tree_node, * _c_prb_tree_node;
typedef _c_rb_tree_color_type _color_type;
typedef _c_rb_tree_node * _base_ptr;
typedef _base_ptr _link_type;
 
struct _c_rb_tree_node
{
    _color_type _A_color;
    _base_ptr _A_parent;
    _base_ptr _A_left;
    _base_ptr _A_right;
    value_type _A_value_field;
};
 
typedef struct c_rb_tree
{
   _base_ptr _A_header;
   size_type _A_node_count;
   COMPARER _A_key_compare;
   c_unary_function _A_keyofvalue;
}c_rb_tree, * c_prb_tree;
 
 
 
void __c_rb_tree(c_prb_tree thiz, COMPARER pcmp);
void __c_eert_br(c_prb_tree thiz);
c_prb_tree c_rb_tree_assign(c_prb_tree thiz, const c_prb_tree T);
c_iterator c_rb_tree_begin(c_prb_tree thiz);
c_iterator c_rb_tree_end(c_prb_tree thiz);
c_reverse_iterator c_rb_tree_rbegin(c_prb_tree thiz);
c_reverse_iterator c_rb_tree_rend(c_prb_tree thiz);
c_bool c_rb_tree_empty(c_prb_tree thiz);
size_type c_rb_tree_size(c_prb_tree thiz);
size_type c_rb_tree_max_size(c_prb_tree thiz);
void c_rb_tree_swap(c_prb_tree thiz, c_prb_tree T);
c_iter_bool_pair c_rb_tree_insert_unique(c_prb_tree thiz, const value_type val);
c_iterator c_rb_tree_insert_equal(c_prb_tree thiz, const value_type val);
c_iterator c_rb_tree_insert_unique1(c_prb_tree thiz, c_iterator position, const value_type val);
c_iterator c_rb_tree_insert_equal1(c_prb_tree thiz, c_iterator position, const value_type val);
void c_rb_tree_insert_unique2(c_prb_tree thiz, c_iterator first, c_iterator last);
void c_rb_tree_insert_equal2(c_prb_tree thiz, c_iterator first, c_iterator last);
void c_rb_tree_erase(c_prb_tree thiz, c_iterator position);
size_type c_rb_tree_erase1(c_prb_tree thiz, key_type key);
void c_rb_tree_erase2(c_prb_tree thiz, c_iterator first, c_iterator last);
void c_rb_tree_clear(c_prb_tree thiz);
c_iterator c_rb_tree_find(c_prb_tree thiz, key_type key);
size_type c_rb_tree_count(c_prb_tree thiz, key_type key);
c_iterator c_rb_tree_lower_bound(c_prb_tree thiz, key_type key);
c_iterator c_rb_tree_upper_bound(c_prb_tree thiz, key_type key);
c_iter_iter_pair c_rb_tree_equal_range(c_prb_tree thiz, key_type key);
c_bool c_rb_tree_less(c_prb_tree thiz, const c_prb_tree T, COMPARER cmp);
c_bool c_rb_tree_equal(c_prb_tree thiz, const c_prb_tree T, COMPARER cmp);
c_bool __c_rb_tree_verify(c_prb_tree thiz);
 
 
#endif /* _C_TREE_H */