root / lab4 / .minix-src / include / c++ / __debug
History | View | Annotate | Download (5.76 KB)
1 |
// -*- C++ -*- |
---|---|
2 |
//===--------------------------- __debug ----------------------------------===// |
3 |
// |
4 |
// The LLVM Compiler Infrastructure |
5 |
// |
6 |
// This file is dual licensed under the MIT and the University of Illinois Open |
7 |
// Source Licenses. See LICENSE.TXT for details. |
8 |
// |
9 |
//===----------------------------------------------------------------------===// |
10 |
|
11 |
#ifndef _LIBCPP_DEBUG_H |
12 |
#define _LIBCPP_DEBUG_H |
13 |
|
14 |
#include <__config> |
15 |
|
16 |
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) |
17 |
#pragma GCC system_header |
18 |
#endif |
19 |
|
20 |
#if _LIBCPP_DEBUG_LEVEL >= 1 |
21 |
# include <cstdlib> |
22 |
# include <cstdio> |
23 |
# include <cstddef> |
24 |
# ifndef _LIBCPP_ASSERT |
25 |
# define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : (_VSTD::fprintf(stderr, "%s\n", m), _VSTD::abort())) |
26 |
# endif |
27 |
#endif |
28 |
|
29 |
#ifndef _LIBCPP_ASSERT |
30 |
# define _LIBCPP_ASSERT(x, m) ((void)0) |
31 |
#endif |
32 |
|
33 |
#if _LIBCPP_DEBUG_LEVEL >= 2 |
34 |
|
35 |
_LIBCPP_BEGIN_NAMESPACE_STD |
36 |
|
37 |
struct _LIBCPP_TYPE_VIS __c_node; |
38 |
|
39 |
struct _LIBCPP_TYPE_VIS __i_node |
40 |
{ |
41 |
void* __i_; |
42 |
__i_node* __next_; |
43 |
__c_node* __c_; |
44 |
|
45 |
#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS |
46 |
__i_node(const __i_node&) = delete; |
47 |
__i_node& operator=(const __i_node&) = delete; |
48 |
#else |
49 |
private: |
50 |
__i_node(const __i_node&); |
51 |
__i_node& operator=(const __i_node&); |
52 |
public: |
53 |
#endif |
54 |
_LIBCPP_INLINE_VISIBILITY |
55 |
__i_node(void* __i, __i_node* __next, __c_node* __c) |
56 |
: __i_(__i), __next_(__next), __c_(__c) {} |
57 |
~__i_node(); |
58 |
}; |
59 |
|
60 |
struct _LIBCPP_TYPE_VIS __c_node |
61 |
{ |
62 |
void* __c_; |
63 |
__c_node* __next_; |
64 |
__i_node** beg_; |
65 |
__i_node** end_; |
66 |
__i_node** cap_; |
67 |
|
68 |
#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS |
69 |
__c_node(const __c_node&) = delete; |
70 |
__c_node& operator=(const __c_node&) = delete; |
71 |
#else |
72 |
private: |
73 |
__c_node(const __c_node&); |
74 |
__c_node& operator=(const __c_node&); |
75 |
public: |
76 |
#endif |
77 |
_LIBCPP_INLINE_VISIBILITY |
78 |
__c_node(void* __c, __c_node* __next) |
79 |
: __c_(__c), __next_(__next), beg_(nullptr), end_(nullptr), cap_(nullptr) {} |
80 |
virtual ~__c_node(); |
81 |
|
82 |
virtual bool __dereferenceable(const void*) const = 0; |
83 |
virtual bool __decrementable(const void*) const = 0; |
84 |
virtual bool __addable(const void*, ptrdiff_t) const = 0; |
85 |
virtual bool __subscriptable(const void*, ptrdiff_t) const = 0; |
86 |
|
87 |
void __add(__i_node* __i); |
88 |
_LIBCPP_HIDDEN void __remove(__i_node* __i); |
89 |
}; |
90 |
|
91 |
template <class _Cont> |
92 |
struct _C_node |
93 |
: public __c_node |
94 |
{ |
95 |
_C_node(void* __c, __c_node* __n) |
96 |
: __c_node(__c, __n) {} |
97 |
|
98 |
virtual bool __dereferenceable(const void*) const; |
99 |
virtual bool __decrementable(const void*) const; |
100 |
virtual bool __addable(const void*, ptrdiff_t) const; |
101 |
virtual bool __subscriptable(const void*, ptrdiff_t) const; |
102 |
}; |
103 |
|
104 |
template <class _Cont> |
105 |
bool |
106 |
_C_node<_Cont>::__dereferenceable(const void* __i) const |
107 |
{ |
108 |
typedef typename _Cont::const_iterator iterator; |
109 |
const iterator* __j = static_cast<const iterator*>(__i); |
110 |
_Cont* _Cp = static_cast<_Cont*>(__c_); |
111 |
return _Cp->__dereferenceable(__j); |
112 |
} |
113 |
|
114 |
template <class _Cont> |
115 |
bool |
116 |
_C_node<_Cont>::__decrementable(const void* __i) const |
117 |
{ |
118 |
typedef typename _Cont::const_iterator iterator; |
119 |
const iterator* __j = static_cast<const iterator*>(__i); |
120 |
_Cont* _Cp = static_cast<_Cont*>(__c_); |
121 |
return _Cp->__decrementable(__j); |
122 |
} |
123 |
|
124 |
template <class _Cont> |
125 |
bool |
126 |
_C_node<_Cont>::__addable(const void* __i, ptrdiff_t __n) const |
127 |
{ |
128 |
typedef typename _Cont::const_iterator iterator; |
129 |
const iterator* __j = static_cast<const iterator*>(__i); |
130 |
_Cont* _Cp = static_cast<_Cont*>(__c_); |
131 |
return _Cp->__addable(__j, __n); |
132 |
} |
133 |
|
134 |
template <class _Cont> |
135 |
bool |
136 |
_C_node<_Cont>::__subscriptable(const void* __i, ptrdiff_t __n) const |
137 |
{ |
138 |
typedef typename _Cont::const_iterator iterator; |
139 |
const iterator* __j = static_cast<const iterator*>(__i); |
140 |
_Cont* _Cp = static_cast<_Cont*>(__c_); |
141 |
return _Cp->__subscriptable(__j, __n); |
142 |
} |
143 |
|
144 |
class _LIBCPP_TYPE_VIS __libcpp_db |
145 |
{ |
146 |
__c_node** __cbeg_; |
147 |
__c_node** __cend_; |
148 |
size_t __csz_; |
149 |
__i_node** __ibeg_; |
150 |
__i_node** __iend_; |
151 |
size_t __isz_; |
152 |
|
153 |
__libcpp_db(); |
154 |
public: |
155 |
#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS |
156 |
__libcpp_db(const __libcpp_db&) = delete; |
157 |
__libcpp_db& operator=(const __libcpp_db&) = delete; |
158 |
#else |
159 |
private: |
160 |
__libcpp_db(const __libcpp_db&); |
161 |
__libcpp_db& operator=(const __libcpp_db&); |
162 |
public: |
163 |
#endif |
164 |
~__libcpp_db(); |
165 |
|
166 |
class __db_c_iterator; |
167 |
class __db_c_const_iterator; |
168 |
class __db_i_iterator; |
169 |
class __db_i_const_iterator; |
170 |
|
171 |
__db_c_const_iterator __c_end() const; |
172 |
__db_i_const_iterator __i_end() const; |
173 |
|
174 |
template <class _Cont> |
175 |
_LIBCPP_INLINE_VISIBILITY |
176 |
void __insert_c(_Cont* __c) |
177 |
{ |
178 |
__c_node* __n = __insert_c(static_cast<void*>(__c)); |
179 |
::new(__n) _C_node<_Cont>(__n->__c_, __n->__next_); |
180 |
} |
181 |
|
182 |
void __insert_i(void* __i); |
183 |
__c_node* __insert_c(void* __c); |
184 |
void __erase_c(void* __c); |
185 |
|
186 |
void __insert_ic(void* __i, const void* __c); |
187 |
void __iterator_copy(void* __i, const void* __i0); |
188 |
void __erase_i(void* __i); |
189 |
|
190 |
void* __find_c_from_i(void* __i) const; |
191 |
void __invalidate_all(void* __c); |
192 |
__c_node* __find_c_and_lock(void* __c) const; |
193 |
__c_node* __find_c(void* __c) const; |
194 |
void unlock() const; |
195 |
|
196 |
void swap(void* __c1, void* __c2); |
197 |
|
198 |
|
199 |
bool __dereferenceable(const void* __i) const; |
200 |
bool __decrementable(const void* __i) const; |
201 |
bool __addable(const void* __i, ptrdiff_t __n) const; |
202 |
bool __subscriptable(const void* __i, ptrdiff_t __n) const; |
203 |
bool __less_than_comparable(const void* __i, const void* __j) const; |
204 |
private: |
205 |
_LIBCPP_HIDDEN |
206 |
__i_node* __insert_iterator(void* __i); |
207 |
_LIBCPP_HIDDEN |
208 |
__i_node* __find_iterator(const void* __i) const; |
209 |
|
210 |
friend _LIBCPP_FUNC_VIS __libcpp_db* __get_db(); |
211 |
}; |
212 |
|
213 |
_LIBCPP_FUNC_VIS __libcpp_db* __get_db(); |
214 |
_LIBCPP_FUNC_VIS const __libcpp_db* __get_const_db(); |
215 |
|
216 |
|
217 |
_LIBCPP_END_NAMESPACE_STD |
218 |
|
219 |
#endif |
220 |
|
221 |
#endif // _LIBCPP_DEBUG_H |
222 |
|