51#ifdef PB_DS_LU_MAP_TRACE_ 
   60#ifdef PB_DS_DATA_TRUE_INDICATOR 
   61#define PB_DS_LU_NAME lu_map 
   64#ifdef PB_DS_DATA_FALSE_INDICATOR 
   65#define PB_DS_LU_NAME lu_set 
   68#define PB_DS_CLASS_T_DEC \ 
   69    template<typename Key, typename Mapped, typename Eq_Fn, \ 
   70             typename _Alloc, typename Update_Policy> 
   72#define PB_DS_CLASS_C_DEC \ 
   73    PB_DS_LU_NAME<Key, Mapped, Eq_Fn, _Alloc, Update_Policy> 
   75#define PB_DS_LU_TRAITS_BASE \ 
   76    types_traits<Key, Mapped, _Alloc, false> 
   79#define PB_DS_DEBUG_MAP_BASE_C_DEC \ 
   80    debug_map_base<Key, Eq_Fn, \ 
   81                   typename rebind_traits<_Alloc, Key>::const_reference> 
   86    template<
typename Key,
 
   90             typename Update_Policy>
 
   93      protected PB_DS_DEBUG_MAP_BASE_C_DEC,
 
   95      public PB_DS_LU_TRAITS_BASE
 
  101     : 
public lu_map_entry_metadata_base<typename Update_Policy::metadata_type>
 
  108      typedef typename entry_alloc_traits::allocator_type entry_allocator;
 
  109      typedef typename entry_alloc_traits::pointer        entry_pointer;
 
  110      typedef typename entry_alloc_traits::const_pointer  const_entry_pointer;
 
  111      typedef typename entry_alloc_traits::reference      entry_reference;
 
  112      typedef typename entry_alloc_traits::const_reference const_entry_reference;
 
  115      typedef typename entry_pointer_alloc_traits::allocator_type entry_pointer_allocator;
 
  116      typedef typename entry_pointer_alloc_traits::pointer entry_pointer_array;
 
  119      typedef typename traits_base::pointer pointer_;
 
  120      typedef typename traits_base::const_pointer const_pointer_;
 
  121      typedef typename traits_base::reference reference_;
 
  122      typedef typename traits_base::const_reference const_reference_;
 
  124#define PB_DS_GEN_POS entry_pointer 
  135      typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base;
 
  141      typedef _Alloc allocator_type;
 
  142      typedef typename _Alloc::size_type size_type;
 
  143      typedef typename _Alloc::difference_type difference_type;
 
  145      typedef Update_Policy update_policy;
 
  146      typedef typename Update_Policy::metadata_type update_metadata;
 
  147      typedef typename traits_base::key_type key_type;
 
  148      typedef typename traits_base::key_pointer key_pointer;
 
  149      typedef typename traits_base::key_const_pointer key_const_pointer;
 
  150      typedef typename traits_base::key_reference key_reference;
 
  151      typedef typename traits_base::key_const_reference key_const_reference;
 
  152      typedef typename traits_base::mapped_type mapped_type;
 
  153      typedef typename traits_base::mapped_pointer mapped_pointer;
 
  154      typedef typename traits_base::mapped_const_pointer mapped_const_pointer;
 
  155      typedef typename traits_base::mapped_reference mapped_reference;
 
  156      typedef typename traits_base::mapped_const_reference mapped_const_reference;
 
  158      typedef typename traits_base::pointer pointer;
 
  159      typedef typename traits_base::const_pointer const_pointer;
 
  160      typedef typename traits_base::reference reference;
 
  161      typedef typename traits_base::const_reference const_reference;
 
  163#ifdef PB_DS_DATA_TRUE_INDICATOR 
  164      typedef point_iterator_                   point_iterator;
 
  167#ifdef PB_DS_DATA_FALSE_INDICATOR 
  168      typedef point_const_iterator_             point_iterator;
 
  171      typedef point_const_iterator_             point_const_iterator;
 
  173#ifdef PB_DS_DATA_TRUE_INDICATOR 
  174      typedef iterator_                         iterator;
 
  177#ifdef PB_DS_DATA_FALSE_INDICATOR 
  178      typedef const_iterator_                   iterator;
 
  181      typedef const_iterator_                   const_iterator;
 
  186      PB_DS_LU_NAME(
const PB_DS_CLASS_C_DEC&);
 
  191      template<
typename It>
 
  192      PB_DS_LU_NAME(It, It);
 
  195      swap(PB_DS_CLASS_C_DEC&);
 
  203      _GLIBCXX_NODISCARD 
inline bool 
  206      inline mapped_reference
 
  207      operator[](key_const_reference r_key)
 
  209#ifdef PB_DS_DATA_TRUE_INDICATOR 
  210        _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
 
  211        return insert(std::make_pair(r_key, mapped_type())).first->second;
 
  214        return traits_base::s_null_type;
 
  219      insert(const_reference);
 
  221      inline point_iterator
 
  222      find(key_const_reference r_key)
 
  224        _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
 
  225        entry_pointer p_e = find_imp(r_key);
 
  226        return point_iterator(p_e == 0 ? 0: &p_e->m_value);
 
  229      inline point_const_iterator
 
  230      find(key_const_reference r_key)
 const 
  232        _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
 
  233        entry_pointer p_e = find_imp(r_key);
 
  234        return point_const_iterator(p_e == 0 ? 0: &p_e->m_value);
 
  238      erase(key_const_reference);
 
  240      template<
typename Pred>
 
  250      inline const_iterator
 
  256      inline const_iterator
 
  261      assert_valid(
const char* file, 
int line) 
const;
 
  264#ifdef PB_DS_LU_MAP_TRACE_ 
  271      template<
typename It>
 
  273      copy_from_range(It, It);
 
  276#ifdef PB_DS_DATA_TRUE_INDICATOR 
  277      friend class iterator_;
 
  280      friend class const_iterator_;
 
  283      allocate_new_entry(const_reference, false_type);
 
  286      allocate_new_entry(const_reference, true_type);
 
  288      template<
typename Metadata>
 
  290      init_entry_metadata(entry_pointer, type_to_type<Metadata>);
 
  293      init_entry_metadata(entry_pointer, type_to_type<null_type>);
 
  299      erase_next(entry_pointer);
 
  302      actual_erase_entry(entry_pointer);
 
  305      inc_it_state(const_pointer& r_p_value, entry_pointer& r_pos)
 const 
  307        r_pos = r_pos->m_p_next;
 
  308        r_p_value = (r_pos == 0) ? 0 : &r_pos->m_value;
 
  311      template<
typename Metadata>
 
  313      apply_update(entry_pointer, type_to_type<Metadata>);
 
  316      apply_update(entry_pointer, type_to_type<null_type>);
 
  319      find_imp(key_const_reference) 
const;
 
  321      static entry_allocator                    s_entry_allocator;
 
  322      static Eq_Fn                              s_eq_fn;
 
  323      static Update_Policy                      s_update_policy;
 
  324      static type_to_type<update_metadata>      s_metadata_type_indicator;
 
  327      mutable entry_pointer                     m_p_l;
 
  339#undef PB_DS_CLASS_T_DEC 
  340#undef PB_DS_CLASS_C_DEC 
  341#undef PB_DS_LU_TRAITS_BASE 
  342#undef PB_DS_DEBUG_MAP_BASE_C_DEC 
GNU extensions for policy-based data structures for public use.
Struct holding two objects of arbitrary type.
Represents no type, or absence of type, for template tricks.
Conditional deallocate constructor argument.
Consistent API for accessing allocator-related types.