80 #ifdef PB_DS_DATA_TRUE_INDICATOR 
   81 # define PB_DS_S_TREE_NAME splay_tree_map 
   82 # define PB_DS_S_TREE_BASE_NAME bin_search_tree_map 
   85 #ifdef PB_DS_DATA_FALSE_INDICATOR 
   86 # define PB_DS_S_TREE_NAME splay_tree_set 
   87 # define PB_DS_S_TREE_BASE_NAME bin_search_tree_set 
   90 #define PB_DS_CLASS_T_DEC \ 
   91     template<typename Key, typename Mapped, typename Cmp_Fn, \ 
   92          typename Node_And_It_Traits, typename _Alloc> 
   94 #define PB_DS_CLASS_C_DEC \ 
   95     PB_DS_S_TREE_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, _Alloc> 
   97 #define PB_DS_S_TREE_BASE \ 
   98     PB_DS_S_TREE_BASE_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, _Alloc> 
  105     template<
typename Key, 
typename Mapped, 
typename Cmp_Fn,
 
  106          typename Node_And_It_Traits, 
typename _Alloc>
 
  107     class PB_DS_S_TREE_NAME : 
public PB_DS_S_TREE_BASE
 
  110       typedef PB_DS_S_TREE_BASE                  base_type;
 
  111 #ifdef _GLIBCXX_DEBUG 
  112       typedef base_type debug_base;
 
  114       typedef typename base_type::node_pointer       node_pointer;
 
  118       typedef _Alloc                     allocator_type;
 
  119       typedef typename _Alloc::size_type         size_type;
 
  120       typedef typename _Alloc::difference_type       difference_type;
 
  121       typedef Cmp_Fn                     cmp_fn;
 
  122       typedef typename base_type::key_type       key_type;
 
  123       typedef typename base_type::key_pointer        key_pointer;
 
  124       typedef typename base_type::key_const_pointer      key_const_pointer;
 
  125       typedef typename base_type::key_reference      key_reference;
 
  126       typedef typename base_type::key_const_reference    key_const_reference;
 
  127       typedef typename base_type::mapped_type        mapped_type;
 
  128       typedef typename base_type::mapped_pointer     mapped_pointer;
 
  129       typedef typename base_type::mapped_const_pointer   mapped_const_pointer;
 
  130       typedef typename base_type::mapped_reference   mapped_reference;
 
  131       typedef typename base_type::mapped_const_reference mapped_const_reference;
 
  132       typedef typename base_type::value_type         value_type;
 
  133       typedef typename base_type::pointer        pointer;
 
  134       typedef typename base_type::const_pointer      const_pointer;
 
  135       typedef typename base_type::reference          reference;
 
  136       typedef typename base_type::const_reference    const_reference;
 
  137       typedef typename base_type::point_iterator     point_iterator;
 
  138       typedef typename base_type::const_iterator     point_const_iterator;
 
  139       typedef typename base_type::iterator       iterator;
 
  140       typedef typename base_type::const_iterator     const_iterator;
 
  141       typedef typename base_type::reverse_iterator   reverse_iterator;
 
  142       typedef typename base_type::const_reverse_iterator const_reverse_iterator;
 
  143       typedef typename base_type::node_update        node_update;
 
  147       PB_DS_S_TREE_NAME(
const Cmp_Fn&);
 
  149       PB_DS_S_TREE_NAME(
const Cmp_Fn&, 
const node_update&);
 
  151       PB_DS_S_TREE_NAME(
const PB_DS_CLASS_C_DEC&);
 
  154       swap(PB_DS_CLASS_C_DEC&);
 
  156       template<
typename It>
 
  158       copy_from_range(It, It);
 
  164       insert(const_reference r_value);
 
  166       inline mapped_reference
 
  167       operator[](key_const_reference r_key)
 
  169 #ifdef PB_DS_DATA_TRUE_INDICATOR 
  170     _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
 
  172       insert_leaf_imp(value_type(r_key, mapped_type()));
 
  174     ins_pair.first.m_p_nd->m_special = 
false;
 
  175     _GLIBCXX_DEBUG_ONLY(base_type::assert_valid(__FILE__, __LINE__));
 
  176     splay(ins_pair.first.m_p_nd);
 
  177     _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
 
  178     return ins_pair.first.m_p_nd->m_value.second;
 
  181     return base_type::s_null_type;
 
  185       inline point_iterator
 
  186       find(key_const_reference);
 
  188       inline point_const_iterator
 
  189       find(key_const_reference) 
const;
 
  192       erase(key_const_reference);
 
  197       inline reverse_iterator
 
  198       erase(reverse_iterator);
 
  200       template<
typename Pred>
 
  205       join(PB_DS_CLASS_C_DEC&);
 
  208       split(key_const_reference, PB_DS_CLASS_C_DEC&);
 
  212       insert_leaf_imp(const_reference);
 
  215       find_imp(key_const_reference);
 
  217       inline const node_pointer
 
  218       find_imp(key_const_reference) 
const;
 
  220 #ifdef _GLIBCXX_DEBUG 
  222       assert_valid(
const char* file, 
int line) 
const;
 
  225       assert_special_imp(
const node_pointer, 
const char* file, 
int line) 
const;
 
  232       splay_zig_zag_left(node_pointer, node_pointer, node_pointer);
 
  235       splay_zig_zag_right(node_pointer, node_pointer, node_pointer);
 
  238       splay_zig_zig_left(node_pointer, node_pointer, node_pointer);
 
  241       splay_zig_zig_right(node_pointer, node_pointer, node_pointer);
 
  244       splay_zz_start(node_pointer, node_pointer, node_pointer);
 
  247       splay_zz_end(node_pointer, node_pointer, node_pointer);
 
  250       leftmost(node_pointer);
 
  253       erase_node(node_pointer);
 
  256 #define PB_DS_ASSERT_BASE_NODE_CONSISTENT(_Node)            \ 
  257   _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(_Node,      \ 
  258                             __FILE__, __LINE__);) 
  268 #undef PB_DS_ASSERT_BASE_NODE_CONSISTENT 
  269 #undef PB_DS_CLASS_T_DEC 
  270 #undef PB_DS_CLASS_C_DEC 
  271 #undef PB_DS_S_TREE_NAME 
  272 #undef PB_DS_S_TREE_BASE_NAME 
  273 #undef PB_DS_S_TREE_BASE 
GNU extensions for policy-based data structures for public use. 
 
Struct holding two objects of arbitrary type. 
 
void swap(_Tp &, _Tp &) noexcept(__and_< is_nothrow_move_constructible< _Tp >, is_nothrow_move_assignable< _Tp >>::value)
Swaps two values.