Advertisement
Guest User

Untitled

a guest
May 26th, 2015
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.75 KB | None | 0 0
  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::printf("%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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement