diff --git a/.gitignore b/.gitignore
index 25bace6..76e63b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -63,7 +63,7 @@ bld/
[Bb]uild/
!data/**/[Bb]in/
-!external/**/[Bb]in/
+!external/**/
# Visual Studio 2015 cache/options directory
.vs/
diff --git a/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/assertions.h b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/assertions.h
new file mode 100644
index 0000000..e34061e
--- /dev/null
+++ b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/assertions.h
@@ -0,0 +1,70 @@
+// Debugging support implementation -*- C++ -*-
+
+// Copyright (C) 2003-2021 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// .
+
+/** @file debug/assertions.h
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_ASSERTIONS_H
+#define _GLIBCXX_DEBUG_ASSERTIONS_H 1
+
+#include
+
+#ifndef _GLIBCXX_DEBUG
+
+# define _GLIBCXX_DEBUG_ASSERT(_Condition)
+# define _GLIBCXX_DEBUG_PEDASSERT(_Condition)
+# define _GLIBCXX_DEBUG_ONLY(_Statement)
+
+#endif
+
+#ifndef _GLIBCXX_ASSERTIONS
+# define __glibcxx_requires_non_empty_range(_First,_Last)
+# define __glibcxx_requires_nonempty()
+# define __glibcxx_requires_subscript(_N)
+#else
+
+// Verify that [_First, _Last) forms a non-empty iterator range.
+# define __glibcxx_requires_non_empty_range(_First,_Last) \
+ __glibcxx_assert(_First != _Last)
+# define __glibcxx_requires_subscript(_N) \
+ __glibcxx_assert(_N < this->size())
+// Verify that the container is nonempty
+# define __glibcxx_requires_nonempty() \
+ __glibcxx_assert(!this->empty())
+#endif
+
+#ifdef _GLIBCXX_DEBUG
+# define _GLIBCXX_DEBUG_ASSERT(_Condition) __glibcxx_assert(_Condition)
+
+# ifdef _GLIBCXX_DEBUG_PEDANTIC
+# define _GLIBCXX_DEBUG_PEDASSERT(_Condition) _GLIBCXX_DEBUG_ASSERT(_Condition)
+# else
+# define _GLIBCXX_DEBUG_PEDASSERT(_Condition)
+# endif
+
+# define _GLIBCXX_DEBUG_ONLY(_Statement) _Statement
+#endif
+
+#endif // _GLIBCXX_DEBUG_ASSERTIONS
diff --git a/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/bitset b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/bitset
new file mode 100644
index 0000000..782785c
--- /dev/null
+++ b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/bitset
@@ -0,0 +1,429 @@
+// Debugging bitset implementation -*- C++ -*-
+
+// Copyright (C) 2003-2021 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// .
+
+/** @file debug/bitset
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_BITSET
+#define _GLIBCXX_DEBUG_BITSET
+
+#pragma GCC system_header
+
+#include
+#include
+#include
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+namespace __debug
+{
+ /// Class std::bitset with additional safety/checking/debug instrumentation.
+ template
+ class bitset
+ : public _GLIBCXX_STD_C::bitset<_Nb>
+#if __cplusplus < 201103L
+ , public __gnu_debug::_Safe_sequence_base
+#endif
+ {
+ typedef _GLIBCXX_STD_C::bitset<_Nb> _Base;
+
+ public:
+ // In C++11 we rely on normal reference type to preserve the property
+ // of bitset to be use as a literal.
+ // TODO: Find another solution.
+#if __cplusplus >= 201103L
+ typedef typename _Base::reference reference;
+#else
+ // bit reference:
+ class reference
+ : private _Base::reference
+ , public __gnu_debug::_Safe_iterator_base
+ {
+ typedef typename _Base::reference _Base_ref;
+
+ friend class bitset;
+ reference();
+
+ reference(const _Base_ref& __base, bitset* __seq) _GLIBCXX_NOEXCEPT
+ : _Base_ref(__base)
+ , _Safe_iterator_base(__seq, false)
+ { }
+
+ public:
+ reference(const reference& __x) _GLIBCXX_NOEXCEPT
+ : _Base_ref(__x)
+ , _Safe_iterator_base(__x, false)
+ { }
+
+ reference&
+ operator=(bool __x) _GLIBCXX_NOEXCEPT
+ {
+ _GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
+ _M_message(__gnu_debug::__msg_bad_bitset_write)
+ ._M_iterator(*this));
+ *static_cast<_Base_ref*>(this) = __x;
+ return *this;
+ }
+
+ reference&
+ operator=(const reference& __x) _GLIBCXX_NOEXCEPT
+ {
+ _GLIBCXX_DEBUG_VERIFY(!__x._M_singular(),
+ _M_message(__gnu_debug::__msg_bad_bitset_read)
+ ._M_iterator(__x));
+ _GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
+ _M_message(__gnu_debug::__msg_bad_bitset_write)
+ ._M_iterator(*this));
+ *static_cast<_Base_ref*>(this) = __x;
+ return *this;
+ }
+
+ bool
+ operator~() const _GLIBCXX_NOEXCEPT
+ {
+ _GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
+ _M_message(__gnu_debug::__msg_bad_bitset_read)
+ ._M_iterator(*this));
+ return ~(*static_cast(this));
+ }
+
+ operator bool() const _GLIBCXX_NOEXCEPT
+ {
+ _GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
+ _M_message(__gnu_debug::__msg_bad_bitset_read)
+ ._M_iterator(*this));
+ return *static_cast(this);
+ }
+
+ reference&
+ flip() _GLIBCXX_NOEXCEPT
+ {
+ _GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
+ _M_message(__gnu_debug::__msg_bad_bitset_flip)
+ ._M_iterator(*this));
+ _Base_ref::flip();
+ return *this;
+ }
+ };
+#endif
+
+ // 23.3.5.1 constructors:
+ _GLIBCXX_CONSTEXPR bitset() _GLIBCXX_NOEXCEPT
+ : _Base() { }
+
+#if __cplusplus >= 201103L
+ constexpr bitset(unsigned long long __val) noexcept
+#else
+ bitset(unsigned long __val)
+#endif
+ : _Base(__val) { }
+
+ template
+ explicit
+ bitset(const std::basic_string<_CharT, _Traits, _Alloc>& __str,
+ typename std::basic_string<_CharT, _Traits, _Alloc>::size_type
+ __pos = 0,
+ typename std::basic_string<_CharT, _Traits, _Alloc>::size_type
+ __n = (std::basic_string<_CharT, _Traits, _Alloc>::npos))
+ : _Base(__str, __pos, __n) { }
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 396. what are characters zero and one.
+ template
+ bitset(const std::basic_string<_CharT, _Traits, _Alloc>& __str,
+ typename std::basic_string<_CharT, _Traits, _Alloc>::size_type
+ __pos,
+ typename std::basic_string<_CharT, _Traits, _Alloc>::size_type
+ __n,
+ _CharT __zero, _CharT __one = _CharT('1'))
+ : _Base(__str, __pos, __n, __zero, __one) { }
+
+ bitset(const _Base& __x) : _Base(__x) { }
+
+#if __cplusplus >= 201103L
+ template
+ explicit
+ bitset(const _CharT* __str,
+ typename std::basic_string<_CharT>::size_type __n
+ = std::basic_string<_CharT>::npos,
+ _CharT __zero = _CharT('0'), _CharT __one = _CharT('1'))
+ : _Base(__str, __n, __zero, __one) { }
+#endif
+
+ // 23.3.5.2 bitset operations:
+ bitset<_Nb>&
+ operator&=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
+ {
+ _M_base() &= __rhs;
+ return *this;
+ }
+
+ bitset<_Nb>&
+ operator|=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
+ {
+ _M_base() |= __rhs;
+ return *this;
+ }
+
+ bitset<_Nb>&
+ operator^=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
+ {
+ _M_base() ^= __rhs;
+ return *this;
+ }
+
+ bitset<_Nb>&
+ operator<<=(size_t __pos) _GLIBCXX_NOEXCEPT
+ {
+ _M_base() <<= __pos;
+ return *this;
+ }
+
+ bitset<_Nb>&
+ operator>>=(size_t __pos) _GLIBCXX_NOEXCEPT
+ {
+ _M_base() >>= __pos;
+ return *this;
+ }
+
+ bitset<_Nb>&
+ set() _GLIBCXX_NOEXCEPT
+ {
+ _Base::set();
+ return *this;
+ }
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 186. bitset::set() second parameter should be bool
+ bitset<_Nb>&
+ set(size_t __pos, bool __val = true)
+ {
+ _Base::set(__pos, __val);
+ return *this;
+ }
+
+ bitset<_Nb>&
+ reset() _GLIBCXX_NOEXCEPT
+ {
+ _Base::reset();
+ return *this;
+ }
+
+ bitset<_Nb>&
+ reset(size_t __pos)
+ {
+ _Base::reset(__pos);
+ return *this;
+ }
+
+ bitset<_Nb>
+ operator~() const _GLIBCXX_NOEXCEPT
+ { return bitset(~_M_base()); }
+
+ bitset<_Nb>&
+ flip() _GLIBCXX_NOEXCEPT
+ {
+ _Base::flip();
+ return *this;
+ }
+
+ bitset<_Nb>&
+ flip(size_t __pos)
+ {
+ _Base::flip(__pos);
+ return *this;
+ }
+
+ // element access:
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 11. Bitset minor problems
+ reference
+ operator[](size_t __pos)
+ {
+ __glibcxx_check_subscript(__pos);
+#if __cplusplus >= 201103L
+ return _M_base()[__pos];
+#else
+ return reference(_M_base()[__pos], this);
+#endif
+ }
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 11. Bitset minor problems
+ _GLIBCXX_CONSTEXPR bool
+ operator[](size_t __pos) const
+ {
+#if __cplusplus < 201103L
+ // TODO: Check in debug-mode too.
+ __glibcxx_check_subscript(__pos);
+#endif
+ return _Base::operator[](__pos);
+ }
+
+ using _Base::to_ulong;
+#if __cplusplus >= 201103L
+ using _Base::to_ullong;
+#endif
+
+ template
+ std::basic_string<_CharT, _Traits, _Alloc>
+ to_string() const
+ { return _M_base().template to_string<_CharT, _Traits, _Alloc>(); }
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 396. what are characters zero and one.
+ template
+ std::basic_string<_CharT, _Traits, _Alloc>
+ to_string(_CharT __zero, _CharT __one = _CharT('1')) const
+ {
+ return _M_base().template
+ to_string<_CharT, _Traits, _Alloc>(__zero, __one);
+ }
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 434. bitset::to_string() hard to use.
+ template
+ std::basic_string<_CharT, _Traits, std::allocator<_CharT> >
+ to_string() const
+ { return to_string<_CharT, _Traits, std::allocator<_CharT> >(); }
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 853. to_string needs updating with zero and one.
+ template
+ std::basic_string<_CharT, _Traits, std::allocator<_CharT> >
+ to_string(_CharT __zero, _CharT __one = _CharT('1')) const
+ { return to_string<_CharT, _Traits,
+ std::allocator<_CharT> >(__zero, __one); }
+
+ template
+ std::basic_string<_CharT, std::char_traits<_CharT>,
+ std::allocator<_CharT> >
+ to_string() const
+ {
+ return to_string<_CharT, std::char_traits<_CharT>,
+ std::allocator<_CharT> >();
+ }
+
+ template
+ std::basic_string<_CharT, std::char_traits<_CharT>,
+ std::allocator<_CharT> >
+ to_string(_CharT __zero, _CharT __one = _CharT('1')) const
+ {
+ return to_string<_CharT, std::char_traits<_CharT>,
+ std::allocator<_CharT> >(__zero, __one);
+ }
+
+ std::basic_string, std::allocator >
+ to_string() const
+ {
+ return to_string,std::allocator >();
+ }
+
+ std::basic_string, std::allocator >
+ to_string(char __zero, char __one = '1') const
+ {
+ return to_string,
+ std::allocator >(__zero, __one);
+ }
+
+ using _Base::count;
+ using _Base::size;
+
+ bool
+ operator==(const bitset<_Nb>& __rhs) const _GLIBCXX_NOEXCEPT
+ { return _M_base() == __rhs._M_base(); }
+
+#if __cpp_impl_three_way_comparison < 201907L
+ bool
+ operator!=(const bitset<_Nb>& __rhs) const _GLIBCXX_NOEXCEPT
+ { return _M_base() != __rhs._M_base(); }
+#endif
+
+ using _Base::test;
+ using _Base::all;
+ using _Base::any;
+ using _Base::none;
+
+ bitset<_Nb>
+ operator<<(size_t __pos) const _GLIBCXX_NOEXCEPT
+ { return bitset<_Nb>(_M_base() << __pos); }
+
+ bitset<_Nb>
+ operator>>(size_t __pos) const _GLIBCXX_NOEXCEPT
+ { return bitset<_Nb>(_M_base() >> __pos); }
+
+ _Base&
+ _M_base() _GLIBCXX_NOEXCEPT
+ { return *this; }
+
+ const _Base&
+ _M_base() const _GLIBCXX_NOEXCEPT
+ { return *this; }
+ };
+
+ template
+ bitset<_Nb>
+ operator&(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
+ { return bitset<_Nb>(__x) &= __y; }
+
+ template
+ bitset<_Nb>
+ operator|(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
+ { return bitset<_Nb>(__x) |= __y; }
+
+ template
+ bitset<_Nb>
+ operator^(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
+ { return bitset<_Nb>(__x) ^= __y; }
+
+ template
+ std::basic_istream<_CharT, _Traits>&
+ operator>>(std::basic_istream<_CharT, _Traits>& __is, bitset<_Nb>& __x)
+ { return __is >> __x._M_base(); }
+
+ template
+ std::basic_ostream<_CharT, _Traits>&
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const bitset<_Nb>& __x)
+ { return __os << __x._M_base(); }
+
+} // namespace __debug
+
+#if __cplusplus >= 201103L
+ // DR 1182.
+ /// std::hash specialization for bitset.
+ template
+ struct hash<__debug::bitset<_Nb>>
+ : public __hash_base>
+ {
+ size_t
+ operator()(const __debug::bitset<_Nb>& __b) const noexcept
+ { return std::hash<_GLIBCXX_STD_C::bitset<_Nb>>()(__b._M_base()); }
+ };
+#endif
+
+} // namespace std
+
+#endif
diff --git a/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/debug.h b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/debug.h
new file mode 100644
index 0000000..116f2f0
--- /dev/null
+++ b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/debug.h
@@ -0,0 +1,137 @@
+// Debugging support implementation -*- C++ -*-
+
+// Copyright (C) 2003-2021 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// .
+
+/** @file debug/debug.h
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_MACRO_SWITCH_H
+#define _GLIBCXX_DEBUG_MACRO_SWITCH_H 1
+
+/** Macros and namespaces used by the implementation outside of debug
+ * wrappers to verify certain properties. The __glibcxx_requires_xxx
+ * macros are merely wrappers around the __glibcxx_check_xxx wrappers
+ * when we are compiling with debug mode, but disappear when we are
+ * in release mode so that there is no checking performed in, e.g.,
+ * the standard library algorithms.
+*/
+
+#include
+
+// Debug mode namespaces.
+
+/**
+ * @namespace std::__debug
+ * @brief GNU debug code, replaces standard behavior with debug behavior.
+ */
+namespace std
+{
+ namespace __debug { }
+}
+
+/** @namespace __gnu_debug
+ * @brief GNU debug classes for public use.
+*/
+namespace __gnu_debug
+{
+ using namespace std::__debug;
+
+ template
+ struct _Safe_iterator;
+}
+
+#ifndef _GLIBCXX_DEBUG
+
+# define __glibcxx_requires_cond(_Cond,_Msg)
+# define __glibcxx_requires_valid_range(_First,_Last)
+# define __glibcxx_requires_can_increment(_First,_Size)
+# define __glibcxx_requires_can_increment_range(_First1,_Last1,_First2)
+# define __glibcxx_requires_can_decrement_range(_First1,_Last1,_First2)
+# define __glibcxx_requires_sorted(_First,_Last)
+# define __glibcxx_requires_sorted_pred(_First,_Last,_Pred)
+# define __glibcxx_requires_sorted_set(_First1,_Last1,_First2)
+# define __glibcxx_requires_sorted_set_pred(_First1,_Last1,_First2,_Pred)
+# define __glibcxx_requires_partitioned_lower(_First,_Last,_Value)
+# define __glibcxx_requires_partitioned_upper(_First,_Last,_Value)
+# define __glibcxx_requires_partitioned_lower_pred(_First,_Last,_Value,_Pred)
+# define __glibcxx_requires_partitioned_upper_pred(_First,_Last,_Value,_Pred)
+# define __glibcxx_requires_heap(_First,_Last)
+# define __glibcxx_requires_heap_pred(_First,_Last,_Pred)
+# define __glibcxx_requires_string(_String)
+# define __glibcxx_requires_string_len(_String,_Len)
+# define __glibcxx_requires_irreflexive(_First,_Last)
+# define __glibcxx_requires_irreflexive2(_First,_Last)
+# define __glibcxx_requires_irreflexive_pred(_First,_Last,_Pred)
+# define __glibcxx_requires_irreflexive_pred2(_First,_Last,_Pred)
+
+#else
+
+# include
+
+# define __glibcxx_requires_cond(_Cond,_Msg) _GLIBCXX_DEBUG_VERIFY(_Cond,_Msg)
+# define __glibcxx_requires_valid_range(_First,_Last) \
+ __glibcxx_check_valid_range(_First,_Last)
+# define __glibcxx_requires_can_increment(_First,_Size) \
+ __glibcxx_check_can_increment(_First,_Size)
+# define __glibcxx_requires_can_increment_range(_First1,_Last1,_First2) \
+ __glibcxx_check_can_increment_range(_First1,_Last1,_First2)
+# define __glibcxx_requires_can_decrement_range(_First1,_Last1,_First2) \
+ __glibcxx_check_can_decrement_range(_First1,_Last1,_First2)
+# define __glibcxx_requires_sorted(_First,_Last) \
+ __glibcxx_check_sorted(_First,_Last)
+# define __glibcxx_requires_sorted_pred(_First,_Last,_Pred) \
+ __glibcxx_check_sorted_pred(_First,_Last,_Pred)
+# define __glibcxx_requires_sorted_set(_First1,_Last1,_First2) \
+ __glibcxx_check_sorted_set(_First1,_Last1,_First2)
+# define __glibcxx_requires_sorted_set_pred(_First1,_Last1,_First2,_Pred) \
+ __glibcxx_check_sorted_set_pred(_First1,_Last1,_First2,_Pred)
+# define __glibcxx_requires_partitioned_lower(_First,_Last,_Value) \
+ __glibcxx_check_partitioned_lower(_First,_Last,_Value)
+# define __glibcxx_requires_partitioned_upper(_First,_Last,_Value) \
+ __glibcxx_check_partitioned_upper(_First,_Last,_Value)
+# define __glibcxx_requires_partitioned_lower_pred(_First,_Last,_Value,_Pred) \
+ __glibcxx_check_partitioned_lower_pred(_First,_Last,_Value,_Pred)
+# define __glibcxx_requires_partitioned_upper_pred(_First,_Last,_Value,_Pred) \
+ __glibcxx_check_partitioned_upper_pred(_First,_Last,_Value,_Pred)
+# define __glibcxx_requires_heap(_First,_Last) \
+ __glibcxx_check_heap(_First,_Last)
+# define __glibcxx_requires_heap_pred(_First,_Last,_Pred) \
+ __glibcxx_check_heap_pred(_First,_Last,_Pred)
+# define __glibcxx_requires_string(_String) __glibcxx_check_string(_String)
+# define __glibcxx_requires_string_len(_String,_Len) \
+ __glibcxx_check_string_len(_String,_Len)
+# define __glibcxx_requires_irreflexive(_First,_Last) \
+ __glibcxx_check_irreflexive(_First,_Last)
+# define __glibcxx_requires_irreflexive2(_First,_Last) \
+ __glibcxx_check_irreflexive2(_First,_Last)
+# define __glibcxx_requires_irreflexive_pred(_First,_Last,_Pred) \
+ __glibcxx_check_irreflexive_pred(_First,_Last,_Pred)
+# define __glibcxx_requires_irreflexive_pred2(_First,_Last,_Pred) \
+ __glibcxx_check_irreflexive_pred2(_First,_Last,_Pred)
+
+# include
+
+#endif
+
+#endif // _GLIBCXX_DEBUG_MACRO_SWITCH_H
diff --git a/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/deque b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/deque
new file mode 100644
index 0000000..227d083
--- /dev/null
+++ b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/deque
@@ -0,0 +1,707 @@
+// Debugging deque implementation -*- C++ -*-
+
+// Copyright (C) 2003-2021 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// .
+
+/** @file debug/deque
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_DEQUE
+#define _GLIBCXX_DEBUG_DEQUE 1
+
+#pragma GCC system_header
+
+#include
+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {
+ template class deque;
+} } // namespace std::__debug
+
+#include
+#include
+#include
+#include
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+namespace __debug
+{
+ /// Class std::deque with safety/checking/debug instrumentation.
+ template >
+ class deque
+ : public __gnu_debug::_Safe_container<
+ deque<_Tp, _Allocator>, _Allocator,
+ __gnu_debug::_Safe_sequence>,
+ public _GLIBCXX_STD_C::deque<_Tp, _Allocator>
+ {
+ typedef _GLIBCXX_STD_C::deque<_Tp, _Allocator> _Base;
+ typedef __gnu_debug::_Safe_container<
+ deque, _Allocator, __gnu_debug::_Safe_sequence> _Safe;
+
+ typedef typename _Base::const_iterator _Base_const_iterator;
+ typedef typename _Base::iterator _Base_iterator;
+ typedef __gnu_debug::_Equal_to<_Base_const_iterator> _Equal;
+
+ template
+ friend class ::__gnu_debug::_Safe_iterator;
+
+ // Reference wrapper for base class. Disambiguates deque(const _Base&)
+ // from copy constructor by requiring a user-defined conversion.
+ // See PR libstdc++/90102.
+ struct _Base_ref
+ {
+ _Base_ref(const _Base& __r) : _M_ref(__r) { }
+
+ const _Base& _M_ref;
+ };
+
+ public:
+ typedef typename _Base::reference reference;
+ typedef typename _Base::const_reference const_reference;
+
+ typedef __gnu_debug::_Safe_iterator<_Base_iterator, deque>
+ iterator;
+ typedef __gnu_debug::_Safe_iterator<_Base_const_iterator, deque>
+ const_iterator;
+
+ typedef typename _Base::size_type size_type;
+ typedef typename _Base::difference_type difference_type;
+
+ typedef _Tp value_type;
+ typedef _Allocator allocator_type;
+ typedef typename _Base::pointer pointer;
+ typedef typename _Base::const_pointer const_pointer;
+ typedef std::reverse_iterator reverse_iterator;
+ typedef std::reverse_iterator const_reverse_iterator;
+
+ // 23.2.1.1 construct/copy/destroy:
+
+#if __cplusplus < 201103L
+ deque()
+ : _Base() { }
+
+ deque(const deque& __x)
+ : _Base(__x) { }
+
+ ~deque() { }
+#else
+ deque() = default;
+ deque(const deque&) = default;
+ deque(deque&&) = default;
+
+ deque(const deque& __d, const _Allocator& __a)
+ : _Base(__d, __a) { }
+
+ deque(deque&& __d, const _Allocator& __a)
+ : _Safe(std::move(__d)), _Base(std::move(__d), __a) { }
+
+ deque(initializer_list __l,
+ const allocator_type& __a = allocator_type())
+ : _Base(__l, __a) { }
+
+ ~deque() = default;
+#endif
+
+ explicit
+ deque(const _Allocator& __a)
+ : _Base(__a) { }
+
+#if __cplusplus >= 201103L
+ explicit
+ deque(size_type __n, const _Allocator& __a = _Allocator())
+ : _Base(__n, __a) { }
+
+ deque(size_type __n, const _Tp& __value,
+ const _Allocator& __a = _Allocator())
+ : _Base(__n, __value, __a) { }
+#else
+ explicit
+ deque(size_type __n, const _Tp& __value = _Tp(),
+ const _Allocator& __a = _Allocator())
+ : _Base(__n, __value, __a) { }
+#endif
+
+#if __cplusplus >= 201103L
+ template>
+#else
+ template
+#endif
+ deque(_InputIterator __first, _InputIterator __last,
+ const _Allocator& __a = _Allocator())
+ : _Base(__gnu_debug::__base(
+ __glibcxx_check_valid_constructor_range(__first, __last)),
+ __gnu_debug::__base(__last), __a)
+ { }
+
+ deque(_Base_ref __x)
+ : _Base(__x._M_ref) { }
+
+#if __cplusplus < 201103L
+ deque&
+ operator=(const deque& __x)
+ {
+ this->_M_safe() = __x;
+ _M_base() = __x;
+ return *this;
+ }
+#else
+ deque&
+ operator=(const deque&) = default;
+
+ deque&
+ operator=(deque&&) = default;
+
+ deque&
+ operator=(initializer_list __l)
+ {
+ _M_base() = __l;
+ this->_M_invalidate_all();
+ return *this;
+ }
+#endif
+
+#if __cplusplus >= 201103L
+ template>
+#else
+ template
+#endif
+ void
+ assign(_InputIterator __first, _InputIterator __last)
+ {
+ typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;
+ __glibcxx_check_valid_range2(__first, __last, __dist);
+ if (__dist.second >= __gnu_debug::__dp_sign)
+ _Base::assign(__gnu_debug::__unsafe(__first),
+ __gnu_debug::__unsafe(__last));
+ else
+ _Base::assign(__first, __last);
+
+ this->_M_invalidate_all();
+ }
+
+ void
+ assign(size_type __n, const _Tp& __t)
+ {
+ _Base::assign(__n, __t);
+ this->_M_invalidate_all();
+ }
+
+#if __cplusplus >= 201103L
+ void
+ assign(initializer_list __l)
+ {
+ _Base::assign(__l);
+ this->_M_invalidate_all();
+ }
+#endif
+
+ using _Base::get_allocator;
+
+ // iterators:
+ iterator
+ begin() _GLIBCXX_NOEXCEPT
+ { return iterator(_Base::begin(), this); }
+
+ const_iterator
+ begin() const _GLIBCXX_NOEXCEPT
+ { return const_iterator(_Base::begin(), this); }
+
+ iterator
+ end() _GLIBCXX_NOEXCEPT
+ { return iterator(_Base::end(), this); }
+
+ const_iterator
+ end() const _GLIBCXX_NOEXCEPT
+ { return const_iterator(_Base::end(), this); }
+
+ reverse_iterator
+ rbegin() _GLIBCXX_NOEXCEPT
+ { return reverse_iterator(end()); }
+
+ const_reverse_iterator
+ rbegin() const _GLIBCXX_NOEXCEPT
+ { return const_reverse_iterator(end()); }
+
+ reverse_iterator
+ rend() _GLIBCXX_NOEXCEPT
+ { return reverse_iterator(begin()); }
+
+ const_reverse_iterator
+ rend() const _GLIBCXX_NOEXCEPT
+ { return const_reverse_iterator(begin()); }
+
+#if __cplusplus >= 201103L
+ const_iterator
+ cbegin() const noexcept
+ { return const_iterator(_Base::begin(), this); }
+
+ const_iterator
+ cend() const noexcept
+ { return const_iterator(_Base::end(), this); }
+
+ const_reverse_iterator
+ crbegin() const noexcept
+ { return const_reverse_iterator(end()); }
+
+ const_reverse_iterator
+ crend() const noexcept
+ { return const_reverse_iterator(begin()); }
+#endif
+
+ private:
+ void
+ _M_invalidate_after_nth(difference_type __n)
+ {
+ typedef __gnu_debug::_After_nth_from<_Base_const_iterator> _After_nth;
+ this->_M_invalidate_if(_After_nth(__n, _Base::begin()));
+ }
+
+ public:
+ // 23.2.1.2 capacity:
+ using _Base::size;
+ using _Base::max_size;
+
+#if __cplusplus >= 201103L
+ void
+ resize(size_type __sz)
+ {
+ bool __invalidate_all = __sz > this->size();
+ if (__sz < this->size())
+ this->_M_invalidate_after_nth(__sz);
+
+ _Base::resize(__sz);
+
+ if (__invalidate_all)
+ this->_M_invalidate_all();
+ }
+
+ void
+ resize(size_type __sz, const _Tp& __c)
+ {
+ bool __invalidate_all = __sz > this->size();
+ if (__sz < this->size())
+ this->_M_invalidate_after_nth(__sz);
+
+ _Base::resize(__sz, __c);
+
+ if (__invalidate_all)
+ this->_M_invalidate_all();
+ }
+#else
+ void
+ resize(size_type __sz, _Tp __c = _Tp())
+ {
+ bool __invalidate_all = __sz > this->size();
+ if (__sz < this->size())
+ this->_M_invalidate_after_nth(__sz);
+
+ _Base::resize(__sz, __c);
+
+ if (__invalidate_all)
+ this->_M_invalidate_all();
+ }
+#endif
+
+#if __cplusplus >= 201103L
+ void
+ shrink_to_fit() noexcept
+ {
+ if (_Base::_M_shrink_to_fit())
+ this->_M_invalidate_all();
+ }
+#endif
+
+ using _Base::empty;
+
+ // element access:
+ reference
+ operator[](size_type __n) _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_subscript(__n);
+ return _M_base()[__n];
+ }
+
+ const_reference
+ operator[](size_type __n) const _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_subscript(__n);
+ return _M_base()[__n];
+ }
+
+ using _Base::at;
+
+ reference
+ front() _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_nonempty();
+ return _Base::front();
+ }
+
+ const_reference
+ front() const _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_nonempty();
+ return _Base::front();
+ }
+
+ reference
+ back() _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_nonempty();
+ return _Base::back();
+ }
+
+ const_reference
+ back() const _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_nonempty();
+ return _Base::back();
+ }
+
+ // 23.2.1.3 modifiers:
+ void
+ push_front(const _Tp& __x)
+ {
+ _Base::push_front(__x);
+ this->_M_invalidate_all();
+ }
+
+ void
+ push_back(const _Tp& __x)
+ {
+ _Base::push_back(__x);
+ this->_M_invalidate_all();
+ }
+
+#if __cplusplus >= 201103L
+ void
+ push_front(_Tp&& __x)
+ { emplace_front(std::move(__x)); }
+
+ void
+ push_back(_Tp&& __x)
+ { emplace_back(std::move(__x)); }
+
+ template
+#if __cplusplus > 201402L
+ reference
+#else
+ void
+#endif
+ emplace_front(_Args&&... __args)
+ {
+ _Base::emplace_front(std::forward<_Args>(__args)...);
+ this->_M_invalidate_all();
+#if __cplusplus > 201402L
+ return front();
+#endif
+ }
+
+ template
+#if __cplusplus > 201402L
+ reference
+#else
+ void
+#endif
+ emplace_back(_Args&&... __args)
+ {
+ _Base::emplace_back(std::forward<_Args>(__args)...);
+ this->_M_invalidate_all();
+#if __cplusplus > 201402L
+ return back();
+#endif
+ }
+
+ template
+ iterator
+ emplace(const_iterator __position, _Args&&... __args)
+ {
+ __glibcxx_check_insert(__position);
+ _Base_iterator __res = _Base::emplace(__position.base(),
+ std::forward<_Args>(__args)...);
+ this->_M_invalidate_all();
+ return iterator(__res, this);
+ }
+#endif
+
+ iterator
+#if __cplusplus >= 201103L
+ insert(const_iterator __position, const _Tp& __x)
+#else
+ insert(iterator __position, const _Tp& __x)
+#endif
+ {
+ __glibcxx_check_insert(__position);
+ _Base_iterator __res = _Base::insert(__position.base(), __x);
+ this->_M_invalidate_all();
+ return iterator(__res, this);
+ }
+
+#if __cplusplus >= 201103L
+ iterator
+ insert(const_iterator __position, _Tp&& __x)
+ { return emplace(__position, std::move(__x)); }
+
+ iterator
+ insert(const_iterator __position, initializer_list __l)
+ {
+ __glibcxx_check_insert(__position);
+ _Base_iterator __res = _Base::insert(__position.base(), __l);
+ this->_M_invalidate_all();
+ return iterator(__res, this);
+ }
+#endif
+
+#if __cplusplus >= 201103L
+ iterator
+ insert(const_iterator __position, size_type __n, const _Tp& __x)
+ {
+ __glibcxx_check_insert(__position);
+ _Base_iterator __res = _Base::insert(__position.base(), __n, __x);
+ this->_M_invalidate_all();
+ return iterator(__res, this);
+ }
+#else
+ void
+ insert(iterator __position, size_type __n, const _Tp& __x)
+ {
+ __glibcxx_check_insert(__position);
+ _Base::insert(__position.base(), __n, __x);
+ this->_M_invalidate_all();
+ }
+#endif
+
+#if __cplusplus >= 201103L
+ template>
+ iterator
+ insert(const_iterator __position,
+ _InputIterator __first, _InputIterator __last)
+ {
+ typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;
+ __glibcxx_check_insert_range(__position, __first, __last, __dist);
+ _Base_iterator __res;
+ if (__dist.second >= __gnu_debug::__dp_sign)
+ __res = _Base::insert(__position.base(),
+ __gnu_debug::__unsafe(__first),
+ __gnu_debug::__unsafe(__last));
+ else
+ __res = _Base::insert(__position.base(), __first, __last);
+
+ this->_M_invalidate_all();
+ return iterator(__res, this);
+ }
+#else
+ template
+ void
+ insert(iterator __position,
+ _InputIterator __first, _InputIterator __last)
+ {
+ typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;
+ __glibcxx_check_insert_range(__position, __first, __last, __dist);
+
+ if (__dist.second >= __gnu_debug::__dp_sign)
+ _Base::insert(__position.base(),
+ __gnu_debug::__unsafe(__first),
+ __gnu_debug::__unsafe(__last));
+ else
+ _Base::insert(__position.base(), __first, __last);
+
+ this->_M_invalidate_all();
+ }
+#endif
+
+ void
+ pop_front() _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_nonempty();
+ this->_M_invalidate_if(_Equal(_Base::begin()));
+ _Base::pop_front();
+ }
+
+ void
+ pop_back() _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_nonempty();
+ this->_M_invalidate_if(_Equal(--_Base::end()));
+ _Base::pop_back();
+ }
+
+ iterator
+#if __cplusplus >= 201103L
+ erase(const_iterator __position)
+#else
+ erase(iterator __position)
+#endif
+ {
+ __glibcxx_check_erase(__position);
+#if __cplusplus >= 201103L
+ _Base_const_iterator __victim = __position.base();
+#else
+ _Base_iterator __victim = __position.base();
+#endif
+ if (__victim == _Base::begin() || __victim == _Base::end() - 1)
+ {
+ this->_M_invalidate_if(_Equal(__victim));
+ return iterator(_Base::erase(__victim), this);
+ }
+ else
+ {
+ _Base_iterator __res = _Base::erase(__victim);
+ this->_M_invalidate_all();
+ return iterator(__res, this);
+ }
+ }
+
+ iterator
+#if __cplusplus >= 201103L
+ erase(const_iterator __first, const_iterator __last)
+#else
+ erase(iterator __first, iterator __last)
+#endif
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 151. can't currently clear() empty container
+ __glibcxx_check_erase_range(__first, __last);
+
+ if (__first.base() == __last.base())
+#if __cplusplus >= 201103L
+ return iterator(__first.base()._M_const_cast(), this);
+#else
+ return __first;
+#endif
+ else if (__first.base() == _Base::begin()
+ || __last.base() == _Base::end())
+ {
+ this->_M_detach_singular();
+ for (_Base_const_iterator __position = __first.base();
+ __position != __last.base(); ++__position)
+ {
+ this->_M_invalidate_if(_Equal(__position));
+ }
+ __try
+ {
+ return iterator(_Base::erase(__first.base(), __last.base()),
+ this);
+ }
+ __catch(...)
+ {
+ this->_M_revalidate_singular();
+ __throw_exception_again;
+ }
+ }
+ else
+ {
+ _Base_iterator __res = _Base::erase(__first.base(),
+ __last.base());
+ this->_M_invalidate_all();
+ return iterator(__res, this);
+ }
+ }
+
+ void
+ swap(deque& __x)
+ _GLIBCXX_NOEXCEPT_IF( noexcept(declval<_Base&>().swap(__x)) )
+ {
+ _Safe::_M_swap(__x);
+ _Base::swap(__x);
+ }
+
+ void
+ clear() _GLIBCXX_NOEXCEPT
+ {
+ _Base::clear();
+ this->_M_invalidate_all();
+ }
+
+ _Base&
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
+
+ const _Base&
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
+ };
+
+#if __cpp_deduction_guides >= 201606
+ template::value_type,
+ typename _Allocator = allocator<_ValT>,
+ typename = _RequireInputIter<_InputIterator>,
+ typename = _RequireAllocator<_Allocator>>
+ deque(_InputIterator, _InputIterator, _Allocator = _Allocator())
+ -> deque<_ValT, _Allocator>;
+#endif
+
+ template
+ inline bool
+ operator==(const deque<_Tp, _Alloc>& __lhs,
+ const deque<_Tp, _Alloc>& __rhs)
+ { return __lhs._M_base() == __rhs._M_base(); }
+
+#if __cpp_lib_three_way_comparison
+ template
+ constexpr __detail::__synth3way_t<_Tp>
+ operator<=>(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y)
+ { return __x._M_base() <=> __y._M_base(); }
+#else
+ template
+ inline bool
+ operator!=(const deque<_Tp, _Alloc>& __lhs,
+ const deque<_Tp, _Alloc>& __rhs)
+ { return __lhs._M_base() != __rhs._M_base(); }
+
+ template
+ inline bool
+ operator<(const deque<_Tp, _Alloc>& __lhs,
+ const deque<_Tp, _Alloc>& __rhs)
+ { return __lhs._M_base() < __rhs._M_base(); }
+
+ template
+ inline bool
+ operator<=(const deque<_Tp, _Alloc>& __lhs,
+ const deque<_Tp, _Alloc>& __rhs)
+ { return __lhs._M_base() <= __rhs._M_base(); }
+
+ template
+ inline bool
+ operator>=(const deque<_Tp, _Alloc>& __lhs,
+ const deque<_Tp, _Alloc>& __rhs)
+ { return __lhs._M_base() >= __rhs._M_base(); }
+
+ template
+ inline bool
+ operator>(const deque<_Tp, _Alloc>& __lhs,
+ const deque<_Tp, _Alloc>& __rhs)
+ { return __lhs._M_base() > __rhs._M_base(); }
+#endif // three-way comparison
+
+ template
+ inline void
+ swap(deque<_Tp, _Alloc>& __lhs, deque<_Tp, _Alloc>& __rhs)
+ _GLIBCXX_NOEXCEPT_IF(noexcept(__lhs.swap(__rhs)))
+ { __lhs.swap(__rhs); }
+
+} // namespace __debug
+} // namespace std
+
+#endif
diff --git a/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/formatter.h b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/formatter.h
new file mode 100644
index 0000000..7140fed
--- /dev/null
+++ b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/formatter.h
@@ -0,0 +1,594 @@
+// Debug-mode error formatting implementation -*- C++ -*-
+
+// Copyright (C) 2003-2021 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// .
+
+/** @file debug/formatter.h
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_FORMATTER_H
+#define _GLIBCXX_DEBUG_FORMATTER_H 1
+
+#include
+
+#if __cpp_rtti
+# include
+# define _GLIBCXX_TYPEID(_Type) &typeid(_Type)
+#else
+namespace std
+{
+ class type_info;
+}
+# define _GLIBCXX_TYPEID(_Type) 0
+#endif
+
+#if __cplusplus >= 201103L
+namespace __gnu_cxx
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+template
+ class __normal_iterator;
+
+_GLIBCXX_END_NAMESPACE_VERSION
+}
+
+namespace std
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+template
+ class reverse_iterator;
+
+template
+ class move_iterator;
+
+_GLIBCXX_END_NAMESPACE_VERSION
+}
+#endif
+
+namespace __gnu_debug
+{
+ using std::type_info;
+
+ template
+ _GLIBCXX_CONSTEXPR
+ bool __check_singular(_Iterator const&);
+
+ class _Safe_sequence_base;
+
+ template
+ class _Safe_iterator;
+
+ template
+ class _Safe_local_iterator;
+
+ template
+ class _Safe_sequence;
+
+ enum _Debug_msg_id
+ {
+ // General checks
+ __msg_valid_range,
+ __msg_insert_singular,
+ __msg_insert_different,
+ __msg_erase_bad,
+ __msg_erase_different,
+ __msg_subscript_oob,
+ __msg_empty,
+ __msg_unpartitioned,
+ __msg_unpartitioned_pred,
+ __msg_unsorted,
+ __msg_unsorted_pred,
+ __msg_not_heap,
+ __msg_not_heap_pred,
+ // std::bitset checks
+ __msg_bad_bitset_write,
+ __msg_bad_bitset_read,
+ __msg_bad_bitset_flip,
+ // std::list checks
+ __msg_self_splice,
+ __msg_splice_alloc,
+ __msg_splice_bad,
+ __msg_splice_other,
+ __msg_splice_overlap,
+ // iterator checks
+ __msg_init_singular,
+ __msg_init_copy_singular,
+ __msg_init_const_singular,
+ __msg_copy_singular,
+ __msg_bad_deref,
+ __msg_bad_inc,
+ __msg_bad_dec,
+ __msg_iter_subscript_oob,
+ __msg_advance_oob,
+ __msg_retreat_oob,
+ __msg_iter_compare_bad,
+ __msg_compare_different,
+ __msg_iter_order_bad,
+ __msg_order_different,
+ __msg_distance_bad,
+ __msg_distance_different,
+ // istream_iterator
+ __msg_deref_istream,
+ __msg_inc_istream,
+ // ostream_iterator
+ __msg_output_ostream,
+ // istreambuf_iterator
+ __msg_deref_istreambuf,
+ __msg_inc_istreambuf,
+ // forward_list
+ __msg_insert_after_end,
+ __msg_erase_after_bad,
+ __msg_valid_range2,
+ // unordered container local iterators
+ __msg_local_iter_compare_bad,
+ __msg_non_empty_range,
+ // self move assign (no longer used)
+ __msg_self_move_assign,
+ // unordered container buckets
+ __msg_bucket_index_oob,
+ __msg_valid_load_factor,
+ // others
+ __msg_equal_allocs,
+ __msg_insert_range_from_self,
+ __msg_irreflexive_ordering
+ };
+
+ class _Error_formatter
+ {
+ // Tags denoting the type of parameter for construction
+ struct _Is_iterator { };
+ struct _Is_iterator_value_type { };
+ struct _Is_sequence { };
+ struct _Is_instance { };
+
+ public:
+ /// Whether an iterator is constant, mutable, or unknown
+ enum _Constness
+ {
+ __unknown_constness,
+ __const_iterator,
+ __mutable_iterator,
+ __last_constness
+ };
+
+ // The state of the iterator (fine-grained), if we know it.
+ enum _Iterator_state
+ {
+ __unknown_state,
+ __singular, // singular, may still be attached to a sequence
+ __begin, // dereferenceable, and at the beginning
+ __middle, // dereferenceable, not at the beginning
+ __end, // past-the-end, may be at beginning if sequence empty
+ __before_begin, // before begin
+ __rbegin, // dereferenceable, and at the reverse-beginning
+ __rmiddle, // reverse-dereferenceable, not at the reverse-beginning
+ __rend, // reverse-past-the-end
+ __last_state
+ };
+
+ // A parameter that may be referenced by an error message
+ struct _Parameter
+ {
+ enum
+ {
+ __unused_param,
+ __iterator,
+ __sequence,
+ __integer,
+ __string,
+ __instance,
+ __iterator_value_type
+ } _M_kind;
+
+ struct _Type
+ {
+ const char* _M_name;
+ const type_info* _M_type;
+ };
+
+ struct _Instance : _Type
+ {
+ const void* _M_address;
+ };
+
+ union
+ {
+ // When _M_kind == __iterator
+ struct : _Instance
+ {
+ _Constness _M_constness;
+ _Iterator_state _M_state;
+ const void* _M_sequence;
+ const type_info* _M_seq_type;
+ } _M_iterator;
+
+ // When _M_kind == __sequence
+ _Instance _M_sequence;
+
+ // When _M_kind == __integer
+ struct
+ {
+ const char* _M_name;
+ long _M_value;
+ } _M_integer;
+
+ // When _M_kind == __string
+ struct
+ {
+ const char* _M_name;
+ const char* _M_value;
+ } _M_string;
+
+ // When _M_kind == __instance
+ _Instance _M_instance;
+
+ // When _M_kind == __iterator_value_type
+ _Type _M_iterator_value_type;
+ } _M_variant;
+
+ _Parameter() : _M_kind(__unused_param), _M_variant() { }
+
+ _Parameter(long __value, const char* __name)
+ : _M_kind(__integer), _M_variant()
+ {
+ _M_variant._M_integer._M_name = __name;
+ _M_variant._M_integer._M_value = __value;
+ }
+
+ _Parameter(const char* __value, const char* __name)
+ : _M_kind(__string), _M_variant()
+ {
+ _M_variant._M_string._M_name = __name;
+ _M_variant._M_string._M_value = __value;
+ }
+
+ template
+ _Parameter(_Safe_iterator<_Iterator, _Sequence, _Category> const& __it,
+ const char* __name, _Is_iterator)
+ : _M_kind(__iterator), _M_variant()
+ {
+ _M_variant._M_iterator._M_name = __name;
+ _M_variant._M_iterator._M_address = std::__addressof(__it);
+ _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(_Iterator);
+ _M_variant._M_iterator._M_constness =
+ __it._S_constant() ? __const_iterator : __mutable_iterator;
+ _M_variant._M_iterator._M_sequence = __it._M_get_sequence();
+ _M_variant._M_iterator._M_seq_type = _GLIBCXX_TYPEID(_Sequence);
+
+ if (__it._M_singular())
+ _M_variant._M_iterator._M_state = __singular;
+ else
+ {
+ if (__it._M_is_before_begin())
+ _M_variant._M_iterator._M_state = __before_begin;
+ else if (__it._M_is_end())
+ _M_variant._M_iterator._M_state = __end;
+ else if (__it._M_is_begin())
+ _M_variant._M_iterator._M_state = __begin;
+ else
+ _M_variant._M_iterator._M_state = __middle;
+ }
+ }
+
+ template
+ _Parameter(_Safe_local_iterator<_Iterator, _Sequence> const& __it,
+ const char* __name, _Is_iterator)
+ : _M_kind(__iterator), _M_variant()
+ {
+ _M_variant._M_iterator._M_name = __name;
+ _M_variant._M_iterator._M_address = std::__addressof(__it);
+ _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(_Iterator);
+ _M_variant._M_iterator._M_constness =
+ __it._S_constant() ? __const_iterator : __mutable_iterator;
+ _M_variant._M_iterator._M_sequence = __it._M_get_sequence();
+ _M_variant._M_iterator._M_seq_type = _GLIBCXX_TYPEID(_Sequence);
+
+ if (__it._M_singular())
+ _M_variant._M_iterator._M_state = __singular;
+ else
+ {
+ if (__it._M_is_end())
+ _M_variant._M_iterator._M_state = __end;
+ else if (__it._M_is_begin())
+ _M_variant._M_iterator._M_state = __begin;
+ else
+ _M_variant._M_iterator._M_state = __middle;
+ }
+ }
+
+ template
+ _Parameter(const _Type* const& __it, const char* __name, _Is_iterator)
+ : _M_kind(__iterator), _M_variant()
+ {
+ _M_variant._M_iterator._M_name = __name;
+ _M_variant._M_iterator._M_address = std::__addressof(__it);
+ _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it);
+ _M_variant._M_iterator._M_constness = __const_iterator;
+ _M_variant._M_iterator._M_state = __it ? __unknown_state : __singular;
+ _M_variant._M_iterator._M_sequence = 0;
+ _M_variant._M_iterator._M_seq_type = 0;
+ }
+
+ template
+ _Parameter(_Type* const& __it, const char* __name, _Is_iterator)
+ : _M_kind(__iterator), _M_variant()
+ {
+ _M_variant._M_iterator._M_name = __name;
+ _M_variant._M_iterator._M_address = std::__addressof(__it);
+ _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it);
+ _M_variant._M_iterator._M_constness = __mutable_iterator;
+ _M_variant._M_iterator._M_state = __it ? __unknown_state : __singular;
+ _M_variant._M_iterator._M_sequence = 0;
+ _M_variant._M_iterator._M_seq_type = 0;
+ }
+
+ template
+ _Parameter(_Iterator const& __it, const char* __name, _Is_iterator)
+ : _M_kind(__iterator), _M_variant()
+ {
+ _M_variant._M_iterator._M_name = __name;
+ _M_variant._M_iterator._M_address = std::__addressof(__it);
+ _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it);
+ _M_variant._M_iterator._M_constness = __unknown_constness;
+ _M_variant._M_iterator._M_state =
+ __gnu_debug::__check_singular(__it) ? __singular : __unknown_state;
+ _M_variant._M_iterator._M_sequence = 0;
+ _M_variant._M_iterator._M_seq_type = 0;
+ }
+
+#if __cplusplus >= 201103L
+ // The following constructors are only defined in C++11 to take
+ // advantage of the constructor delegation feature.
+ template
+ _Parameter(
+ __gnu_cxx::__normal_iterator<_Iterator, _Container> const& __it,
+ const char* __name, _Is_iterator)
+ : _Parameter(__it.base(), __name, _Is_iterator{})
+ { _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it); }
+
+ template
+ _Parameter(std::reverse_iterator<_Iterator> const& __it,
+ const char* __name, _Is_iterator)
+ : _Parameter(__it.base(), __name, _Is_iterator{})
+ {
+ _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it);
+ _M_variant._M_iterator._M_state
+ = _S_reverse_state(_M_variant._M_iterator._M_state);
+ }
+
+ template
+ _Parameter(std::reverse_iterator<_Safe_iterator<_Iterator, _Sequence,
+ _Category>> const& __it,
+ const char* __name, _Is_iterator)
+ : _Parameter(__it.base(), __name, _Is_iterator{})
+ {
+ _M_variant._M_iterator._M_type
+ = _GLIBCXX_TYPEID(std::reverse_iterator<_Iterator>);
+ _M_variant._M_iterator._M_state
+ = _S_reverse_state(_M_variant._M_iterator._M_state);
+ }
+
+ template
+ _Parameter(std::move_iterator<_Iterator> const& __it,
+ const char* __name, _Is_iterator)
+ : _Parameter(__it.base(), __name, _Is_iterator{})
+ { _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it); }
+
+ template
+ _Parameter(std::move_iterator<_Safe_iterator<_Iterator, _Sequence,
+ _Category>> const& __it,
+ const char* __name, _Is_iterator)
+ : _Parameter(__it.base(), __name, _Is_iterator{})
+ {
+ _M_variant._M_iterator._M_type
+ = _GLIBCXX_TYPEID(std::move_iterator<_Iterator>);
+ }
+
+ private:
+ _Iterator_state
+ _S_reverse_state(_Iterator_state __state)
+ {
+ switch (__state)
+ {
+ case __begin:
+ return __rend;
+ case __middle:
+ return __rmiddle;
+ case __end:
+ return __rbegin;
+ default:
+ return __state;
+ }
+ }
+
+ public:
+#endif
+
+ template
+ _Parameter(const _Safe_sequence<_Sequence>& __seq,
+ const char* __name, _Is_sequence)
+ : _M_kind(__sequence), _M_variant()
+ {
+ _M_variant._M_sequence._M_name = __name;
+ _M_variant._M_sequence._M_address =
+ static_cast(std::__addressof(__seq));
+ _M_variant._M_sequence._M_type = _GLIBCXX_TYPEID(_Sequence);
+ }
+
+ template
+ _Parameter(const _Sequence& __seq, const char* __name, _Is_sequence)
+ : _M_kind(__sequence), _M_variant()
+ {
+ _M_variant._M_sequence._M_name = __name;
+ _M_variant._M_sequence._M_address = std::__addressof(__seq);
+ _M_variant._M_sequence._M_type = _GLIBCXX_TYPEID(_Sequence);
+ }
+
+ template
+ _Parameter(const _Iterator& __it, const char* __name,
+ _Is_iterator_value_type)
+ : _M_kind(__iterator_value_type), _M_variant()
+ {
+ _M_variant._M_iterator_value_type._M_name = __name;
+ _M_variant._M_iterator_value_type._M_type =
+ _GLIBCXX_TYPEID(typename std::iterator_traits<_Iterator>::value_type);
+ }
+
+ template
+ _Parameter(const _Type& __inst, const char* __name, _Is_instance)
+ : _M_kind(__instance), _M_variant()
+ {
+ _M_variant._M_instance._M_name = __name;
+ _M_variant._M_instance._M_address = &__inst;
+ _M_variant._M_instance._M_type = _GLIBCXX_TYPEID(_Type);
+ }
+
+#if !_GLIBCXX_INLINE_VERSION
+ void
+ _M_print_field(const _Error_formatter* __formatter,
+ const char* __name) const _GLIBCXX_DEPRECATED;
+
+ void
+ _M_print_description(const _Error_formatter* __formatter)
+ const _GLIBCXX_DEPRECATED;
+#endif
+ };
+
+ template
+ _Error_formatter&
+ _M_iterator(const _Iterator& __it, const char* __name = 0)
+ {
+ if (_M_num_parameters < std::size_t(__max_parameters))
+ _M_parameters[_M_num_parameters++] = _Parameter(__it, __name,
+ _Is_iterator());
+ return *this;
+ }
+
+ template
+ _Error_formatter&
+ _M_iterator_value_type(const _Iterator& __it,
+ const char* __name = 0)
+ {
+ if (_M_num_parameters < __max_parameters)
+ _M_parameters[_M_num_parameters++] =
+ _Parameter(__it, __name, _Is_iterator_value_type());
+ return *this;
+ }
+
+ _Error_formatter&
+ _M_integer(long __value, const char* __name = 0)
+ {
+ if (_M_num_parameters < __max_parameters)
+ _M_parameters[_M_num_parameters++] = _Parameter(__value, __name);
+ return *this;
+ }
+
+ _Error_formatter&
+ _M_string(const char* __value, const char* __name = 0)
+ {
+ if (_M_num_parameters < __max_parameters)
+ _M_parameters[_M_num_parameters++] = _Parameter(__value, __name);
+ return *this;
+ }
+
+ template
+ _Error_formatter&
+ _M_sequence(const _Sequence& __seq, const char* __name = 0)
+ {
+ if (_M_num_parameters < __max_parameters)
+ _M_parameters[_M_num_parameters++] = _Parameter(__seq, __name,
+ _Is_sequence());
+ return *this;
+ }
+
+ template
+ _Error_formatter&
+ _M_instance(const _Type& __inst, const char* __name = 0)
+ {
+ if (_M_num_parameters < __max_parameters)
+ _M_parameters[_M_num_parameters++] = _Parameter(__inst, __name,
+ _Is_instance());
+ return *this;
+ }
+
+ _Error_formatter&
+ _M_message(const char* __text)
+ { _M_text = __text; return *this; }
+
+ // Kept const qualifier for backward compatibility, to keep the same
+ // exported symbol.
+ _Error_formatter&
+ _M_message(_Debug_msg_id __id) const throw ();
+
+ _GLIBCXX_NORETURN void
+ _M_error() const;
+
+#if !_GLIBCXX_INLINE_VERSION
+ template
+ void
+ _M_format_word(char*, int, const char*, _Tp)
+ const throw () _GLIBCXX_DEPRECATED;
+
+ void
+ _M_print_word(const char* __word) const _GLIBCXX_DEPRECATED;
+
+ void
+ _M_print_string(const char* __string) const _GLIBCXX_DEPRECATED;
+#endif
+
+ private:
+ _Error_formatter(const char* __file, unsigned int __line,
+ const char* __function)
+ : _M_file(__file), _M_line(__line), _M_num_parameters(0), _M_text(0)
+ , _M_function(__function)
+ { }
+
+#if !_GLIBCXX_INLINE_VERSION
+ void
+ _M_get_max_length() const throw () _GLIBCXX_DEPRECATED;
+#endif
+
+ enum { __max_parameters = 9 };
+
+ const char* _M_file;
+ unsigned int _M_line;
+ _Parameter _M_parameters[__max_parameters];
+ unsigned int _M_num_parameters;
+ const char* _M_text;
+ const char* _M_function;
+
+ public:
+ static _Error_formatter&
+ _S_at(const char* __file, unsigned int __line, const char* __function)
+ {
+ static _Error_formatter __formatter(__file, __line, __function);
+ return __formatter;
+ }
+ };
+} // namespace __gnu_debug
+
+#undef _GLIBCXX_TYPEID
+
+#endif
diff --git a/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/forward_list b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/forward_list
new file mode 100644
index 0000000..16f0531
--- /dev/null
+++ b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/forward_list
@@ -0,0 +1,947 @@
+// -*- C++ -*-
+
+// Copyright (C) 2010-2021 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// .
+
+/** @file debug/forward_list
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_FORWARD_LIST
+#define _GLIBCXX_DEBUG_FORWARD_LIST 1
+
+#pragma GCC system_header
+
+#include
+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {
+ template class forward_list;
+} } // namespace std::__debug
+
+#include
+#include
+#include
+#include
+
+// Special validity check for forward_list ranges.
+#define __glibcxx_check_valid_fl_range(_First,_Last,_Dist) \
+_GLIBCXX_DEBUG_VERIFY(_First._M_valid_range(_Last, _Dist, false), \
+ _M_message(__gnu_debug::__msg_valid_range) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last))
+
+namespace __gnu_debug
+{
+ /// Special iterators swap and invalidation for forward_list because of the
+ /// before_begin iterator.
+ template
+ class _Safe_forward_list
+ : public _Safe_sequence<_SafeSequence>
+ {
+ _SafeSequence&
+ _M_this() noexcept
+ { return *static_cast<_SafeSequence*>(this); }
+
+ static void
+ _M_swap_aux(_Safe_sequence_base& __lhs,
+ _Safe_iterator_base*& __lhs_iterators,
+ _Safe_sequence_base& __rhs,
+ _Safe_iterator_base*& __rhs_iterators);
+
+ void _M_swap_single(_Safe_sequence_base&) noexcept;
+
+ protected:
+ void
+ _M_invalidate_all()
+ {
+ using _Base_const_iterator = __decltype(_M_this()._M_base().cend());
+ this->_M_invalidate_if([this](_Base_const_iterator __it)
+ {
+ return __it != _M_this()._M_base().cbefore_begin()
+ && __it != _M_this()._M_base().cend(); });
+ }
+
+ void _M_swap(_Safe_sequence_base&) noexcept;
+ };
+
+ template
+ void
+ _Safe_forward_list<_SafeSequence>::
+ _M_swap_aux(_Safe_sequence_base& __lhs,
+ _Safe_iterator_base*& __lhs_iterators,
+ _Safe_sequence_base& __rhs,
+ _Safe_iterator_base*& __rhs_iterators)
+ {
+ using const_iterator = typename _SafeSequence::const_iterator;
+ _Safe_iterator_base* __bbegin_its = 0;
+ _Safe_iterator_base* __last_bbegin = 0;
+ _SafeSequence& __rseq = static_cast<_SafeSequence&>(__rhs);
+
+ for (_Safe_iterator_base* __iter = __lhs_iterators; __iter;)
+ {
+ // Even iterator is cast to const_iterator, not a problem.
+ _Safe_iterator_base* __victim_base = __iter;
+ const_iterator* __victim =
+ static_cast(__victim_base);
+ __iter = __iter->_M_next;
+ if (__victim->base() == __rseq._M_base().cbefore_begin())
+ {
+ __victim->_M_unlink();
+ if (__lhs_iterators == __victim_base)
+ __lhs_iterators = __victim_base->_M_next;
+ if (__bbegin_its)
+ {
+ __victim_base->_M_next = __bbegin_its;
+ __bbegin_its->_M_prior = __victim_base;
+ }
+ else
+ __last_bbegin = __victim_base;
+ __bbegin_its = __victim_base;
+ }
+ else
+ __victim_base->_M_sequence = std::__addressof(__lhs);
+ }
+
+ if (__bbegin_its)
+ {
+ if (__rhs_iterators)
+ {
+ __rhs_iterators->_M_prior = __last_bbegin;
+ __last_bbegin->_M_next = __rhs_iterators;
+ }
+ __rhs_iterators = __bbegin_its;
+ }
+ }
+
+ template
+ void
+ _Safe_forward_list<_SafeSequence>::
+ _M_swap_single(_Safe_sequence_base& __other) noexcept
+ {
+ std::swap(_M_this()._M_iterators, __other._M_iterators);
+ std::swap(_M_this()._M_const_iterators, __other._M_const_iterators);
+ // Useless, always 1 on forward_list
+ //std::swap(_M_this()_M_version, __other._M_version);
+ _Safe_iterator_base* __this_its = _M_this()._M_iterators;
+ _M_swap_aux(__other, __other._M_iterators,
+ _M_this(), _M_this()._M_iterators);
+ _Safe_iterator_base* __this_const_its = _M_this()._M_const_iterators;
+ _M_swap_aux(__other, __other._M_const_iterators,
+ _M_this(), _M_this()._M_const_iterators);
+ _M_swap_aux(_M_this(), __this_its,
+ __other, __other._M_iterators);
+ _M_swap_aux(_M_this(), __this_const_its,
+ __other, __other._M_const_iterators);
+ }
+
+ /* Special forward_list _M_swap version that does not swap the
+ * before-begin ownership.*/
+ template
+ void
+ _Safe_forward_list<_SafeSequence>::
+ _M_swap(_Safe_sequence_base& __other) noexcept
+ {
+ // We need to lock both sequences to swap
+ using namespace __gnu_cxx;
+ __mutex *__this_mutex = &_M_this()._M_get_mutex();
+ __mutex *__other_mutex =
+ &static_cast<_SafeSequence&>(__other)._M_get_mutex();
+ if (__this_mutex == __other_mutex)
+ {
+ __scoped_lock __lock(*__this_mutex);
+ _M_swap_single(__other);
+ }
+ else
+ {
+ __scoped_lock __l1(__this_mutex < __other_mutex
+ ? *__this_mutex : *__other_mutex);
+ __scoped_lock __l2(__this_mutex < __other_mutex
+ ? *__other_mutex : *__this_mutex);
+ _M_swap_single(__other);
+ }
+ }
+}
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+namespace __debug
+{
+ /// Class std::forward_list with safety/checking/debug instrumentation.
+ template >
+ class forward_list
+ : public __gnu_debug::_Safe_container<
+ forward_list<_Tp, _Alloc>, _Alloc, __gnu_debug::_Safe_forward_list>,
+ public _GLIBCXX_STD_C::forward_list<_Tp, _Alloc>
+ {
+ typedef _GLIBCXX_STD_C::forward_list<_Tp, _Alloc> _Base;
+ typedef __gnu_debug::_Safe_container<
+ forward_list, _Alloc, __gnu_debug::_Safe_forward_list> _Safe;
+
+ typedef typename _Base::iterator _Base_iterator;
+ typedef typename _Base::const_iterator _Base_const_iterator;
+
+ template
+ friend class ::__gnu_debug::_Safe_iterator;
+
+ // Reference wrapper for base class. See PR libstdc++/90102.
+ struct _Base_ref
+ {
+ _Base_ref(const _Base& __r) : _M_ref(__r) { }
+
+ const _Base& _M_ref;
+ };
+
+ public:
+ typedef typename _Base::reference reference;
+ typedef typename _Base::const_reference const_reference;
+
+ typedef __gnu_debug::_Safe_iterator<
+ _Base_iterator, forward_list> iterator;
+ typedef __gnu_debug::_Safe_iterator<
+ _Base_const_iterator, forward_list> const_iterator;
+
+ typedef typename _Base::size_type size_type;
+ typedef typename _Base::difference_type difference_type;
+
+ typedef _Tp value_type;
+ typedef typename _Base::allocator_type allocator_type;
+ typedef typename _Base::pointer pointer;
+ typedef typename _Base::const_pointer const_pointer;
+
+ // 23.2.3.1 construct/copy/destroy:
+
+ forward_list() = default;
+
+ explicit
+ forward_list(const allocator_type& __al) noexcept
+ : _Base(__al) { }
+
+ forward_list(const forward_list& __list, const allocator_type& __al)
+ : _Base(__list, __al)
+ { }
+
+ forward_list(forward_list&& __list, const allocator_type& __al)
+ noexcept(
+ std::is_nothrow_constructible<_Base,
+ _Base, const allocator_type&>::value )
+ : _Safe(std::move(__list._M_safe()), __al),
+ _Base(std::move(__list._M_base()), __al)
+ { }
+
+ explicit
+ forward_list(size_type __n, const allocator_type& __al = allocator_type())
+ : _Base(__n, __al)
+ { }
+
+ forward_list(size_type __n, const _Tp& __value,
+ const allocator_type& __al = allocator_type())
+ : _Base(__n, __value, __al)
+ { }
+
+ template>
+ forward_list(_InputIterator __first, _InputIterator __last,
+ const allocator_type& __al = allocator_type())
+ : _Base(__gnu_debug::__base(
+ __glibcxx_check_valid_constructor_range(__first, __last)),
+ __gnu_debug::__base(__last), __al)
+ { }
+
+ forward_list(const forward_list&) = default;
+
+ forward_list(forward_list&&) = default;
+
+ forward_list(std::initializer_list<_Tp> __il,
+ const allocator_type& __al = allocator_type())
+ : _Base(__il, __al)
+ { }
+
+ ~forward_list() = default;
+
+ forward_list(_Base_ref __x) : _Base(__x._M_ref) { }
+
+ forward_list&
+ operator=(const forward_list&) = default;
+
+ forward_list&
+ operator=(forward_list&&) = default;
+
+ forward_list&
+ operator=(std::initializer_list<_Tp> __il)
+ {
+ _M_base() = __il;
+ this->_M_invalidate_all();
+ return *this;
+ }
+
+ template>
+ void
+ assign(_InputIterator __first, _InputIterator __last)
+ {
+ typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;
+ __glibcxx_check_valid_range2(__first, __last, __dist);
+
+ if (__dist.second >= __gnu_debug::__dp_sign)
+ _Base::assign(__gnu_debug::__unsafe(__first),
+ __gnu_debug::__unsafe(__last));
+ else
+ _Base::assign(__first, __last);
+
+ this->_M_invalidate_all();
+ }
+
+ void
+ assign(size_type __n, const _Tp& __val)
+ {
+ _Base::assign(__n, __val);
+ this->_M_invalidate_all();
+ }
+
+ void
+ assign(std::initializer_list<_Tp> __il)
+ {
+ _Base::assign(__il);
+ this->_M_invalidate_all();
+ }
+
+ using _Base::get_allocator;
+
+ // iterators:
+
+ iterator
+ before_begin() noexcept
+ { return { _Base::before_begin(), this }; }
+
+ const_iterator
+ before_begin() const noexcept
+ { return { _Base::before_begin(), this }; }
+
+ iterator
+ begin() noexcept
+ { return { _Base::begin(), this }; }
+
+ const_iterator
+ begin() const noexcept
+ { return { _Base::begin(), this }; }
+
+ iterator
+ end() noexcept
+ { return { _Base::end(), this }; }
+
+ const_iterator
+ end() const noexcept
+ { return { _Base::end(), this }; }
+
+ const_iterator
+ cbegin() const noexcept
+ { return { _Base::cbegin(), this }; }
+
+ const_iterator
+ cbefore_begin() const noexcept
+ { return { _Base::cbefore_begin(), this }; }
+
+ const_iterator
+ cend() const noexcept
+ { return { _Base::cend(), this }; }
+
+ using _Base::empty;
+ using _Base::max_size;
+
+ // element access:
+
+ reference
+ front()
+ {
+ __glibcxx_check_nonempty();
+ return _Base::front();
+ }
+
+ const_reference
+ front() const
+ {
+ __glibcxx_check_nonempty();
+ return _Base::front();
+ }
+
+ // modifiers:
+
+ using _Base::emplace_front;
+ using _Base::push_front;
+
+ void
+ pop_front()
+ {
+ __glibcxx_check_nonempty();
+ this->_M_invalidate_if([this](_Base_const_iterator __it)
+ { return __it == this->_M_base().cbegin(); });
+ _Base::pop_front();
+ }
+
+ template
+ iterator
+ emplace_after(const_iterator __pos, _Args&&... __args)
+ {
+ __glibcxx_check_insert_after(__pos);
+ return { _Base::emplace_after(__pos.base(),
+ std::forward<_Args>(__args)...),
+ this };
+ }
+
+ iterator
+ insert_after(const_iterator __pos, const _Tp& __val)
+ {
+ __glibcxx_check_insert_after(__pos);
+ return { _Base::insert_after(__pos.base(), __val), this };
+ }
+
+ iterator
+ insert_after(const_iterator __pos, _Tp&& __val)
+ {
+ __glibcxx_check_insert_after(__pos);
+ return { _Base::insert_after(__pos.base(), std::move(__val)), this };
+ }
+
+ iterator
+ insert_after(const_iterator __pos, size_type __n, const _Tp& __val)
+ {
+ __glibcxx_check_insert_after(__pos);
+ return { _Base::insert_after(__pos.base(), __n, __val), this };
+ }
+
+ template>
+ iterator
+ insert_after(const_iterator __pos,
+ _InputIterator __first, _InputIterator __last)
+ {
+ typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;
+ __glibcxx_check_insert_range_after(__pos, __first, __last, __dist);
+
+ if (__dist.second >= __gnu_debug::__dp_sign)
+ return
+ {
+ _Base::insert_after(__pos.base(),
+ __gnu_debug::__unsafe(__first),
+ __gnu_debug::__unsafe(__last)),
+ this
+ };
+ else
+ return { _Base::insert_after(__pos.base(), __first, __last), this };
+ }
+
+ iterator
+ insert_after(const_iterator __pos, std::initializer_list<_Tp> __il)
+ {
+ __glibcxx_check_insert_after(__pos);
+ return { _Base::insert_after(__pos.base(), __il), this };
+ }
+
+ iterator
+ erase_after(const_iterator __pos)
+ {
+ __glibcxx_check_erase_after(__pos);
+
+ _Base_const_iterator __next = std::next(__pos.base());
+ this->_M_invalidate_if([__next](_Base_const_iterator __it)
+ { return __it == __next; });
+ return { _Base::erase_after(__pos.base()), this };
+ }
+
+ iterator
+ erase_after(const_iterator __pos, const_iterator __last)
+ {
+ __glibcxx_check_erase_range_after(__pos, __last);
+ for (_Base_const_iterator __victim = std::next(__pos.base());
+ __victim != __last.base(); ++__victim)
+ {
+ _GLIBCXX_DEBUG_VERIFY(__victim != _Base::cend(),
+ _M_message(__gnu_debug::__msg_valid_range2)
+ ._M_sequence(*this, "this")
+ ._M_iterator(__pos, "pos")
+ ._M_iterator(__last, "last"));
+ this->_M_invalidate_if([__victim](_Base_const_iterator __it)
+ { return __it == __victim; });
+ }
+
+ return { _Base::erase_after(__pos.base(), __last.base()), this };
+ }
+
+ void
+ swap(forward_list& __list)
+ noexcept( noexcept(declval<_Base&>().swap(__list)) )
+ {
+ _Safe::_M_swap(__list);
+ _Base::swap(__list);
+ }
+
+ void
+ resize(size_type __sz)
+ {
+ this->_M_detach_singular();
+
+ // if __sz < size(), invalidate all iterators in [begin+__sz, end()
+ _Base_iterator __victim = _Base::begin();
+ _Base_iterator __end = _Base::end();
+ for (size_type __i = __sz; __victim != __end && __i > 0; --__i)
+ ++__victim;
+
+ for (; __victim != __end; ++__victim)
+ {
+ this->_M_invalidate_if([__victim](_Base_const_iterator __it)
+ { return __it == __victim; });
+ }
+
+ __try
+ {
+ _Base::resize(__sz);
+ }
+ __catch(...)
+ {
+ this->_M_revalidate_singular();
+ __throw_exception_again;
+ }
+ }
+
+ void
+ resize(size_type __sz, const value_type& __val)
+ {
+ this->_M_detach_singular();
+
+ // if __sz < size(), invalidate all iterators in [begin+__sz, end())
+ _Base_iterator __victim = _Base::begin();
+ _Base_iterator __end = _Base::end();
+ for (size_type __i = __sz; __victim != __end && __i > 0; --__i)
+ ++__victim;
+
+ for (; __victim != __end; ++__victim)
+ {
+ this->_M_invalidate_if([__victim](_Base_const_iterator __it)
+ { return __it == __victim; });
+ }
+
+ __try
+ {
+ _Base::resize(__sz, __val);
+ }
+ __catch(...)
+ {
+ this->_M_revalidate_singular();
+ __throw_exception_again;
+ }
+ }
+
+ void
+ clear() noexcept
+ {
+ _Base::clear();
+ this->_M_invalidate_all();
+ }
+
+ // 23.2.3.5 forward_list operations:
+ void
+ splice_after(const_iterator __pos, forward_list&& __list)
+ {
+ __glibcxx_check_insert_after(__pos);
+ _GLIBCXX_DEBUG_VERIFY(std::__addressof(__list) != this,
+ _M_message(__gnu_debug::__msg_self_splice)
+ ._M_sequence(*this, "this"));
+ _GLIBCXX_DEBUG_VERIFY(__list.get_allocator() == this->get_allocator(),
+ _M_message(__gnu_debug::__msg_splice_alloc)
+ ._M_sequence(*this)
+ ._M_sequence(__list, "__list"));
+ this->_M_transfer_from_if(__list, [&__list](_Base_const_iterator __it)
+ {
+ return __it != __list._M_base().cbefore_begin()
+ && __it != __list._M_base().end();
+ });
+ _Base::splice_after(__pos.base(), std::move(__list._M_base()));
+ }
+
+ void
+ splice_after(const_iterator __pos, forward_list& __list)
+ { splice_after(__pos, std::move(__list)); }
+
+ void
+ splice_after(const_iterator __pos, forward_list&& __list,
+ const_iterator __i)
+ {
+ __glibcxx_check_insert_after(__pos);
+ _GLIBCXX_DEBUG_VERIFY(__i._M_before_dereferenceable(),
+ _M_message(__gnu_debug::__msg_splice_bad)
+ ._M_iterator(__i, "__i"));
+ _GLIBCXX_DEBUG_VERIFY(__i._M_attached_to(std::__addressof(__list)),
+ _M_message(__gnu_debug::__msg_splice_other)
+ ._M_iterator(__i, "__i")
+ ._M_sequence(__list, "__list"));
+ _GLIBCXX_DEBUG_VERIFY(__list.get_allocator() == this->get_allocator(),
+ _M_message(__gnu_debug::__msg_splice_alloc)
+ ._M_sequence(*this)
+ ._M_sequence(__list, "__list"));
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 250. splicing invalidates iterators
+ _Base_const_iterator __next = std::next(__i.base());
+ this->_M_transfer_from_if(__list, [__next](_Base_const_iterator __it)
+ { return __it == __next; });
+ _Base::splice_after(__pos.base(), std::move(__list._M_base()),
+ __i.base());
+ }
+
+ void
+ splice_after(const_iterator __pos, forward_list& __list,
+ const_iterator __i)
+ { splice_after(__pos, std::move(__list), __i); }
+
+ void
+ splice_after(const_iterator __pos, forward_list&& __list,
+ const_iterator __before, const_iterator __last)
+ {
+ typename __gnu_debug::_Distance_traits::__type __dist;
+ auto __listptr = std::__addressof(__list);
+ __glibcxx_check_insert_after(__pos);
+ __glibcxx_check_valid_fl_range(__before, __last, __dist);
+ _GLIBCXX_DEBUG_VERIFY(__before._M_attached_to(__listptr),
+ _M_message(__gnu_debug::__msg_splice_other)
+ ._M_sequence(__list, "list")
+ ._M_iterator(__before, "before"));
+ _GLIBCXX_DEBUG_VERIFY(__before._M_dereferenceable()
+ || __before._M_is_before_begin(),
+ _M_message(__gnu_debug::__msg_valid_range2)
+ ._M_sequence(__list, "list")
+ ._M_iterator(__before, "before")
+ ._M_iterator(__last, "last"));
+ _GLIBCXX_DEBUG_VERIFY(__before != __last,
+ _M_message(__gnu_debug::__msg_valid_range2)
+ ._M_sequence(__list, "list")
+ ._M_iterator(__before, "before")
+ ._M_iterator(__last, "last"));
+ _GLIBCXX_DEBUG_VERIFY(__list.get_allocator() == this->get_allocator(),
+ _M_message(__gnu_debug::__msg_splice_alloc)
+ ._M_sequence(*this)
+ ._M_sequence(__list, "__list"));
+
+ for (_Base_const_iterator __tmp = std::next(__before.base());
+ __tmp != __last.base(); ++__tmp)
+ {
+ _GLIBCXX_DEBUG_VERIFY(__tmp != __list._M_base().end(),
+ _M_message(__gnu_debug::__msg_valid_range2)
+ ._M_sequence(__list, "list")
+ ._M_iterator(__before, "before")
+ ._M_iterator(__last, "last"));
+ _GLIBCXX_DEBUG_VERIFY(__listptr != this || __tmp != __pos.base(),
+ _M_message(__gnu_debug::__msg_splice_overlap)
+ ._M_iterator(__tmp, "position")
+ ._M_iterator(__before, "before")
+ ._M_iterator(__last, "last"));
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 250. splicing invalidates iterators
+ this->_M_transfer_from_if(__list, [__tmp](_Base_const_iterator __it)
+ { return __it == __tmp; });
+ }
+
+ _Base::splice_after(__pos.base(), std::move(__list._M_base()),
+ __before.base(), __last.base());
+ }
+
+ void
+ splice_after(const_iterator __pos, forward_list& __list,
+ const_iterator __before, const_iterator __last)
+ { splice_after(__pos, std::move(__list), __before, __last); }
+
+ private:
+#if __cplusplus > 201703L
+ using __remove_return_type = size_type;
+# define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG \
+ __attribute__((__abi_tag__("__cxx20")))
+# define _GLIBCXX20_ONLY(__expr) __expr
+#else
+ using __remove_return_type = void;
+# define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
+# define _GLIBCXX20_ONLY(__expr)
+#endif
+
+ public:
+ _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
+ __remove_return_type
+ remove(const _Tp& __val)
+ {
+ if (!this->_M_iterators && !this->_M_const_iterators)
+ return _Base::remove(__val);
+
+ size_type __removed __attribute__((__unused__)) = 0;
+ _Base __to_destroy(get_allocator());
+ _Base_const_iterator __x = _Base::cbefore_begin();
+ _Base_const_iterator __old = __x++;
+ while (__x != _Base::cend())
+ {
+ if (*__x == __val)
+ {
+ _Base_const_iterator __next = std::next(__old);
+ this->_M_invalidate_if([__next](_Base_const_iterator __it)
+ { return __it == __next; });
+ __to_destroy.splice_after(__to_destroy.cbefore_begin(),
+ _M_base(), __old);
+ __x = __old;
+ _GLIBCXX20_ONLY( __removed++ );
+ }
+
+ __old = __x++;
+ }
+
+ return _GLIBCXX20_ONLY( __removed );
+ }
+
+ template
+ __remove_return_type
+ remove_if(_Pred __pred)
+ {
+ if (!this->_M_iterators && !this->_M_const_iterators)
+ return _Base::remove_if(__pred);
+
+ size_type __removed __attribute__((__unused__)) = 0;
+ _Base __to_destroy(get_allocator());
+ _Base_iterator __x = _Base::before_begin();
+ _Base_iterator __old = __x++;
+ while (__x != _Base::end())
+ {
+ if (__pred(*__x))
+ {
+ this->_M_invalidate_if([__x](_Base_const_iterator __it)
+ { return __it == __x; });
+ __to_destroy.splice_after(__to_destroy.cbefore_begin(),
+ _M_base(), __old);
+ __x = __old;
+ _GLIBCXX20_ONLY( __removed++ );
+ }
+
+ __old = __x++;
+ }
+
+ return _GLIBCXX20_ONLY( __removed );
+ }
+
+ _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
+ __remove_return_type
+ unique()
+ { return unique(std::equal_to<_Tp>()); }
+
+ template
+ __remove_return_type
+ unique(_BinPred __binary_pred)
+ {
+ if (!this->_M_iterators && !this->_M_const_iterators)
+ return _Base::unique(__binary_pred);
+
+ _Base_const_iterator __first = _Base::cbegin();
+ _Base_const_iterator __last = _Base::cend();
+ if (__first == __last)
+ return _GLIBCXX20_ONLY(0);
+
+ size_type __removed __attribute__((__unused__)) = 0;
+ _Base __to_destroy(get_allocator());
+ _Base_const_iterator __next = std::next(__first);
+ while (__next != __last)
+ {
+ if (__binary_pred(*__first, *__next))
+ {
+ this->_M_invalidate_if([__next](_Base_const_iterator __it)
+ { return __it == __next; });
+ __to_destroy.splice_after(__to_destroy.cbefore_begin(),
+ _M_base(), __first);
+ __next = __first;
+ _GLIBCXX20_ONLY( __removed++ );
+ }
+
+ __first = __next++;
+ }
+
+ return _GLIBCXX20_ONLY( __removed );
+ }
+
+#undef _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
+#undef _GLIBCXX20_ONLY
+
+ void
+ merge(forward_list&& __list)
+ {
+ if (this != std::__addressof(__list))
+ {
+ __glibcxx_check_sorted(_Base::begin(), _Base::end());
+ __glibcxx_check_sorted(__list._M_base().begin(),
+ __list._M_base().end());
+ this->_M_transfer_from_if(__list, [&__list](_Base_const_iterator __it)
+ {
+ return __it != __list._M_base().cbefore_begin()
+ && __it != __list._M_base().cend();
+ });
+ _Base::merge(std::move(__list._M_base()));
+ }
+ }
+
+ void
+ merge(forward_list& __list)
+ { merge(std::move(__list)); }
+
+ template
+ void
+ merge(forward_list&& __list, _Comp __comp)
+ {
+ if (this != std::__addressof(__list))
+ {
+ __glibcxx_check_sorted_pred(_Base::begin(), _Base::end(), __comp);
+ __glibcxx_check_sorted_pred(__list._M_base().begin(),
+ __list._M_base().end(), __comp);
+ this->_M_transfer_from_if(__list,
+ [&__list](_Base_const_iterator __it)
+ {
+ return __it != __list._M_base().cbefore_begin()
+ && __it != __list._M_base().cend();
+ });
+ _Base::merge(std::move(__list._M_base()), __comp);
+ }
+ }
+
+ template
+ void
+ merge(forward_list& __list, _Comp __comp)
+ { merge(std::move(__list), __comp); }
+
+ using _Base::sort;
+ using _Base::reverse;
+
+ _Base&
+ _M_base() noexcept { return *this; }
+
+ const _Base&
+ _M_base() const noexcept { return *this; }
+ };
+
+#if __cpp_deduction_guides >= 201606
+ template::value_type,
+ typename _Allocator = allocator<_ValT>,
+ typename = _RequireInputIter<_InputIterator>,
+ typename = _RequireAllocator<_Allocator>>
+ forward_list(_InputIterator, _InputIterator, _Allocator = _Allocator())
+ -> forward_list<_ValT, _Allocator>;
+#endif
+
+ template
+ bool
+ operator==(const forward_list<_Tp, _Alloc>& __lx,
+ const forward_list<_Tp, _Alloc>& __ly)
+ { return __lx._M_base() == __ly._M_base(); }
+
+#if __cpp_lib_three_way_comparison
+ template
+ constexpr __detail::__synth3way_t<_Tp>
+ operator<=>(const forward_list<_Tp, _Alloc>& __x,
+ const forward_list<_Tp, _Alloc>& __y)
+ { return __x._M_base() <=> __y._M_base(); }
+#else
+ template
+ inline bool
+ operator<(const forward_list<_Tp, _Alloc>& __lx,
+ const forward_list<_Tp, _Alloc>& __ly)
+ { return __lx._M_base() < __ly._M_base(); }
+
+ template
+ inline bool
+ operator!=(const forward_list<_Tp, _Alloc>& __lx,
+ const forward_list<_Tp, _Alloc>& __ly)
+ { return !(__lx == __ly); }
+
+ /// Based on operator<
+ template
+ inline bool
+ operator>(const forward_list<_Tp, _Alloc>& __lx,
+ const forward_list<_Tp, _Alloc>& __ly)
+ { return (__ly < __lx); }
+
+ /// Based on operator<
+ template
+ inline bool
+ operator>=(const forward_list<_Tp, _Alloc>& __lx,
+ const forward_list<_Tp, _Alloc>& __ly)
+ { return !(__lx < __ly); }
+
+ /// Based on operator<
+ template
+ inline bool
+ operator<=(const forward_list<_Tp, _Alloc>& __lx,
+ const forward_list<_Tp, _Alloc>& __ly)
+ { return !(__ly < __lx); }
+#endif // three-way comparison
+
+ /// See std::forward_list::swap().
+ template
+ inline void
+ swap(forward_list<_Tp, _Alloc>& __lx, forward_list<_Tp, _Alloc>& __ly)
+ noexcept(noexcept(__lx.swap(__ly)))
+ { __lx.swap(__ly); }
+
+} // namespace __debug
+} // namespace std
+
+namespace __gnu_debug
+{
+ template
+ struct _BeforeBeginHelper >
+ {
+ typedef std::__debug::forward_list<_Tp, _Alloc> _Sequence;
+
+ template
+ static bool
+ _S_Is(const _Safe_iterator<_Iterator, _Sequence>& __it)
+ {
+ return
+ __it.base() == __it._M_get_sequence()->_M_base().before_begin();
+ }
+
+ template
+ static bool
+ _S_Is_Beginnest(const _Safe_iterator<_Iterator, _Sequence>& __it)
+ { return _S_Is(__it); }
+ };
+
+ template
+ struct _Sequence_traits >
+ {
+ typedef typename std::__debug::forward_list<_Tp, _Alloc>::iterator _It;
+
+ static typename _Distance_traits<_It>::__type
+ _S_size(const std::__debug::forward_list<_Tp, _Alloc>& __seq)
+ {
+ return __seq.empty()
+ ? std::make_pair(0, __dp_exact) : std::make_pair(1, __dp_sign);
+ }
+ };
+
+#ifndef _GLIBCXX_DEBUG_PEDANTIC
+ template
+ struct _Insert_range_from_self_is_safe<
+ std::__debug::forward_list<_Tp, _Alloc> >
+ { enum { __value = 1 }; };
+#endif
+}
+
+#endif
diff --git a/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/functions.h b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/functions.h
new file mode 100644
index 0000000..6cac11f
--- /dev/null
+++ b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/functions.h
@@ -0,0 +1,470 @@
+// Debugging support implementation -*- C++ -*-
+
+// Copyright (C) 2003-2021 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// .
+
+/** @file debug/functions.h
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_FUNCTIONS_H
+#define _GLIBCXX_DEBUG_FUNCTIONS_H 1
+
+#include // for less
+
+#if __cplusplus >= 201103L
+# include // for __miter_base
+# include // for is_lvalue_reference and conditional.
+#endif
+
+#include
+#include
+
+namespace __gnu_debug
+{
+ template
+ struct _Insert_range_from_self_is_safe
+ { enum { __value = 0 }; };
+
+ template
+ struct _Is_contiguous_sequence : std::__false_type { };
+
+ /* Checks that [first, last) is a valid range, and then returns
+ * __first. This routine is useful when we can't use a separate
+ * assertion statement because, e.g., we are in a constructor.
+ */
+ template
+ inline _InputIterator
+ __check_valid_range(const _InputIterator& __first,
+ const _InputIterator& __last,
+ const char* __file,
+ unsigned int __line,
+ const char* __function)
+ {
+ __glibcxx_check_valid_range_at(__first, __last,
+ __file, __line, __function);
+ return __first;
+ }
+
+ /* Handle the case where __other is a pointer to _Sequence::value_type. */
+ template
+ inline bool
+ __foreign_iterator_aux4(
+ const _Safe_iterator<_Iterator, _Sequence, _Category>& __it,
+ const typename _Sequence::value_type* __other)
+ {
+ typedef const typename _Sequence::value_type* _PointerType;
+ typedef std::less<_PointerType> _Less;
+#if __cplusplus >= 201103L
+ constexpr _Less __l{};
+#else
+ const _Less __l = _Less();
+#endif
+ const _Sequence* __seq = __it._M_get_sequence();
+ const _PointerType __begin = std::__addressof(*__seq->_M_base().begin());
+ const _PointerType __end = std::__addressof(*(__seq->_M_base().end()-1));
+
+ // Check whether __other points within the contiguous storage.
+ return __l(__other, __begin) || __l(__end, __other);
+ }
+
+ /* Fallback overload for when we can't tell, assume it is valid. */
+ template
+ inline bool
+ __foreign_iterator_aux4(
+ const _Safe_iterator<_Iterator, _Sequence, _Category>&, ...)
+ { return true; }
+
+ /* Handle sequences with contiguous storage */
+ template
+ inline bool
+ __foreign_iterator_aux3(
+ const _Safe_iterator<_Iterator, _Sequence, _Category>& __it,
+ const _InputIterator& __other, const _InputIterator& __other_end,
+ std::__true_type)
+ {
+ if (__other == __other_end)
+ return true; // inserting nothing is safe even if not foreign iters
+ if (__it._M_get_sequence()->empty())
+ return true; // can't be self-inserting if self is empty
+ return __foreign_iterator_aux4(__it, std::__addressof(*__other));
+ }
+
+ /* Handle non-contiguous containers, assume it is valid. */
+ template
+ inline bool
+ __foreign_iterator_aux3(
+ const _Safe_iterator<_Iterator, _Sequence, _Category>&,
+ const _InputIterator&, const _InputIterator&,
+ std::__false_type)
+ { return true; }
+
+ /** Handle debug iterators from the same type of container. */
+ template
+ inline bool
+ __foreign_iterator_aux2(
+ const _Safe_iterator<_Iterator, _Sequence, _Category>& __it,
+ const _Safe_iterator<_OtherIterator, _Sequence, _Category>& __other,
+ const _Safe_iterator<_OtherIterator, _Sequence, _Category>&)
+ { return __it._M_get_sequence() != __other._M_get_sequence(); }
+
+ /** Handle debug iterators from different types of container. */
+ template
+ inline bool
+ __foreign_iterator_aux2(
+ const _Safe_iterator<_Iterator, _Sequence, _Category>&,
+ const _Safe_iterator<_OtherIterator, _OtherSequence,
+ _OtherCategory>&,
+ const _Safe_iterator<_OtherIterator, _OtherSequence,
+ _OtherCategory>&)
+ { return true; }
+
+ /* Handle non-debug iterators. */
+ template
+ inline bool
+ __foreign_iterator_aux2(
+ const _Safe_iterator<_Iterator, _Sequence, _Category>& __it,
+ const _InputIterator& __other,
+ const _InputIterator& __other_end)
+ {
+#if __cplusplus < 201103L
+ typedef _Is_contiguous_sequence<_Sequence> __tag;
+#else
+ using __lvalref = std::is_lvalue_reference<
+ typename std::iterator_traits<_InputIterator>::reference>;
+ using __contiguous = _Is_contiguous_sequence<_Sequence>;
+ using __tag = typename std::conditional<__lvalref::value, __contiguous,
+ std::__false_type>::type;
+#endif
+ return __foreign_iterator_aux3(__it, __other, __other_end, __tag());
+ }
+
+ /* Handle the case where we aren't really inserting a range after all */
+ template
+ inline bool
+ __foreign_iterator_aux(
+ const _Safe_iterator<_Iterator, _Sequence, _Category>&,
+ _Integral, _Integral, std::__true_type)
+ { return true; }
+
+ /* Handle all iterators. */
+ template
+ inline bool
+ __foreign_iterator_aux(
+ const _Safe_iterator<_Iterator, _Sequence, _Category>& __it,
+ _InputIterator __other, _InputIterator __other_end,
+ std::__false_type)
+ {
+ return _Insert_range_from_self_is_safe<_Sequence>::__value
+ || __foreign_iterator_aux2(__it, std::__miter_base(__other),
+ std::__miter_base(__other_end));
+ }
+
+ template
+ inline bool
+ __foreign_iterator(
+ const _Safe_iterator<_Iterator, _Sequence, _Category>& __it,
+ _InputIterator __other, _InputIterator __other_end)
+ {
+ typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+ return __foreign_iterator_aux(__it, __other, __other_end, _Integral());
+ }
+
+ // Can't check if an input iterator sequence is sorted, because we
+ // can't step through the sequence.
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_sorted_aux(const _InputIterator&, const _InputIterator&,
+ std::input_iterator_tag)
+ { return true; }
+
+ // Can verify if a forward iterator sequence is in fact sorted using
+ // std::__is_sorted
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_sorted_aux(_ForwardIterator __first, _ForwardIterator __last,
+ std::forward_iterator_tag)
+ {
+ if (__first == __last)
+ return true;
+
+ _ForwardIterator __next = __first;
+ for (++__next; __next != __last; __first = __next, (void)++__next)
+ if (*__next < *__first)
+ return false;
+
+ return true;
+ }
+
+ // Can't check if an input iterator sequence is sorted, because we can't step
+ // through the sequence.
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_sorted_aux(const _InputIterator&, const _InputIterator&,
+ _Predicate, std::input_iterator_tag)
+ { return true; }
+
+ // Can verify if a forward iterator sequence is in fact sorted using
+ // std::__is_sorted
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_sorted_aux(_ForwardIterator __first, _ForwardIterator __last,
+ _Predicate __pred, std::forward_iterator_tag)
+ {
+ if (__first == __last)
+ return true;
+
+ _ForwardIterator __next = __first;
+ for (++__next; __next != __last; __first = __next, (void)++__next)
+ if (__pred(*__next, *__first))
+ return false;
+
+ return true;
+ }
+
+ // Determine if a sequence is sorted.
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_sorted(const _InputIterator& __first, const _InputIterator& __last)
+ {
+ return __check_sorted_aux(__first, __last,
+ std::__iterator_category(__first));
+ }
+
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_sorted(const _InputIterator& __first, const _InputIterator& __last,
+ _Predicate __pred)
+ {
+ return __check_sorted_aux(__first, __last, __pred,
+ std::__iterator_category(__first));
+ }
+
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_sorted_set_aux(const _InputIterator& __first,
+ const _InputIterator& __last,
+ std::__true_type)
+ { return __check_sorted(__first, __last); }
+
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_sorted_set_aux(const _InputIterator&,
+ const _InputIterator&,
+ std::__false_type)
+ { return true; }
+
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_sorted_set_aux(const _InputIterator& __first,
+ const _InputIterator& __last,
+ _Predicate __pred, std::__true_type)
+ { return __check_sorted(__first, __last, __pred); }
+
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_sorted_set_aux(const _InputIterator&,
+ const _InputIterator&, _Predicate,
+ std::__false_type)
+ { return true; }
+
+ // ... special variant used in std::merge, std::includes, std::set_*.
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_sorted_set(const _InputIterator1& __first,
+ const _InputIterator1& __last,
+ const _InputIterator2&)
+ {
+ typedef typename std::iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+ typedef typename std::iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+
+ typedef typename std::__are_same<_ValueType1, _ValueType2>::__type
+ _SameType;
+ return __check_sorted_set_aux(__first, __last, _SameType());
+ }
+
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_sorted_set(const _InputIterator1& __first,
+ const _InputIterator1& __last,
+ const _InputIterator2&, _Predicate __pred)
+ {
+ typedef typename std::iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+ typedef typename std::iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+
+ typedef typename std::__are_same<_ValueType1, _ValueType2>::__type
+ _SameType;
+ return __check_sorted_set_aux(__first, __last, __pred, _SameType());
+ }
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 270. Binary search requirements overly strict
+ // Determine if a sequence is partitioned w.r.t. this element.
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_partitioned_lower(_ForwardIterator __first,
+ _ForwardIterator __last, const _Tp& __value)
+ {
+ while (__first != __last && *__first < __value)
+ ++__first;
+ if (__first != __last)
+ {
+ ++__first;
+ while (__first != __last && !(*__first < __value))
+ ++__first;
+ }
+ return __first == __last;
+ }
+
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_partitioned_upper(_ForwardIterator __first,
+ _ForwardIterator __last, const _Tp& __value)
+ {
+ while (__first != __last && !(__value < *__first))
+ ++__first;
+ if (__first != __last)
+ {
+ ++__first;
+ while (__first != __last && __value < *__first)
+ ++__first;
+ }
+ return __first == __last;
+ }
+
+ // Determine if a sequence is partitioned w.r.t. this element.
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_partitioned_lower(_ForwardIterator __first,
+ _ForwardIterator __last, const _Tp& __value,
+ _Pred __pred)
+ {
+ while (__first != __last && bool(__pred(*__first, __value)))
+ ++__first;
+ if (__first != __last)
+ {
+ ++__first;
+ while (__first != __last && !bool(__pred(*__first, __value)))
+ ++__first;
+ }
+ return __first == __last;
+ }
+
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __check_partitioned_upper(_ForwardIterator __first,
+ _ForwardIterator __last, const _Tp& __value,
+ _Pred __pred)
+ {
+ while (__first != __last && !bool(__pred(__value, *__first)))
+ ++__first;
+ if (__first != __last)
+ {
+ ++__first;
+ while (__first != __last && bool(__pred(__value, *__first)))
+ ++__first;
+ }
+ return __first == __last;
+ }
+
+#if __cplusplus >= 201103L
+ struct _Irreflexive_checker
+ {
+ template
+ static typename std::iterator_traits<_It>::reference
+ __ref();
+
+ template() < __ref<_It>())>
+ _GLIBCXX20_CONSTEXPR
+ static bool
+ _S_is_valid(_It __it)
+ { return !(*__it < *__it); }
+
+ // Fallback method if operator doesn't exist.
+ template
+ _GLIBCXX20_CONSTEXPR
+ static bool
+ _S_is_valid(_Args...)
+ { return true; }
+
+ template()(__ref<_It>(), __ref<_It>()))>
+ _GLIBCXX20_CONSTEXPR
+ static bool
+ _S_is_valid_pred(_It __it, _Pred __pred)
+ { return !__pred(*__it, *__it); }
+
+ // Fallback method if predicate can't be invoked.
+ template
+ _GLIBCXX20_CONSTEXPR
+ static bool
+ _S_is_valid_pred(_Args...)
+ { return true; }
+ };
+
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __is_irreflexive(_Iterator __it)
+ { return _Irreflexive_checker::_S_is_valid(__it); }
+
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __is_irreflexive_pred(_Iterator __it, _Pred __pred)
+ { return _Irreflexive_checker::_S_is_valid_pred(__it, __pred); }
+#endif
+
+} // namespace __gnu_debug
+
+#endif
diff --git a/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/helper_functions.h b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/helper_functions.h
new file mode 100644
index 0000000..c0144ce
--- /dev/null
+++ b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/helper_functions.h
@@ -0,0 +1,331 @@
+// Debugging support implementation -*- C++ -*-
+
+// Copyright (C) 2003-2021 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// .
+
+/** @file debug/helper_functions.h
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_HELPER_FUNCTIONS_H
+#define _GLIBCXX_DEBUG_HELPER_FUNCTIONS_H 1
+
+#include // for __addressof
+#include // for iterator_traits,
+ // categories and _Iter_base
+#include // for __is_integer
+
+#include // for pair
+
+namespace __gnu_debug
+{
+ template
+ class _Safe_iterator;
+
+#if __cplusplus >= 201103L
+ template
+ class _Safe_local_iterator;
+#endif
+
+ /** The precision to which we can calculate the distance between
+ * two iterators.
+ */
+ enum _Distance_precision
+ {
+ __dp_none, // Not even an iterator type
+ __dp_equality, //< Can compare iterator equality, only
+ __dp_sign, //< Can determine equality and ordering
+ __dp_sign_max_size, //< __dp_sign and gives max range size
+ __dp_exact //< Can determine distance precisely
+ };
+
+ template::__type>
+ struct _Distance_traits
+ {
+ private:
+ typedef
+ typename std::iterator_traits<_Iterator>::difference_type _ItDiffType;
+
+ template::__type>
+ struct _DiffTraits
+ { typedef _DiffType __type; };
+
+ template
+ struct _DiffTraits<_DiffType, std::__true_type>
+ { typedef std::ptrdiff_t __type; };
+
+ typedef typename _DiffTraits<_ItDiffType>::__type _DiffType;
+
+ public:
+ typedef std::pair<_DiffType, _Distance_precision> __type;
+ };
+
+ template
+ struct _Distance_traits<_Integral, std::__true_type>
+ { typedef std::pair __type; };
+
+ /** Determine the distance between two iterators with some known
+ * precision.
+ */
+ template
+ _GLIBCXX_CONSTEXPR
+ inline typename _Distance_traits<_Iterator>::__type
+ __get_distance(_Iterator __lhs, _Iterator __rhs,
+ std::random_access_iterator_tag)
+ { return std::make_pair(__rhs - __lhs, __dp_exact); }
+
+ template
+ _GLIBCXX14_CONSTEXPR
+ inline typename _Distance_traits<_Iterator>::__type
+ __get_distance(_Iterator __lhs, _Iterator __rhs,
+ std::input_iterator_tag)
+ {
+ if (__lhs == __rhs)
+ return std::make_pair(0, __dp_exact);
+
+ return std::make_pair(1, __dp_equality);
+ }
+
+ template
+ _GLIBCXX_CONSTEXPR
+ inline typename _Distance_traits<_Iterator>::__type
+ __get_distance(_Iterator __lhs, _Iterator __rhs)
+ { return __get_distance(__lhs, __rhs, std::__iterator_category(__lhs)); }
+
+ // An arbitrary iterator pointer is not singular.
+ inline bool
+ __check_singular_aux(const void*) { return false; }
+
+ // We may have an iterator that derives from _Safe_iterator_base but isn't
+ // a _Safe_iterator.
+ template
+ _GLIBCXX_CONSTEXPR
+ inline bool
+ __check_singular(_Iterator const& __x)
+ {
+ return
+#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED
+ __builtin_is_constant_evaluated() ? false :
+#endif
+ __check_singular_aux(std::__addressof(__x));
+ }
+
+ /** Non-NULL pointers are nonsingular. */
+ template
+ _GLIBCXX_CONSTEXPR
+ inline bool
+ __check_singular(_Tp* const& __ptr)
+ {
+ return
+#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED
+ __builtin_is_constant_evaluated() ? false :
+#endif
+ __ptr == 0;
+ }
+
+ /** We say that integral types for a valid range, and defer to other
+ * routines to realize what to do with integral types instead of
+ * iterators.
+ */
+ template
+ _GLIBCXX_CONSTEXPR
+ inline bool
+ __valid_range_aux(_Integral, _Integral, std::__true_type)
+ { return true; }
+
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __valid_range_aux(_Integral, _Integral,
+ typename _Distance_traits<_Integral>::__type& __dist,
+ std::__true_type)
+ {
+ __dist = std::make_pair(0, __dp_none);
+ return true;
+ }
+
+ template
+ _GLIBCXX_CONSTEXPR
+ inline bool
+ __valid_range_aux(_InputIterator __first, _InputIterator __last,
+ std::input_iterator_tag)
+ {
+ return __first == __last
+ || (!__check_singular(__first) && !__check_singular(__last));
+ }
+
+ template
+ _GLIBCXX_CONSTEXPR
+ inline bool
+ __valid_range_aux(_InputIterator __first, _InputIterator __last,
+ std::random_access_iterator_tag)
+ {
+ return
+ __valid_range_aux(__first, __last, std::input_iterator_tag())
+ && __first <= __last;
+ }
+
+ /** We have iterators, so figure out what kind of iterators they are
+ * to see if we can check the range ahead of time.
+ */
+ template
+ _GLIBCXX_CONSTEXPR
+ inline bool
+ __valid_range_aux(_InputIterator __first, _InputIterator __last,
+ std::__false_type)
+ {
+ return __valid_range_aux(__first, __last,
+ std::__iterator_category(__first));
+ }
+
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __valid_range_aux(_InputIterator __first, _InputIterator __last,
+ typename _Distance_traits<_InputIterator>::__type& __dist,
+ std::__false_type)
+ {
+ if (!__valid_range_aux(__first, __last, std::input_iterator_tag()))
+ return false;
+
+ __dist = __get_distance(__first, __last);
+ switch (__dist.second)
+ {
+ case __dp_none:
+ break;
+ case __dp_equality:
+ if (__dist.first == 0)
+ return true;
+ break;
+ case __dp_sign:
+ case __dp_sign_max_size:
+ case __dp_exact:
+ return __dist.first >= 0;
+ }
+
+ // Can't tell so assume it is fine.
+ return true;
+ }
+
+ /** Don't know what these iterators are, or if they are even
+ * iterators (we may get an integral type for InputIterator), so
+ * see if they are integral and pass them on to the next phase
+ * otherwise.
+ */
+ template
+ _GLIBCXX20_CONSTEXPR
+ inline bool
+ __valid_range(_InputIterator __first, _InputIterator __last,
+ typename _Distance_traits<_InputIterator>::__type& __dist)
+ {
+ typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+ return __valid_range_aux(__first, __last, __dist, _Integral());
+ }
+
+ template
+ bool
+ __valid_range(const _Safe_iterator<_Iterator, _Sequence, _Category>&,
+ const _Safe_iterator<_Iterator, _Sequence, _Category>&,
+ typename _Distance_traits<_Iterator>::__type&);
+
+#if __cplusplus >= 201103L
+ template
+ bool
+ __valid_range(const _Safe_local_iterator<_Iterator, _Sequence>&,
+ const _Safe_local_iterator<_Iterator, _Sequence>&,
+ typename _Distance_traits<_Iterator>::__type&);
+#endif
+
+ template
+ _GLIBCXX14_CONSTEXPR
+ inline bool
+ __valid_range(_InputIterator __first, _InputIterator __last)
+ {
+ typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+ return __valid_range_aux(__first, __last, _Integral());
+ }
+
+ template
+ bool
+ __valid_range(const _Safe_iterator<_Iterator, _Sequence, _Category>&,
+ const _Safe_iterator<_Iterator, _Sequence, _Category>&);
+
+#if __cplusplus >= 201103L
+ template
+ bool
+ __valid_range(const _Safe_local_iterator<_Iterator, _Sequence>&,
+ const _Safe_local_iterator<_Iterator, _Sequence>&);
+#endif
+
+ // Fallback method, always ok.
+ template
+ _GLIBCXX_CONSTEXPR
+ inline bool
+ __can_advance(_InputIterator, _Size)
+ { return true; }
+
+ template
+ bool
+ __can_advance(const _Safe_iterator<_Iterator, _Sequence, _Category>&,
+ _Size);
+
+ template
+ _GLIBCXX_CONSTEXPR
+ inline bool
+ __can_advance(_InputIterator, const std::pair<_Diff, _Distance_precision>&, int)
+ { return true; }
+
+ template
+ bool
+ __can_advance(const _Safe_iterator<_Iterator, _Sequence, _Category>&,
+ const std::pair<_Diff, _Distance_precision>&, int);
+
+ /** Helper function to extract base iterator of random access safe iterator
+ * in order to reduce performance impact of debug mode. Limited to random
+ * access iterator because it is the only category for which it is possible
+ * to check for correct iterators order in the __valid_range function
+ * thanks to the < operator.
+ */
+ template
+ _GLIBCXX_CONSTEXPR
+ inline _Iterator
+ __base(_Iterator __it)
+ { return __it; }
+
+#if __cplusplus < 201103L
+ template
+ struct _Unsafe_type
+ { typedef _Iterator _Type; };
+#endif
+
+ /* Remove debug mode safe iterator layer, if any. */
+ template
+ inline _Iterator
+ __unsafe(_Iterator __it)
+ { return __it; }
+}
+
+#endif
diff --git a/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/list b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/list
new file mode 100644
index 0000000..01fe43f
--- /dev/null
+++ b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/list
@@ -0,0 +1,987 @@
+// Debugging list implementation -*- C++ -*-
+
+// Copyright (C) 2003-2021 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// .
+
+/** @file debug/list
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_LIST
+#define _GLIBCXX_DEBUG_LIST 1
+
+#pragma GCC system_header
+
+#include
+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {
+ template class list;
+} } // namespace std::__debug
+
+#include
+#include
+#include
+#include
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+namespace __debug
+{
+ /// Class std::list with safety/checking/debug instrumentation.
+ template >
+ class list
+ : public __gnu_debug::_Safe_container<
+ list<_Tp, _Allocator>, _Allocator,
+ __gnu_debug::_Safe_node_sequence>,
+ public _GLIBCXX_STD_C::list<_Tp, _Allocator>
+ {
+ typedef _GLIBCXX_STD_C::list<_Tp, _Allocator> _Base;
+ typedef __gnu_debug::_Safe_container<
+ list, _Allocator, __gnu_debug::_Safe_node_sequence> _Safe;
+
+ typedef typename _Base::iterator _Base_iterator;
+ typedef typename _Base::const_iterator _Base_const_iterator;
+ typedef __gnu_debug::_Equal_to<_Base_const_iterator> _Equal;
+ typedef __gnu_debug::_Not_equal_to<_Base_const_iterator> _Not_equal;
+
+ template
+ friend class ::__gnu_debug::_Safe_iterator;
+
+ // Reference wrapper for base class. Disambiguates list(const _Base&)
+ // from copy constructor by requiring a user-defined conversion.
+ // See PR libstdc++/90102.
+ struct _Base_ref
+ {
+ _Base_ref(const _Base& __r) : _M_ref(__r) { }
+
+ const _Base& _M_ref;
+ };
+
+ public:
+ typedef typename _Base::reference reference;
+ typedef typename _Base::const_reference const_reference;
+
+ typedef __gnu_debug::_Safe_iterator<_Base_iterator, list>
+ iterator;
+ typedef __gnu_debug::_Safe_iterator<_Base_const_iterator, list>
+ const_iterator;
+
+ typedef typename _Base::size_type size_type;
+ typedef typename _Base::difference_type difference_type;
+
+ typedef _Tp value_type;
+ typedef _Allocator allocator_type;
+ typedef typename _Base::pointer pointer;
+ typedef typename _Base::const_pointer const_pointer;
+ typedef std::reverse_iterator reverse_iterator;
+ typedef std::reverse_iterator const_reverse_iterator;
+
+ // 23.2.2.1 construct/copy/destroy:
+
+#if __cplusplus < 201103L
+ list()
+ : _Base() { }
+
+ list(const list& __x)
+ : _Base(__x) { }
+
+ ~list() { }
+#else
+ list() = default;
+ list(const list&) = default;
+ list(list&&) = default;
+
+ list(initializer_list __l,
+ const allocator_type& __a = allocator_type())
+ : _Base(__l, __a) { }
+
+ ~list() = default;
+
+ list(const list& __x, const allocator_type& __a)
+ : _Base(__x, __a) { }
+
+ list(list&& __x, const allocator_type& __a)
+ noexcept(
+ std::is_nothrow_constructible<_Base,
+ _Base, const allocator_type&>::value )
+ : _Safe(std::move(__x._M_safe()), __a),
+ _Base(std::move(__x._M_base()), __a) { }
+#endif
+
+ explicit
+ list(const _Allocator& __a) _GLIBCXX_NOEXCEPT
+ : _Base(__a) { }
+
+#if __cplusplus >= 201103L
+ explicit
+ list(size_type __n, const allocator_type& __a = allocator_type())
+ : _Base(__n, __a) { }
+
+ list(size_type __n, const _Tp& __value,
+ const _Allocator& __a = _Allocator())
+ : _Base(__n, __value, __a) { }
+#else
+ explicit
+ list(size_type __n, const _Tp& __value = _Tp(),
+ const _Allocator& __a = _Allocator())
+ : _Base(__n, __value, __a) { }
+#endif
+
+#if __cplusplus >= 201103L
+ template>
+#else
+ template
+#endif
+ list(_InputIterator __first, _InputIterator __last,
+ const _Allocator& __a = _Allocator())
+ : _Base(__gnu_debug::__base(
+ __glibcxx_check_valid_constructor_range(__first, __last)),
+ __gnu_debug::__base(__last), __a)
+ { }
+
+ list(_Base_ref __x)
+ : _Base(__x._M_ref) { }
+
+#if __cplusplus < 201103L
+ list&
+ operator=(const list& __x)
+ {
+ this->_M_safe() = __x;
+ _M_base() = __x;
+ return *this;
+ }
+#else
+ list&
+ operator=(const list&) = default;
+
+ list&
+ operator=(list&&) = default;
+
+ list&
+ operator=(initializer_list __l)
+ {
+ this->_M_invalidate_all();
+ _M_base() = __l;
+ return *this;
+ }
+
+ void
+ assign(initializer_list __l)
+ {
+ _Base::assign(__l);
+ this->_M_invalidate_all();
+ }
+#endif
+
+#if __cplusplus >= 201103L
+ template>
+#else
+ template
+#endif
+ void
+ assign(_InputIterator __first, _InputIterator __last)
+ {
+ typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;
+ __glibcxx_check_valid_range2(__first, __last, __dist);
+
+ if (__dist.second >= __gnu_debug::__dp_sign)
+ _Base::assign(__gnu_debug::__unsafe(__first),
+ __gnu_debug::__unsafe(__last));
+ else
+ _Base::assign(__first, __last);
+
+ this->_M_invalidate_all();
+ }
+
+ void
+ assign(size_type __n, const _Tp& __t)
+ {
+ _Base::assign(__n, __t);
+ this->_M_invalidate_all();
+ }
+
+ using _Base::get_allocator;
+
+ // iterators:
+ iterator
+ begin() _GLIBCXX_NOEXCEPT
+ { return iterator(_Base::begin(), this); }
+
+ const_iterator
+ begin() const _GLIBCXX_NOEXCEPT
+ { return const_iterator(_Base::begin(), this); }
+
+ iterator
+ end() _GLIBCXX_NOEXCEPT
+ { return iterator(_Base::end(), this); }
+
+ const_iterator
+ end() const _GLIBCXX_NOEXCEPT
+ { return const_iterator(_Base::end(), this); }
+
+ reverse_iterator
+ rbegin() _GLIBCXX_NOEXCEPT
+ { return reverse_iterator(end()); }
+
+ const_reverse_iterator
+ rbegin() const _GLIBCXX_NOEXCEPT
+ { return const_reverse_iterator(end()); }
+
+ reverse_iterator
+ rend() _GLIBCXX_NOEXCEPT
+ { return reverse_iterator(begin()); }
+
+ const_reverse_iterator
+ rend() const _GLIBCXX_NOEXCEPT
+ { return const_reverse_iterator(begin()); }
+
+#if __cplusplus >= 201103L
+ const_iterator
+ cbegin() const noexcept
+ { return const_iterator(_Base::begin(), this); }
+
+ const_iterator
+ cend() const noexcept
+ { return const_iterator(_Base::end(), this); }
+
+ const_reverse_iterator
+ crbegin() const noexcept
+ { return const_reverse_iterator(end()); }
+
+ const_reverse_iterator
+ crend() const noexcept
+ { return const_reverse_iterator(begin()); }
+#endif
+
+ // 23.2.2.2 capacity:
+ using _Base::empty;
+ using _Base::size;
+ using _Base::max_size;
+
+#if __cplusplus >= 201103L
+ void
+ resize(size_type __sz)
+ {
+ this->_M_detach_singular();
+
+ // if __sz < size(), invalidate all iterators in [begin + __sz, end())
+ _Base_iterator __victim = _Base::begin();
+ _Base_iterator __end = _Base::end();
+ for (size_type __i = __sz; __victim != __end && __i > 0; --__i)
+ ++__victim;
+
+ for (; __victim != __end; ++__victim)
+ this->_M_invalidate_if(_Equal(__victim));
+
+ __try
+ {
+ _Base::resize(__sz);
+ }
+ __catch(...)
+ {
+ this->_M_revalidate_singular();
+ __throw_exception_again;
+ }
+ }
+
+ void
+ resize(size_type __sz, const _Tp& __c)
+ {
+ this->_M_detach_singular();
+
+ // if __sz < size(), invalidate all iterators in [begin + __sz, end())
+ _Base_iterator __victim = _Base::begin();
+ _Base_iterator __end = _Base::end();
+ for (size_type __i = __sz; __victim != __end && __i > 0; --__i)
+ ++__victim;
+
+ for (; __victim != __end; ++__victim)
+ this->_M_invalidate_if(_Equal(__victim));
+
+ __try
+ {
+ _Base::resize(__sz, __c);
+ }
+ __catch(...)
+ {
+ this->_M_revalidate_singular();
+ __throw_exception_again;
+ }
+ }
+#else
+ void
+ resize(size_type __sz, _Tp __c = _Tp())
+ {
+ this->_M_detach_singular();
+
+ // if __sz < size(), invalidate all iterators in [begin + __sz, end())
+ _Base_iterator __victim = _Base::begin();
+ _Base_iterator __end = _Base::end();
+ for (size_type __i = __sz; __victim != __end && __i > 0; --__i)
+ ++__victim;
+
+ for (; __victim != __end; ++__victim)
+ this->_M_invalidate_if(_Equal(__victim));
+
+ __try
+ {
+ _Base::resize(__sz, __c);
+ }
+ __catch(...)
+ {
+ this->_M_revalidate_singular();
+ __throw_exception_again;
+ }
+ }
+#endif
+
+ // element access:
+ reference
+ front() _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_nonempty();
+ return _Base::front();
+ }
+
+ const_reference
+ front() const _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_nonempty();
+ return _Base::front();
+ }
+
+ reference
+ back() _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_nonempty();
+ return _Base::back();
+ }
+
+ const_reference
+ back() const _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_nonempty();
+ return _Base::back();
+ }
+
+ // 23.2.2.3 modifiers:
+ using _Base::push_front;
+
+#if __cplusplus >= 201103L
+ using _Base::emplace_front;
+#endif
+
+ void
+ pop_front() _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_nonempty();
+ this->_M_invalidate_if(_Equal(_Base::begin()));
+ _Base::pop_front();
+ }
+
+ using _Base::push_back;
+
+#if __cplusplus >= 201103L
+ using _Base::emplace_back;
+#endif
+
+ void
+ pop_back() _GLIBCXX_NOEXCEPT
+ {
+ __glibcxx_check_nonempty();
+ this->_M_invalidate_if(_Equal(--_Base::end()));
+ _Base::pop_back();
+ }
+
+#if __cplusplus >= 201103L
+ template
+ iterator
+ emplace(const_iterator __position, _Args&&... __args)
+ {
+ __glibcxx_check_insert(__position);
+ return { _Base::emplace(__position.base(),
+ std::forward<_Args>(__args)...), this };
+ }
+#endif
+
+ iterator
+#if __cplusplus >= 201103L
+ insert(const_iterator __position, const _Tp& __x)
+#else
+ insert(iterator __position, const _Tp& __x)
+#endif
+ {
+ __glibcxx_check_insert(__position);
+ return iterator(_Base::insert(__position.base(), __x), this);
+ }
+
+#if __cplusplus >= 201103L
+ iterator
+ insert(const_iterator __position, _Tp&& __x)
+ { return emplace(__position, std::move(__x)); }
+
+ iterator
+ insert(const_iterator __p, initializer_list __l)
+ {
+ __glibcxx_check_insert(__p);
+ return { _Base::insert(__p.base(), __l), this };
+ }
+#endif
+
+#if __cplusplus >= 201103L
+ iterator
+ insert(const_iterator __position, size_type __n, const _Tp& __x)
+ {
+ __glibcxx_check_insert(__position);
+ return { _Base::insert(__position.base(), __n, __x), this };
+ }
+#else
+ void
+ insert(iterator __position, size_type __n, const _Tp& __x)
+ {
+ __glibcxx_check_insert(__position);
+ _Base::insert(__position.base(), __n, __x);
+ }
+#endif
+
+#if __cplusplus >= 201103L
+ template>
+ iterator
+ insert(const_iterator __position, _InputIterator __first,
+ _InputIterator __last)
+ {
+ typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;
+ __glibcxx_check_insert_range(__position, __first, __last, __dist);
+ if (__dist.second >= __gnu_debug::__dp_sign)
+ return
+ {
+ _Base::insert(__position.base(),
+ __gnu_debug::__unsafe(__first),
+ __gnu_debug::__unsafe(__last)),
+ this
+ };
+ else
+ return { _Base::insert(__position.base(), __first, __last), this };
+ }
+#else
+ template
+ void
+ insert(iterator __position, _InputIterator __first,
+ _InputIterator __last)
+ {
+ typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;
+ __glibcxx_check_insert_range(__position, __first, __last, __dist);
+
+ if (__dist.second >= __gnu_debug::__dp_sign)
+ _Base::insert(__position.base(), __gnu_debug::__unsafe(__first),
+ __gnu_debug::__unsafe(__last));
+ else
+ _Base::insert(__position.base(), __first, __last);
+ }
+#endif
+
+ private:
+ _Base_iterator
+#if __cplusplus >= 201103L
+ _M_erase(_Base_const_iterator __position) noexcept
+#else
+ _M_erase(_Base_iterator __position)
+#endif
+ {
+ this->_M_invalidate_if(_Equal(__position));
+ return _Base::erase(__position);
+ }
+
+ public:
+ iterator
+#if __cplusplus >= 201103L
+ erase(const_iterator __position) noexcept
+#else
+ erase(iterator __position)
+#endif
+ {
+ __glibcxx_check_erase(__position);
+ return iterator(_M_erase(__position.base()), this);
+ }
+
+ iterator
+#if __cplusplus >= 201103L
+ erase(const_iterator __first, const_iterator __last) noexcept
+#else
+ erase(iterator __first, iterator __last)
+#endif
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 151. can't currently clear() empty container
+ __glibcxx_check_erase_range(__first, __last);
+ for (_Base_const_iterator __victim = __first.base();
+ __victim != __last.base(); ++__victim)
+ {
+ _GLIBCXX_DEBUG_VERIFY(__victim != _Base::end(),
+ _M_message(__gnu_debug::__msg_valid_range)
+ ._M_iterator(__first, "position")
+ ._M_iterator(__last, "last"));
+ this->_M_invalidate_if(_Equal(__victim));
+ }
+
+ return iterator(_Base::erase(__first.base(), __last.base()), this);
+ }
+
+ void
+ swap(list& __x)
+ _GLIBCXX_NOEXCEPT_IF( noexcept(declval<_Base&>().swap(__x)) )
+ {
+ _Safe::_M_swap(__x);
+ _Base::swap(__x);
+ }
+
+ void
+ clear() _GLIBCXX_NOEXCEPT
+ {
+ _Base::clear();
+ this->_M_invalidate_all();
+ }
+
+ // 23.2.2.4 list operations:
+ void
+#if __cplusplus >= 201103L
+ splice(const_iterator __position, list&& __x) noexcept
+#else
+ splice(iterator __position, list& __x)
+#endif
+ {
+ _GLIBCXX_DEBUG_VERIFY(std::__addressof(__x) != this,
+ _M_message(__gnu_debug::__msg_self_splice)
+ ._M_sequence(*this, "this"));
+ this->_M_transfer_from_if(__x, _Not_equal(__x._M_base().end()));
+ _Base::splice(__position.base(), _GLIBCXX_MOVE(__x._M_base()));
+ }
+
+#if __cplusplus >= 201103L
+ void
+ splice(const_iterator __position, list& __x) noexcept
+ { splice(__position, std::move(__x)); }
+#endif
+
+ void
+#if __cplusplus >= 201103L
+ splice(const_iterator __position, list&& __x, const_iterator __i) noexcept
+#else
+ splice(iterator __position, list& __x, iterator __i)
+#endif
+ {
+ __glibcxx_check_insert(__position);
+
+ // We used to perform the splice_alloc check: not anymore, redundant
+ // after implementing the relevant bits of N1599.
+
+ _GLIBCXX_DEBUG_VERIFY(__i._M_dereferenceable(),
+ _M_message(__gnu_debug::__msg_splice_bad)
+ ._M_iterator(__i, "__i"));
+ _GLIBCXX_DEBUG_VERIFY(__i._M_attached_to(std::__addressof(__x)),
+ _M_message(__gnu_debug::__msg_splice_other)
+ ._M_iterator(__i, "__i")._M_sequence(__x, "__x"));
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 250. splicing invalidates iterators
+ this->_M_transfer_from_if(__x, _Equal(__i.base()));
+ _Base::splice(__position.base(), _GLIBCXX_MOVE(__x._M_base()),
+ __i.base());
+ }
+
+#if __cplusplus >= 201103L
+ void
+ splice(const_iterator __position, list& __x, const_iterator __i) noexcept
+ { splice(__position, std::move(__x), __i); }
+#endif
+
+ void
+#if __cplusplus >= 201103L
+ splice(const_iterator __position, list&& __x, const_iterator __first,
+ const_iterator __last) noexcept
+#else
+ splice(iterator __position, list& __x, iterator __first,
+ iterator __last)
+#endif
+ {
+ __glibcxx_check_insert(__position);
+ __glibcxx_check_valid_range(__first, __last);
+ _GLIBCXX_DEBUG_VERIFY(__first._M_attached_to(std::__addressof(__x)),
+ _M_message(__gnu_debug::__msg_splice_other)
+ ._M_sequence(__x, "x")
+ ._M_iterator(__first, "first"));
+
+ // We used to perform the splice_alloc check: not anymore, redundant
+ // after implementing the relevant bits of N1599.
+
+ for (_Base_const_iterator __tmp = __first.base();
+ __tmp != __last.base(); ++__tmp)
+ {
+ _GLIBCXX_DEBUG_VERIFY(__tmp != _Base::end(),
+ _M_message(__gnu_debug::__msg_valid_range)
+ ._M_iterator(__first, "first")
+ ._M_iterator(__last, "last"));
+ _GLIBCXX_DEBUG_VERIFY(std::__addressof(__x) != this
+ || __tmp != __position.base(),
+ _M_message(__gnu_debug::__msg_splice_overlap)
+ ._M_iterator(__tmp, "position")
+ ._M_iterator(__first, "first")
+ ._M_iterator(__last, "last"));
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 250. splicing invalidates iterators
+ this->_M_transfer_from_if(__x, _Equal(__tmp));
+ }
+
+ _Base::splice(__position.base(), _GLIBCXX_MOVE(__x._M_base()),
+ __first.base(), __last.base());
+ }
+
+#if __cplusplus >= 201103L
+ void
+ splice(const_iterator __position, list& __x,
+ const_iterator __first, const_iterator __last) noexcept
+ { splice(__position, std::move(__x), __first, __last); }
+#endif
+
+ private:
+#if __cplusplus > 201703L
+ typedef size_type __remove_return_type;
+# define _GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG \
+ __attribute__((__abi_tag__("__cxx20")))
+# define _GLIBCXX20_ONLY(__expr) __expr
+#else
+ typedef void __remove_return_type;
+# define _GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG
+# define _GLIBCXX20_ONLY(__expr)
+#endif
+
+ public:
+ _GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG
+ __remove_return_type
+ remove(const _Tp& __value)
+ {
+ if (!this->_M_iterators && !this->_M_const_iterators)
+ return _Base::remove(__value);
+
+#if !_GLIBCXX_USE_CXX11_ABI
+ size_type __removed __attribute__((__unused__)) = 0;
+#endif
+ _Base __to_destroy(get_allocator());
+ _Base_iterator __first = _Base::begin();
+ _Base_iterator __last = _Base::end();
+ while (__first != __last)
+ {
+ _Base_iterator __next = __first;
+ ++__next;
+ if (*__first == __value)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 526. Is it undefined if a function in the standard changes
+ // in parameters?
+ this->_M_invalidate_if(_Equal(__first));
+ __to_destroy.splice(__to_destroy.begin(), _M_base(), __first);
+#if !_GLIBCXX_USE_CXX11_ABI
+ _GLIBCXX20_ONLY( __removed++ );
+#endif
+ }
+
+ __first = __next;
+ }
+
+#if !_GLIBCXX_USE_CXX11_ABI
+ return _GLIBCXX20_ONLY( __removed );
+#else
+ return _GLIBCXX20_ONLY( __to_destroy.size() );
+#endif
+ }
+
+ template
+ __remove_return_type
+ remove_if(_Predicate __pred)
+ {
+ if (!this->_M_iterators && !this->_M_const_iterators)
+ return _Base::remove_if(__pred);
+
+#if !_GLIBCXX_USE_CXX11_ABI
+ size_type __removed __attribute__((__unused__)) = 0;
+#endif
+ _Base __to_destroy(get_allocator());
+ for (_Base_iterator __x = _Base::begin(); __x != _Base::end(); )
+ {
+ _Base_iterator __next = __x;
+ ++__next;
+ if (__pred(*__x))
+ {
+ this->_M_invalidate_if(_Equal(__x));
+ __to_destroy.splice(__to_destroy.begin(), _M_base(), __x);
+#if !_GLIBCXX_USE_CXX11_ABI
+ _GLIBCXX20_ONLY( __removed++ );
+#endif
+ }
+
+ __x = __next;
+ }
+
+#if !_GLIBCXX_USE_CXX11_ABI
+ return _GLIBCXX20_ONLY( __removed );
+#else
+ return _GLIBCXX20_ONLY( __to_destroy.size() );
+#endif
+ }
+
+ _GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG
+ __remove_return_type
+ unique()
+ {
+ if (!this->_M_iterators && !this->_M_const_iterators)
+ return _Base::unique();
+
+ if (empty())
+ return _GLIBCXX20_ONLY(0);
+
+#if !_GLIBCXX_USE_CXX11_ABI
+ size_type __removed __attribute__((__unused__)) = 0;
+#endif
+ _Base __to_destroy(get_allocator());
+ _Base_iterator __first = _Base::begin();
+ _Base_iterator __last = _Base::end();
+ _Base_iterator __next = __first;
+ while (++__next != __last)
+ if (*__first == *__next)
+ {
+ this->_M_invalidate_if(_Equal(__next));
+ __to_destroy.splice(__to_destroy.begin(), _M_base(), __next);
+ __next = __first;
+#if !_GLIBCXX_USE_CXX11_ABI
+ _GLIBCXX20_ONLY( __removed++ );
+#endif
+ }
+ else
+ __first = __next;
+
+#if !_GLIBCXX_USE_CXX11_ABI
+ return _GLIBCXX20_ONLY( __removed );
+#else
+ return _GLIBCXX20_ONLY( __to_destroy.size() );
+#endif
+ }
+
+ template
+ __remove_return_type
+ unique(_BinaryPredicate __binary_pred)
+ {
+ if (!this->_M_iterators && !this->_M_const_iterators)
+ return _Base::unique(__binary_pred);
+
+ if (empty())
+ return _GLIBCXX20_ONLY(0);
+
+
+#if !_GLIBCXX_USE_CXX11_ABI
+ size_type __removed __attribute__((__unused__)) = 0;
+#endif
+ _Base __to_destroy(get_allocator());
+ _Base_iterator __first = _Base::begin();
+ _Base_iterator __last = _Base::end();
+ _Base_iterator __next = __first;
+ while (++__next != __last)
+ if (__binary_pred(*__first, *__next))
+ {
+ this->_M_invalidate_if(_Equal(__next));
+ __to_destroy.splice(__to_destroy.begin(), _M_base(), __next);
+ __next = __first;
+#if !_GLIBCXX_USE_CXX11_ABI
+ _GLIBCXX20_ONLY( __removed++ );
+#endif
+ }
+ else
+ __first = __next;
+
+#if !_GLIBCXX_USE_CXX11_ABI
+ return _GLIBCXX20_ONLY( __removed );
+#else
+ return _GLIBCXX20_ONLY( __to_destroy.size() );
+#endif
+ }
+
+#undef _GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG
+#undef _GLIBCXX20_ONLY
+
+ void
+#if __cplusplus >= 201103L
+ merge(list&& __x)
+#else
+ merge(list& __x)
+#endif
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 300. list::merge() specification incomplete
+ if (this != std::__addressof(__x))
+ {
+ __glibcxx_check_sorted(_Base::begin(), _Base::end());
+ __glibcxx_check_sorted(__x.begin().base(), __x.end().base());
+ this->_M_transfer_from_if(__x, _Not_equal(__x._M_base().end()));
+ _Base::merge(_GLIBCXX_MOVE(__x._M_base()));
+ }
+ }
+
+#if __cplusplus >= 201103L
+ void
+ merge(list& __x)
+ { merge(std::move(__x)); }
+#endif
+
+ template
+ void
+#if __cplusplus >= 201103L
+ merge(list&& __x, _Compare __comp)
+#else
+ merge(list& __x, _Compare __comp)
+#endif
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 300. list::merge() specification incomplete
+ if (this != std::__addressof(__x))
+ {
+ __glibcxx_check_sorted_pred(_Base::begin(), _Base::end(),
+ __comp);
+ __glibcxx_check_sorted_pred(__x.begin().base(), __x.end().base(),
+ __comp);
+ this->_M_transfer_from_if(__x, _Not_equal(__x._M_base().end()));
+ _Base::merge(_GLIBCXX_MOVE(__x._M_base()), __comp);
+ }
+ }
+
+#if __cplusplus >= 201103L
+ template
+ void
+ merge(list& __x, _Compare __comp)
+ { merge(std::move(__x), __comp); }
+#endif
+
+ void
+ sort() { _Base::sort(); }
+
+ template
+ void
+ sort(_StrictWeakOrdering __pred) { _Base::sort(__pred); }
+
+ using _Base::reverse;
+
+ _Base&
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
+
+ const _Base&
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
+ };
+
+#if __cpp_deduction_guides >= 201606
+ template::value_type,
+ typename _Allocator = allocator<_ValT>,
+ typename = _RequireInputIter<_InputIterator>,
+ typename = _RequireAllocator<_Allocator>>
+ list(_InputIterator, _InputIterator, _Allocator = _Allocator())
+ -> list<_ValT, _Allocator>;
+#endif
+
+ template
+ inline bool
+ operator==(const list<_Tp, _Alloc>& __lhs,
+ const list<_Tp, _Alloc>& __rhs)
+ { return __lhs._M_base() == __rhs._M_base(); }
+
+#if __cpp_lib_three_way_comparison
+ template
+ constexpr __detail::__synth3way_t<_Tp>
+ operator<=>(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+ { return __x._M_base() <=> __y._M_base(); }
+#else
+ template
+ inline bool
+ operator!=(const list<_Tp, _Alloc>& __lhs,
+ const list<_Tp, _Alloc>& __rhs)
+ { return __lhs._M_base() != __rhs._M_base(); }
+
+ template
+ inline bool
+ operator<(const list<_Tp, _Alloc>& __lhs,
+ const list<_Tp, _Alloc>& __rhs)
+ { return __lhs._M_base() < __rhs._M_base(); }
+
+ template
+ inline bool
+ operator<=(const list<_Tp, _Alloc>& __lhs,
+ const list<_Tp, _Alloc>& __rhs)
+ { return __lhs._M_base() <= __rhs._M_base(); }
+
+ template
+ inline bool
+ operator>=(const list<_Tp, _Alloc>& __lhs,
+ const list<_Tp, _Alloc>& __rhs)
+ { return __lhs._M_base() >= __rhs._M_base(); }
+
+ template
+ inline bool
+ operator>(const list<_Tp, _Alloc>& __lhs,
+ const list<_Tp, _Alloc>& __rhs)
+ { return __lhs._M_base() > __rhs._M_base(); }
+#endif // three-way comparison
+
+ template
+ inline void
+ swap(list<_Tp, _Alloc>& __lhs, list<_Tp, _Alloc>& __rhs)
+ _GLIBCXX_NOEXCEPT_IF(noexcept(__lhs.swap(__rhs)))
+ { __lhs.swap(__rhs); }
+
+} // namespace __debug
+} // namespace std
+
+namespace __gnu_debug
+{
+#ifndef _GLIBCXX_USE_CXX11_ABI
+ // If not using C++11 list::size() is not in O(1) so we do not use it.
+ template
+ struct _Sequence_traits >
+ {
+ typedef typename std::__debug::list<_Tp, _Alloc>::iterator _It;
+
+ static typename _Distance_traits<_It>::__type
+ _S_size(const std::__debug::list<_Tp, _Alloc>& __seq)
+ {
+ return __seq.empty()
+ ? std::make_pair(0, __dp_exact) : std::make_pair(1, __dp_sign);
+ }
+ };
+#endif
+
+#ifndef _GLIBCXX_DEBUG_PEDANTIC
+ template
+ struct _Insert_range_from_self_is_safe >
+ { enum { __value = 1 }; };
+#endif
+}
+
+#endif
diff --git a/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/macros.h b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/macros.h
new file mode 100644
index 0000000..9e1288c
--- /dev/null
+++ b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/macros.h
@@ -0,0 +1,466 @@
+// Debugging support implementation -*- C++ -*-
+
+// Copyright (C) 2003-2021 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// .
+
+/** @file debug/macros.h
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_MACROS_H
+#define _GLIBCXX_DEBUG_MACROS_H 1
+
+/**
+ * Macros used by the implementation to verify certain
+ * properties. These macros may only be used directly by the debug
+ * wrappers. Note that these are macros (instead of the more obviously
+ * @a correct choice of making them functions) because we need line and
+ * file information at the call site, to minimize the distance between
+ * the user error and where the error is reported.
+ *
+ */
+#define _GLIBCXX_DEBUG_VERIFY_COND_AT(_Cond,_ErrMsg,_File,_Line,_Func) \
+ if (__builtin_expect(!bool(_Cond), false)) \
+ __gnu_debug::_Error_formatter::_S_at(_File, _Line, _Func) \
+ ._ErrMsg._M_error()
+
+#define _GLIBCXX_DEBUG_VERIFY_AT_F(_Cond,_ErrMsg,_File,_Line,_Func) \
+ do { \
+ __glibcxx_constexpr_assert(_Cond); \
+ _GLIBCXX_DEBUG_VERIFY_COND_AT(_Cond,_ErrMsg,_File,_Line,_Func); \
+ } while (false)
+
+#define _GLIBCXX_DEBUG_VERIFY_AT(_Cond,_ErrMsg,_File,_Line) \
+ _GLIBCXX_DEBUG_VERIFY_AT_F(_Cond,_ErrMsg,_File,_Line,__PRETTY_FUNCTION__)
+
+#define _GLIBCXX_DEBUG_VERIFY(_Cond,_ErrMsg) \
+ _GLIBCXX_DEBUG_VERIFY_AT_F(_Cond, _ErrMsg, __FILE__, __LINE__, \
+ __PRETTY_FUNCTION__)
+
+// Verify that [_First, _Last) forms a valid iterator range.
+#define __glibcxx_check_valid_range(_First,_Last) \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__valid_range(_First, _Last), \
+ _M_message(__gnu_debug::__msg_valid_range) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last))
+
+#define __glibcxx_check_valid_range_at(_First,_Last,_File,_Line,_Func) \
+_GLIBCXX_DEBUG_VERIFY_AT_F(__gnu_debug::__valid_range(_First, _Last), \
+ _M_message(__gnu_debug::__msg_valid_range) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last), \
+ _File,_Line,_Func)
+
+#define __glibcxx_check_valid_range2(_First,_Last,_Dist) \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__valid_range(_First, _Last, _Dist), \
+ _M_message(__gnu_debug::__msg_valid_range) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last))
+
+#define __glibcxx_check_valid_constructor_range(_First,_Last) \
+ __gnu_debug::__check_valid_range(_First, _Last, \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__)
+
+// Verify that [_First, _Last) forms a non-empty iterator range.
+#define __glibcxx_check_non_empty_range(_First,_Last) \
+_GLIBCXX_DEBUG_VERIFY(_First != _Last, \
+ _M_message(__gnu_debug::__msg_non_empty_range) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last))
+
+// Verify that [_First, _First + _Size) forms a valid range.
+#define __glibcxx_check_can_increment(_First,_Size) \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__can_advance(_First, _Size), \
+ _M_message(__gnu_debug::__msg_iter_subscript_oob) \
+ ._M_iterator(_First, #_First) \
+ ._M_integer(_Size, #_Size))
+
+#define __glibcxx_check_can_increment_dist(_First,_Dist,_Way) \
+ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__can_advance(_First, _Dist, _Way), \
+ _M_message(__gnu_debug::__msg_iter_subscript_oob) \
+ ._M_iterator(_First, #_First) \
+ ._M_integer(_Way * _Dist.first, #_Dist))
+
+#define __glibcxx_check_can_increment_range(_First1,_Last1,_First2) \
+ do \
+ { \
+ typename __gnu_debug::_Distance_traits<__decltype(_First1)>::__type __dist;\
+ _GLIBCXX_DEBUG_VERIFY_AT_F( \
+ __gnu_debug::__valid_range(_First1, _Last1, __dist),\
+ _M_message(__gnu_debug::__msg_valid_range) \
+ ._M_iterator(_First1, #_First1) \
+ ._M_iterator(_Last1, #_Last1), \
+ __FILE__,__LINE__,__PRETTY_FUNCTION__); \
+ _GLIBCXX_DEBUG_VERIFY_AT_F( \
+ __gnu_debug::__can_advance(_First2, __dist, 1), \
+ _M_message(__gnu_debug::__msg_iter_subscript_oob)\
+ ._M_iterator(_First2, #_First2) \
+ ._M_integer(__dist.first), \
+ __FILE__,__LINE__,__PRETTY_FUNCTION__); \
+ } while(false)
+
+#define __glibcxx_check_can_decrement_range(_First1,_Last1,_First2) \
+ do \
+ { \
+ typename __gnu_debug::_Distance_traits<__decltype(_First1)>::__type __dist;\
+ _GLIBCXX_DEBUG_VERIFY_AT_F( \
+ __gnu_debug::__valid_range(_First1, _Last1, __dist),\
+ _M_message(__gnu_debug::__msg_valid_range) \
+ ._M_iterator(_First1, #_First1) \
+ ._M_iterator(_Last1, #_Last1), \
+ __FILE__,__LINE__,__PRETTY_FUNCTION__); \
+ _GLIBCXX_DEBUG_VERIFY_AT_F( \
+ __gnu_debug::__can_advance(_First2, __dist, -1), \
+ _M_message(__gnu_debug::__msg_iter_subscript_oob)\
+ ._M_iterator(_First2, #_First2) \
+ ._M_integer(-__dist.first), \
+ __FILE__,__LINE__,__PRETTY_FUNCTION__); \
+ } while(false)
+
+/** Verify that we can insert into *this with the iterator _Position.
+ * Insertion into a container at a specific position requires that
+ * the iterator be nonsingular, either dereferenceable or past-the-end,
+ * and that it reference the sequence we are inserting into. Note that
+ * this macro is only valid when the container is a_Safe_sequence and
+ * the iterator is a _Safe_iterator.
+*/
+#define __glibcxx_check_insert(_Position) \
+_GLIBCXX_DEBUG_VERIFY(!_Position._M_singular(), \
+ _M_message(__gnu_debug::__msg_insert_singular) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_Position, #_Position)); \
+_GLIBCXX_DEBUG_VERIFY(_Position._M_attached_to(this), \
+ _M_message(__gnu_debug::__msg_insert_different) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_Position, #_Position))
+
+/** Verify that we can insert into *this after the iterator _Position.
+ * Insertion into a container after a specific position requires that
+ * the iterator be nonsingular, either dereferenceable or before-begin,
+ * and that it reference the sequence we are inserting into. Note that
+ * this macro is only valid when the container is a_Safe_sequence and
+ * the iterator is a _Safe_iterator.
+*/
+#define __glibcxx_check_insert_after(_Position) \
+__glibcxx_check_insert(_Position); \
+_GLIBCXX_DEBUG_VERIFY(!_Position._M_is_end(), \
+ _M_message(__gnu_debug::__msg_insert_after_end) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_Position, #_Position))
+
+/** Verify that we can insert the values in the iterator range
+ * [_First, _Last) into *this with the iterator _Position. Insertion
+ * into a container at a specific position requires that the iterator
+ * be nonsingular (i.e., either dereferenceable or past-the-end),
+ * that it reference the sequence we are inserting into, and that the
+ * iterator range [_First, _Last) is a valid (possibly empty)
+ * range which does not reference the sequence we are inserting into.
+ * Note that this macro is only valid when the container is a
+ * _Safe_sequence and the _Position iterator is a _Safe_iterator.
+*/
+#define __glibcxx_check_insert_range(_Position,_First,_Last,_Dist) \
+__glibcxx_check_valid_range2(_First,_Last,_Dist); \
+__glibcxx_check_insert(_Position); \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__foreign_iterator(_Position,_First,_Last),\
+ _M_message(__gnu_debug::__msg_insert_range_from_self)\
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last) \
+ ._M_sequence(*this, "this"))
+
+/** Verify that we can insert the values in the iterator range
+ * [_First, _Last) into *this after the iterator _Position. Insertion
+ * into a container after a specific position requires that the iterator
+ * be nonsingular (i.e., either dereferenceable or past-the-end),
+ * that it reference the sequence we are inserting into, and that the
+ * iterator range [_First, _Last) is a valid (possibly empty)
+ * range which does not reference the sequence we are inserting into.
+ * Note that this macro is only valid when the container is a
+ * _Safe_sequence and the _Position iterator is a _Safe_iterator.
+*/
+#define __glibcxx_check_insert_range_after(_Position,_First,_Last,_Dist)\
+__glibcxx_check_valid_range2(_First,_Last,_Dist); \
+__glibcxx_check_insert_after(_Position); \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__foreign_iterator(_Position,_First,_Last),\
+ _M_message(__gnu_debug::__msg_insert_range_from_self)\
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last) \
+ ._M_sequence(*this, "this"))
+
+/** Verify that we can erase the element referenced by the iterator
+ * _Position. We can erase the element if the _Position iterator is
+ * dereferenceable and references this sequence.
+*/
+#define __glibcxx_check_erase(_Position) \
+_GLIBCXX_DEBUG_VERIFY(_Position._M_dereferenceable(), \
+ _M_message(__gnu_debug::__msg_erase_bad) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_Position, #_Position)); \
+_GLIBCXX_DEBUG_VERIFY(_Position._M_attached_to(this), \
+ _M_message(__gnu_debug::__msg_erase_different) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_Position, #_Position))
+
+/** Verify that we can erase the element after the iterator
+ * _Position. We can erase the element if the _Position iterator is
+ * before a dereferenceable one and references this sequence.
+*/
+#define __glibcxx_check_erase_after(_Position) \
+_GLIBCXX_DEBUG_VERIFY(_Position._M_before_dereferenceable(), \
+ _M_message(__gnu_debug::__msg_erase_after_bad) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_Position, #_Position)); \
+_GLIBCXX_DEBUG_VERIFY(_Position._M_attached_to(this), \
+ _M_message(__gnu_debug::__msg_erase_different) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_Position, #_Position))
+
+/** Verify that we can erase the elements in the iterator range
+ * [_First, _Last). We can erase the elements if [_First, _Last) is a
+ * valid iterator range within this sequence.
+*/
+#define __glibcxx_check_erase_range(_First,_Last) \
+__glibcxx_check_valid_range(_First,_Last); \
+_GLIBCXX_DEBUG_VERIFY(_First._M_attached_to(this), \
+ _M_message(__gnu_debug::__msg_erase_different) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last))
+
+/** Verify that we can erase the elements in the iterator range
+ * (_First, _Last). We can erase the elements if (_First, _Last) is a
+ * valid iterator range within this sequence.
+*/
+#define __glibcxx_check_erase_range_after(_First,_Last) \
+_GLIBCXX_DEBUG_VERIFY(!_First._M_singular() && !_Last._M_singular(), \
+ _M_message(__gnu_debug::__msg_erase_different) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last)); \
+_GLIBCXX_DEBUG_VERIFY(_First._M_can_compare(_Last), \
+ _M_message(__gnu_debug::__msg_erase_different) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last)); \
+_GLIBCXX_DEBUG_VERIFY(_First._M_attached_to(this), \
+ _M_message(__gnu_debug::__msg_erase_different) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_First, #_First)); \
+_GLIBCXX_DEBUG_VERIFY(_First != _Last, \
+ _M_message(__gnu_debug::__msg_valid_range2) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last)); \
+_GLIBCXX_DEBUG_VERIFY(_First._M_incrementable(), \
+ _M_message(__gnu_debug::__msg_valid_range2) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last)); \
+_GLIBCXX_DEBUG_VERIFY(!_Last._M_is_before_begin(), \
+ _M_message(__gnu_debug::__msg_valid_range2) \
+ ._M_sequence(*this, "this") \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last)) \
+
+// Verify that the subscript _N is less than the container's size.
+#define __glibcxx_check_subscript(_N) \
+_GLIBCXX_DEBUG_VERIFY(_N < this->size(), \
+ _M_message(__gnu_debug::__msg_subscript_oob) \
+ ._M_sequence(*this, "this") \
+ ._M_integer(_N, #_N) \
+ ._M_integer(this->size(), "size"))
+
+// Verify that the bucket _N is less than the container's buckets count.
+#define __glibcxx_check_bucket_index(_N) \
+_GLIBCXX_DEBUG_VERIFY(_N < this->bucket_count(), \
+ _M_message(__gnu_debug::__msg_bucket_index_oob) \
+ ._M_sequence(*this, "this") \
+ ._M_integer(_N, #_N) \
+ ._M_integer(this->bucket_count(), "size"))
+
+// Verify that the container is nonempty
+#define __glibcxx_check_nonempty() \
+_GLIBCXX_DEBUG_VERIFY(! this->empty(), \
+ _M_message(__gnu_debug::__msg_empty) \
+ ._M_sequence(*this, "this"))
+
+// Verify that a predicate is irreflexive
+#define __glibcxx_check_irreflexive(_First,_Last) \
+ _GLIBCXX_DEBUG_VERIFY(_First == _Last || !(*_First < *_First), \
+ _M_message(__gnu_debug::__msg_irreflexive_ordering) \
+ ._M_iterator_value_type(_First, "< operator type"))
+
+#if __cplusplus >= 201103L
+# define __glibcxx_check_irreflexive2(_First,_Last) \
+ _GLIBCXX_DEBUG_VERIFY(_First == _Last \
+ || __gnu_debug::__is_irreflexive(_First), \
+ _M_message(__gnu_debug::__msg_irreflexive_ordering) \
+ ._M_iterator_value_type(_First, "< operator type"))
+#else
+# define __glibcxx_check_irreflexive2(_First,_Last)
+#endif
+
+#define __glibcxx_check_irreflexive_pred(_First,_Last,_Pred) \
+ _GLIBCXX_DEBUG_VERIFY(_First == _Last || !_Pred(*_First, *_First), \
+ _M_message(__gnu_debug::__msg_irreflexive_ordering) \
+ ._M_instance(_Pred, "functor") \
+ ._M_iterator_value_type(_First, "ordered type"))
+
+#if __cplusplus >= 201103L
+# define __glibcxx_check_irreflexive_pred2(_First,_Last,_Pred) \
+ _GLIBCXX_DEBUG_VERIFY(_First == _Last \
+ ||__gnu_debug::__is_irreflexive_pred(_First, _Pred), \
+ _M_message(__gnu_debug::__msg_irreflexive_ordering) \
+ ._M_instance(_Pred, "functor") \
+ ._M_iterator_value_type(_First, "ordered type"))
+#else
+# define __glibcxx_check_irreflexive_pred2(_First,_Last,_Pred)
+#endif
+
+// Verify that the iterator range [_First, _Last) is sorted
+#define __glibcxx_check_sorted(_First,_Last) \
+__glibcxx_check_valid_range(_First,_Last); \
+__glibcxx_check_irreflexive(_First,_Last); \
+ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_sorted( \
+ __gnu_debug::__base(_First), \
+ __gnu_debug::__base(_Last)), \
+ _M_message(__gnu_debug::__msg_unsorted) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last))
+
+/** Verify that the iterator range [_First, _Last) is sorted by the
+ predicate _Pred. */
+#define __glibcxx_check_sorted_pred(_First,_Last,_Pred) \
+__glibcxx_check_valid_range(_First,_Last); \
+__glibcxx_check_irreflexive_pred(_First,_Last,_Pred); \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_sorted( \
+ __gnu_debug::__base(_First), \
+ __gnu_debug::__base(_Last), _Pred), \
+ _M_message(__gnu_debug::__msg_unsorted_pred) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last) \
+ ._M_string(#_Pred))
+
+// Special variant for std::merge, std::includes, std::set_*
+#define __glibcxx_check_sorted_set(_First1,_Last1,_First2) \
+__glibcxx_check_valid_range(_First1,_Last1); \
+_GLIBCXX_DEBUG_VERIFY( \
+ __gnu_debug::__check_sorted_set(__gnu_debug::__base(_First1), \
+ __gnu_debug::__base(_Last1), _First2),\
+ _M_message(__gnu_debug::__msg_unsorted) \
+ ._M_iterator(_First1, #_First1) \
+ ._M_iterator(_Last1, #_Last1))
+
+// Likewise with a _Pred.
+#define __glibcxx_check_sorted_set_pred(_First1,_Last1,_First2,_Pred) \
+__glibcxx_check_valid_range(_First1,_Last1); \
+_GLIBCXX_DEBUG_VERIFY( \
+ __gnu_debug::__check_sorted_set(__gnu_debug::__base(_First1), \
+ __gnu_debug::__base(_Last1), \
+ _First2, _Pred), \
+ _M_message(__gnu_debug::__msg_unsorted_pred) \
+ ._M_iterator(_First1, #_First1) \
+ ._M_iterator(_Last1, #_Last1) \
+ ._M_string(#_Pred))
+
+/** Verify that the iterator range [_First, _Last) is partitioned
+ w.r.t. the value _Value. */
+#define __glibcxx_check_partitioned_lower(_First,_Last,_Value) \
+__glibcxx_check_valid_range(_First,_Last); \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower( \
+ __gnu_debug::__base(_First), \
+ __gnu_debug::__base(_Last), _Value), \
+ _M_message(__gnu_debug::__msg_unpartitioned) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last) \
+ ._M_string(#_Value))
+
+#define __glibcxx_check_partitioned_upper(_First,_Last,_Value) \
+__glibcxx_check_valid_range(_First,_Last); \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper( \
+ __gnu_debug::__base(_First), \
+ __gnu_debug::__base(_Last), _Value), \
+ _M_message(__gnu_debug::__msg_unpartitioned) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last) \
+ ._M_string(#_Value))
+
+/** Verify that the iterator range [_First, _Last) is partitioned
+ w.r.t. the value _Value and predicate _Pred. */
+#define __glibcxx_check_partitioned_lower_pred(_First,_Last,_Value,_Pred) \
+__glibcxx_check_valid_range(_First,_Last); \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower( \
+ __gnu_debug::__base(_First), \
+ __gnu_debug::__base(_Last), _Value, _Pred), \
+ _M_message(__gnu_debug::__msg_unpartitioned_pred) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last) \
+ ._M_string(#_Pred) \
+ ._M_string(#_Value))
+
+/** Verify that the iterator range [_First, _Last) is partitioned
+ w.r.t. the value _Value and predicate _Pred. */
+#define __glibcxx_check_partitioned_upper_pred(_First,_Last,_Value,_Pred) \
+__glibcxx_check_valid_range(_First,_Last); \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper( \
+ __gnu_debug::__base(_First), \
+ __gnu_debug::__base(_Last), _Value, _Pred), \
+ _M_message(__gnu_debug::__msg_unpartitioned_pred) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last) \
+ ._M_string(#_Pred) \
+ ._M_string(#_Value))
+
+// Verify that the iterator range [_First, _Last) is a heap
+#define __glibcxx_check_heap(_First,_Last) \
+ _GLIBCXX_DEBUG_VERIFY(std::__is_heap(__gnu_debug::__base(_First), \
+ __gnu_debug::__base(_Last)), \
+ _M_message(__gnu_debug::__msg_not_heap) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last))
+
+/** Verify that the iterator range [_First, _Last) is a heap
+ w.r.t. the predicate _Pred. */
+#define __glibcxx_check_heap_pred(_First,_Last,_Pred) \
+ _GLIBCXX_DEBUG_VERIFY(std::__is_heap(__gnu_debug::__base(_First), \
+ __gnu_debug::__base(_Last), \
+ _Pred), \
+ _M_message(__gnu_debug::__msg_not_heap_pred) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last) \
+ ._M_string(#_Pred))
+
+// Verify that load factor is positive
+#define __glibcxx_check_max_load_factor(_F) \
+_GLIBCXX_DEBUG_VERIFY(_F > 0.0f, \
+ _M_message(__gnu_debug::__msg_valid_load_factor) \
+ ._M_sequence(*this, "this"))
+
+#define __glibcxx_check_equal_allocs(_This, _Other) \
+_GLIBCXX_DEBUG_VERIFY(_This.get_allocator() == _Other.get_allocator(), \
+ _M_message(__gnu_debug::__msg_equal_allocs) \
+ ._M_sequence(_This, "this"))
+
+#define __glibcxx_check_string(_String) _GLIBCXX_DEBUG_PEDASSERT(_String != 0)
+#define __glibcxx_check_string_len(_String,_Len) \
+ _GLIBCXX_DEBUG_PEDASSERT(_String != 0 || _Len == 0)
+
+#endif
diff --git a/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/map b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/map
new file mode 100644
index 0000000..c539638
--- /dev/null
+++ b/external/ps2sdk/ee/mips64r5900el-ps2-elf/include/c++/11.2.0/debug/map
@@ -0,0 +1,46 @@
+// Debugging map/multimap implementation -*- C++ -*-
+
+// Copyright (C) 2003-2021 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// .
+
+/** @file debug/map
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_MAP
+#define _GLIBCXX_DEBUG_MAP 1
+
+#pragma GCC system_header
+
+#include
+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {
+ template
+ class map;
+ template
+ class multimap;
+} } // namespace std::__debug
+
+#include