1e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot//===-------------------------- debug.cpp ---------------------------------===// 2e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot// 3e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot// The LLVM Compiler Infrastructure 4e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot// 5e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot// This file is dual licensed under the MIT and the University of Illinois Open 6e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot// Source Licenses. See LICENSE.TXT for details. 7e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot// 8e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot//===----------------------------------------------------------------------===// 9e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 10e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#include "__config" 11e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#include "__debug" 12e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#include "functional" 13e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#include "algorithm" 14e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#include "string" 15e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#include "cstdio" 16e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#include "__hash_table" 17e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#include "mutex" 18e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 19e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot_LIBCPP_BEGIN_NAMESPACE_STD 20e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 21e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotstatic std::string make_what_str(__libcpp_debug_info const& info) { 22e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot string msg = info.__file_; 23e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot msg += ":" + to_string(info.__line_) + ": _LIBCPP_ASSERT '"; 24e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot msg += info.__pred_; 25e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot msg += "' failed. "; 26e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot msg += info.__msg_; 27e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return msg; 28e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 29e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 30e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot_LIBCPP_SAFE_STATIC __libcpp_debug_function_type 31e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __libcpp_debug_function = __libcpp_abort_debug_function; 32e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 33e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotbool __libcpp_set_debug_function(__libcpp_debug_function_type __func) { 34e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __libcpp_debug_function = __func; 35e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return true; 36e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 37e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 38e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot_LIBCPP_NORETURN void __libcpp_abort_debug_function(__libcpp_debug_info const& info) { 39e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot std::fprintf(stderr, "%s\n", make_what_str(info).c_str()); 40e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot std::abort(); 41e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 42e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 43e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot_LIBCPP_NORETURN void __libcpp_throw_debug_function(__libcpp_debug_info const& info) { 44e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_NO_EXCEPTIONS 45e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot throw __libcpp_debug_exception(info); 46e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#else 47e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __libcpp_abort_debug_function(info); 48e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 49e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 50e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 51e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotstruct __libcpp_debug_exception::__libcpp_debug_exception_imp { 52e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __libcpp_debug_info __info_; 53e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot std::string __what_str_; 54e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot}; 55e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 56e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_debug_exception::__libcpp_debug_exception() _NOEXCEPT 57e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot : __imp_(nullptr) { 58e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 59e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 60e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_debug_exception::__libcpp_debug_exception( 61e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __libcpp_debug_info const& info) : __imp_(new __libcpp_debug_exception_imp) 62e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 63e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __imp_->__info_ = info; 64e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __imp_->__what_str_ = make_what_str(info); 65e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 66e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_debug_exception::__libcpp_debug_exception( 67e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __libcpp_debug_exception const& other) : __imp_(nullptr) { 68e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (other.__imp_) 69e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __imp_ = new __libcpp_debug_exception_imp(*other.__imp_); 70e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 71e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 72e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_debug_exception::~__libcpp_debug_exception() _NOEXCEPT { 73e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__imp_) 74e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot delete __imp_; 75e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 76e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 77e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotconst char* __libcpp_debug_exception::what() const _NOEXCEPT { 78e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__imp_) 79e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return __imp_->__what_str_.c_str(); 80e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return "__libcpp_debug_exception"; 81e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 82e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 83e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot_LIBCPP_FUNC_VIS 84e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db* 85e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__get_db() 86e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 87e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot static __libcpp_db db; 88e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return &db; 89e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 90e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 91e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot_LIBCPP_FUNC_VIS 92e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotconst __libcpp_db* 93e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__get_const_db() 94e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 95e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return __get_db(); 96e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 97e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 98e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotnamespace 99e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 100e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 101e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 102e779e31468999c7ef69f424a2b8271969833df2android-build-team Robottypedef mutex mutex_type; 103e779e31468999c7ef69f424a2b8271969833df2android-build-team Robottypedef lock_guard<mutex_type> WLock; 104e779e31468999c7ef69f424a2b8271969833df2android-build-team Robottypedef lock_guard<mutex_type> RLock; 105e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 106e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotmutex_type& 107e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotmut() 108e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 109e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot static mutex_type m; 110e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return m; 111e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 112e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif // !_LIBCPP_HAS_NO_THREADS 113e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 114e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} // unnamed namespace 115e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 116e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__i_node::~__i_node() 117e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 118e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__next_) 119e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 120e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __next_->~__i_node(); 121e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(__next_); 122e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 123e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 124e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 125e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__c_node::~__c_node() 126e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 127e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(beg_); 128e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__next_) 129e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 130e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __next_->~__c_node(); 131e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(__next_); 132e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 133e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 134e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 135e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__libcpp_db() 136e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot : __cbeg_(nullptr), 137e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __cend_(nullptr), 138e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __csz_(0), 139e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __ibeg_(nullptr), 140e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __iend_(nullptr), 141e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __isz_(0) 142e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 143e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 144e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 145e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::~__libcpp_db() 146e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 147e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__cbeg_) 148e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 149e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot for (__c_node** p = __cbeg_; p != __cend_; ++p) 150e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 151e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (*p != nullptr) 152e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 153e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot (*p)->~__c_node(); 154e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(*p); 155e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 156e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 157e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(__cbeg_); 158e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 159e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__ibeg_) 160e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 161e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot for (__i_node** p = __ibeg_; p != __iend_; ++p) 162e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 163e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (*p != nullptr) 164e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 165e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot (*p)->~__i_node(); 166e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(*p); 167e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 168e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 169e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(__ibeg_); 170e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 171e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 172e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 173e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotvoid* 174e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__find_c_from_i(void* __i) const 175e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 176e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 177e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot RLock _(mut()); 178e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 179e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* i = __find_iterator(__i); 180e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot _LIBCPP_ASSERT(i != nullptr, "iterator not found in debug database."); 181e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return i->__c_ != nullptr ? i->__c_->__c_ : nullptr; 182e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 183e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 184e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotvoid 185e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__insert_ic(void* __i, const void* __c) 186e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 187e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 188e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot WLock _(mut()); 189e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 190e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__cbeg_ == __cend_) 191e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return; 192e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t hc = hash<const void*>()(__c) % static_cast<size_t>(__cend_ - __cbeg_); 193e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* c = __cbeg_[hc]; 194e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (c == nullptr) 195e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return; 196e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot while (c->__c_ != __c) 197e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 198e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot c = c->__next_; 199e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (c == nullptr) 200e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return; 201e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 202e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* i = __insert_iterator(__i); 203e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot c->__add(i); 204e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot i->__c_ = c; 205e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 206e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 207e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__c_node* 208e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__insert_c(void* __c) 209e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 210e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 211e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot WLock _(mut()); 212e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 213e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__csz_ + 1 > static_cast<size_t>(__cend_ - __cbeg_)) 214e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 215e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t nc = __next_prime(2*static_cast<size_t>(__cend_ - __cbeg_) + 1); 216e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node** cbeg = static_cast<__c_node**>(calloc(nc, sizeof(void*))); 217e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (cbeg == nullptr) 218e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __throw_bad_alloc(); 219e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 220e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot for (__c_node** p = __cbeg_; p != __cend_; ++p) 221e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 222e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* q = *p; 223e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot while (q != nullptr) 224e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 225e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t h = hash<void*>()(q->__c_) % nc; 226e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* r = q->__next_; 227e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot q->__next_ = cbeg[h]; 228e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot cbeg[h] = q; 229e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot q = r; 230e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 231e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 232e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(__cbeg_); 233e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __cbeg_ = cbeg; 234e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __cend_ = __cbeg_ + nc; 235e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 236e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t hc = hash<void*>()(__c) % static_cast<size_t>(__cend_ - __cbeg_); 237e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* p = __cbeg_[hc]; 238e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* r = __cbeg_[hc] = 239e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot static_cast<__c_node*>(malloc(sizeof(__c_node))); 240e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__cbeg_[hc] == nullptr) 241e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __throw_bad_alloc(); 242e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 243e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot r->__c_ = __c; 244e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot r->__next_ = p; 245e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot ++__csz_; 246e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return r; 247e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 248e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 249e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotvoid 250e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__erase_i(void* __i) 251e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 252e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 253e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot WLock _(mut()); 254e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 255e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__ibeg_ != __iend_) 256e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 257e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t hi = hash<void*>()(__i) % static_cast<size_t>(__iend_ - __ibeg_); 258e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* p = __ibeg_[hi]; 259e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (p != nullptr) 260e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 261e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* q = nullptr; 262e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot while (p->__i_ != __i) 263e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 264e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot q = p; 265e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot p = p->__next_; 266e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (p == nullptr) 267e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return; 268e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 269e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (q == nullptr) 270e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __ibeg_[hi] = p->__next_; 271e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot else 272e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot q->__next_ = p->__next_; 273e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* c = p->__c_; 274e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot --__isz_; 275e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (c != nullptr) 276e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot c->__remove(p); 277e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(p); 278e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 279e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 280e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 281e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 282e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotvoid 283e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__invalidate_all(void* __c) 284e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 285e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 286e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot WLock _(mut()); 287e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 288e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__cend_ != __cbeg_) 289e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 290e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t hc = hash<void*>()(__c) % static_cast<size_t>(__cend_ - __cbeg_); 291e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* p = __cbeg_[hc]; 292e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (p == nullptr) 293e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return; 294e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot while (p->__c_ != __c) 295e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 296e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot p = p->__next_; 297e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (p == nullptr) 298e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return; 299e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 300e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot while (p->end_ != p->beg_) 301e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 302e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot --p->end_; 303e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot (*p->end_)->__c_ = nullptr; 304e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 305e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 306e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 307e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 308e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__c_node* 309e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__find_c_and_lock(void* __c) const 310e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 311e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 312e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot mut().lock(); 313e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 314e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__cend_ == __cbeg_) 315e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 316e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 317e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot mut().unlock(); 318e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 319e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return nullptr; 320e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 321e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t hc = hash<void*>()(__c) % static_cast<size_t>(__cend_ - __cbeg_); 322e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* p = __cbeg_[hc]; 323e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (p == nullptr) 324e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 325e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 326e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot mut().unlock(); 327e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 328e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return nullptr; 329e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 330e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot while (p->__c_ != __c) 331e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 332e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot p = p->__next_; 333e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (p == nullptr) 334e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 335e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 336e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot mut().unlock(); 337e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 338e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return nullptr; 339e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 340e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 341e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return p; 342e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 343e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 344e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__c_node* 345e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__find_c(void* __c) const 346e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 347e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t hc = hash<void*>()(__c) % static_cast<size_t>(__cend_ - __cbeg_); 348e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* p = __cbeg_[hc]; 349e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot _LIBCPP_ASSERT(p != nullptr, "debug mode internal logic error __find_c A"); 350e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot while (p->__c_ != __c) 351e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 352e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot p = p->__next_; 353e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot _LIBCPP_ASSERT(p != nullptr, "debug mode internal logic error __find_c B"); 354e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 355e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return p; 356e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 357e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 358e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotvoid 359e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::unlock() const 360e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 361e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 362e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot mut().unlock(); 363e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 364e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 365e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 366e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotvoid 367e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__erase_c(void* __c) 368e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 369e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 370e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot WLock _(mut()); 371e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 372e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__cend_ != __cbeg_) 373e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 374e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t hc = hash<void*>()(__c) % static_cast<size_t>(__cend_ - __cbeg_); 375e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* p = __cbeg_[hc]; 376e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (p == nullptr) 377e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return; 378e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* q = nullptr; 379e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot _LIBCPP_ASSERT(p != nullptr, "debug mode internal logic error __erase_c A"); 380e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot while (p->__c_ != __c) 381e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 382e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot q = p; 383e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot p = p->__next_; 384e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (p == nullptr) 385e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return; 386e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot _LIBCPP_ASSERT(p != nullptr, "debug mode internal logic error __erase_c B"); 387e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 388e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (q == nullptr) 389e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __cbeg_[hc] = p->__next_; 390e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot else 391e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot q->__next_ = p->__next_; 392e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot while (p->end_ != p->beg_) 393e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 394e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot --p->end_; 395e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot (*p->end_)->__c_ = nullptr; 396e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 397e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(p->beg_); 398e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(p); 399e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot --__csz_; 400e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 401e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 402e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 403e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotvoid 404e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__iterator_copy(void* __i, const void* __i0) 405e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 406e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 407e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot WLock _(mut()); 408e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 409e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* i = __find_iterator(__i); 410e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* i0 = __find_iterator(__i0); 411e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* c0 = i0 != nullptr ? i0->__c_ : nullptr; 412e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (i == nullptr && i0 != nullptr) 413e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot i = __insert_iterator(__i); 414e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* c = i != nullptr ? i->__c_ : nullptr; 415e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (c != c0) 416e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 417e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (c != nullptr) 418e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot c->__remove(i); 419e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (i != nullptr) 420e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 421e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot i->__c_ = nullptr; 422e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (c0 != nullptr) 423e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 424e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot i->__c_ = c0; 425e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot i->__c_->__add(i); 426e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 427e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 428e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 429e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 430e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 431e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotbool 432e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__dereferenceable(const void* __i) const 433e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 434e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 435e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot RLock _(mut()); 436e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 437e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* i = __find_iterator(__i); 438e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return i != nullptr && i->__c_ != nullptr && i->__c_->__dereferenceable(__i); 439e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 440e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 441e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotbool 442e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__decrementable(const void* __i) const 443e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 444e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 445e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot RLock _(mut()); 446e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 447e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* i = __find_iterator(__i); 448e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return i != nullptr && i->__c_ != nullptr && i->__c_->__decrementable(__i); 449e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 450e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 451e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotbool 452e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__addable(const void* __i, ptrdiff_t __n) const 453e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 454e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 455e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot RLock _(mut()); 456e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 457e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* i = __find_iterator(__i); 458e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return i != nullptr && i->__c_ != nullptr && i->__c_->__addable(__i, __n); 459e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 460e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 461e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotbool 462e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__subscriptable(const void* __i, ptrdiff_t __n) const 463e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 464e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 465e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot RLock _(mut()); 466e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 467e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* i = __find_iterator(__i); 468e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return i != nullptr && i->__c_ != nullptr && i->__c_->__subscriptable(__i, __n); 469e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 470e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 471e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotbool 472e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__less_than_comparable(const void* __i, const void* __j) const 473e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 474e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 475e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot RLock _(mut()); 476e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 477e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* i = __find_iterator(__i); 478e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* j = __find_iterator(__j); 479e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* ci = i != nullptr ? i->__c_ : nullptr; 480e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* cj = j != nullptr ? j->__c_ : nullptr; 481e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return ci != nullptr && ci == cj; 482e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 483e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 484e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotvoid 485e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::swap(void* c1, void* c2) 486e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 487e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 488e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot WLock _(mut()); 489e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 490e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t hc = hash<void*>()(c1) % static_cast<size_t>(__cend_ - __cbeg_); 491e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* p1 = __cbeg_[hc]; 492e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot _LIBCPP_ASSERT(p1 != nullptr, "debug mode internal logic error swap A"); 493e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot while (p1->__c_ != c1) 494e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 495e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot p1 = p1->__next_; 496e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot _LIBCPP_ASSERT(p1 != nullptr, "debug mode internal logic error swap B"); 497e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 498e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot hc = hash<void*>()(c2) % static_cast<size_t>(__cend_ - __cbeg_); 499e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __c_node* p2 = __cbeg_[hc]; 500e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot _LIBCPP_ASSERT(p2 != nullptr, "debug mode internal logic error swap C"); 501e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot while (p2->__c_ != c2) 502e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 503e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot p2 = p2->__next_; 504e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot _LIBCPP_ASSERT(p2 != nullptr, "debug mode internal logic error swap D"); 505e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 506e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot std::swap(p1->beg_, p2->beg_); 507e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot std::swap(p1->end_, p2->end_); 508e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot std::swap(p1->cap_, p2->cap_); 509e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot for (__i_node** p = p1->beg_; p != p1->end_; ++p) 510e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot (*p)->__c_ = p1; 511e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot for (__i_node** p = p2->beg_; p != p2->end_; ++p) 512e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot (*p)->__c_ = p2; 513e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 514e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 515e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotvoid 516e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__insert_i(void* __i) 517e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 518e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#ifndef _LIBCPP_HAS_NO_THREADS 519e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot WLock _(mut()); 520e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot#endif 521e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __insert_iterator(__i); 522e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 523e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 524e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotvoid 525e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__c_node::__add(__i_node* i) 526e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 527e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (end_ == cap_) 528e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 529e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t nc = 2*static_cast<size_t>(cap_ - beg_); 530e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (nc == 0) 531e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot nc = 1; 532e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node** beg = 533e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot static_cast<__i_node**>(malloc(nc * sizeof(__i_node*))); 534e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (beg == nullptr) 535e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __throw_bad_alloc(); 536e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 537e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (nc > 1) 538e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot memcpy(beg, beg_, nc/2*sizeof(__i_node*)); 539e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(beg_); 540e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot beg_ = beg; 541e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot end_ = beg_ + nc/2; 542e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot cap_ = beg_ + nc; 543e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 544e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot *end_++ = i; 545e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 546e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 547e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot// private api 548e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 549e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot_LIBCPP_HIDDEN 550e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__i_node* 551e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__insert_iterator(void* __i) 552e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 553e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__isz_ + 1 > static_cast<size_t>(__iend_ - __ibeg_)) 554e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 555e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t nc = __next_prime(2*static_cast<size_t>(__iend_ - __ibeg_) + 1); 556e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node** ibeg = static_cast<__i_node**>(calloc(nc, sizeof(void*))); 557e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (ibeg == nullptr) 558e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __throw_bad_alloc(); 559e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 560e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot for (__i_node** p = __ibeg_; p != __iend_; ++p) 561e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 562e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* q = *p; 563e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot while (q != nullptr) 564e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 565e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t h = hash<void*>()(q->__i_) % nc; 566e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* r = q->__next_; 567e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot q->__next_ = ibeg[h]; 568e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot ibeg[h] = q; 569e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot q = r; 570e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 571e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 572e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot free(__ibeg_); 573e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __ibeg_ = ibeg; 574e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __iend_ = __ibeg_ + nc; 575e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 576e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t hi = hash<void*>()(__i) % static_cast<size_t>(__iend_ - __ibeg_); 577e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* p = __ibeg_[hi]; 578e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* r = __ibeg_[hi] = 579e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot static_cast<__i_node*>(malloc(sizeof(__i_node))); 580e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (r == nullptr) 581e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __throw_bad_alloc(); 582e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 583e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot ::new(r) __i_node(__i, p, nullptr); 584e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot ++__isz_; 585e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return r; 586e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 587e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 588e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot_LIBCPP_HIDDEN 589e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__i_node* 590e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__libcpp_db::__find_iterator(const void* __i) const 591e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 592e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node* r = nullptr; 593e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (__ibeg_ != __iend_) 594e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 595e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot size_t h = hash<const void*>()(__i) % static_cast<size_t>(__iend_ - __ibeg_); 596e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot for (__i_node* nd = __ibeg_[h]; nd != nullptr; nd = nd->__next_) 597e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 598e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (nd->__i_ == __i) 599e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot { 600e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot r = nd; 601e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot break; 602e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 603e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 604e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot } 605e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot return r; 606e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 607e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 608e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot_LIBCPP_HIDDEN 609e779e31468999c7ef69f424a2b8271969833df2android-build-team Robotvoid 610e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot__c_node::__remove(__i_node* p) 611e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot{ 612e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot __i_node** r = find(beg_, end_, p); 613e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot _LIBCPP_ASSERT(r != end_, "debug mode internal logic error __c_node::__remove"); 614e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot if (--end_ != r) 615e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot memmove(r, r+1, static_cast<size_t>(end_ - r)*sizeof(__i_node*)); 616e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot} 617e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot 618e779e31468999c7ef69f424a2b8271969833df2android-build-team Robot_LIBCPP_END_NAMESPACE_STD 619