Project

General

Profile

Statistics
| Revision:

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