LCOV - code coverage report
Current view: top level - usr/include/c++/4.4/tr1_impl - unordered_set (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 8 0.0 %
Date: 2017-07-14 10:03:36 Functions: 0 36 0.0 %

          Line data    Source code
       1             : // TR1 unordered_set -*- C++ -*-
       2             : 
       3             : // Copyright (C) 2007, 2009 Free Software Foundation, Inc.
       4             : //
       5             : // This file is part of the GNU ISO C++ Library.  This library is free
       6             : // software; you can redistribute it and/or modify it under the
       7             : // terms of the GNU General Public License as published by the
       8             : // Free Software Foundation; either version 3, or (at your option)
       9             : // any later version.
      10             : 
      11             : // This library is distributed in the hope that it will be useful,
      12             : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13             : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14             : // GNU General Public License for more details.
      15             : 
      16             : // Under Section 7 of GPL version 3, you are granted additional
      17             : // permissions described in the GCC Runtime Library Exception, version
      18             : // 3.1, as published by the Free Software Foundation.
      19             : 
      20             : // You should have received a copy of the GNU General Public License and
      21             : // a copy of the GCC Runtime Library Exception along with this program;
      22             : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
      23             : // <http://www.gnu.org/licenses/>.
      24             : 
      25             : /** @file tr1_impl/unordered_set
      26             :  *  This is an internal header file, included by other library headers.
      27             :  *  You should not attempt to use it directly.
      28             :  */
      29             : 
      30             : namespace std
      31             : { 
      32             : _GLIBCXX_BEGIN_NAMESPACE_TR1
      33             : 
      34             :   // XXX When we get typedef templates these class definitions
      35             :   // will be unnecessary.
      36             :   template<class _Value,
      37             :            class _Hash = hash<_Value>,
      38             :            class _Pred = std::equal_to<_Value>,
      39             :            class _Alloc = std::allocator<_Value>,
      40             :            bool __cache_hash_code = false>
      41             :     class __unordered_set
      42             :     : public _Hashtable<_Value, _Value, _Alloc,
      43             :                         std::_Identity<_Value>, _Pred,
      44             :                         _Hash, __detail::_Mod_range_hashing,
      45             :                         __detail::_Default_ranged_hash,
      46             :                         __detail::_Prime_rehash_policy,
      47             :                         __cache_hash_code, true, true>
      48           0 :     {
      49             :       typedef _Hashtable<_Value, _Value, _Alloc,
      50             :                          std::_Identity<_Value>, _Pred,
      51             :                          _Hash, __detail::_Mod_range_hashing,
      52             :                          __detail::_Default_ranged_hash,
      53             :                          __detail::_Prime_rehash_policy,
      54             :                          __cache_hash_code, true, true>
      55             :         _Base;
      56             : 
      57             :     public:
      58             :       typedef typename _Base::size_type       size_type;
      59             :       typedef typename _Base::hasher          hasher;
      60             :       typedef typename _Base::key_equal       key_equal;
      61             :       typedef typename _Base::allocator_type  allocator_type;
      62             :       
      63             :       explicit
      64           0 :       __unordered_set(size_type __n = 10,
      65             :                       const hasher& __hf = hasher(),
      66             :                       const key_equal& __eql = key_equal(),
      67             :                       const allocator_type& __a = allocator_type())
      68             :       : _Base(__n, __hf, __detail::_Mod_range_hashing(),
      69             :               __detail::_Default_ranged_hash(), __eql,
      70           0 :               std::_Identity<_Value>(), __a)
      71           0 :       { }
      72             : 
      73             :       template<typename _InputIterator>
      74             :         __unordered_set(_InputIterator __f, _InputIterator __l, 
      75             :                         size_type __n = 10,
      76             :                         const hasher& __hf = hasher(), 
      77             :                         const key_equal& __eql = key_equal(), 
      78             :                         const allocator_type& __a = allocator_type())
      79             :         : _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
      80             :                 __detail::_Default_ranged_hash(), __eql,
      81             :                 std::_Identity<_Value>(), __a)
      82             :         { }
      83             : 
      84             : #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
      85             :       __unordered_set(__unordered_set&& __x)
      86             :       : _Base(std::forward<_Base>(__x)) { }
      87             : #endif
      88             :     };
      89             : 
      90             :   template<class _Value,
      91             :            class _Hash = hash<_Value>,
      92             :            class _Pred = std::equal_to<_Value>,
      93             :            class _Alloc = std::allocator<_Value>,
      94             :            bool __cache_hash_code = false>
      95             :     class __unordered_multiset
      96             :     : public _Hashtable<_Value, _Value, _Alloc,
      97             :                         std::_Identity<_Value>, _Pred,
      98             :                         _Hash, __detail::_Mod_range_hashing,
      99             :                         __detail::_Default_ranged_hash,
     100             :                         __detail::_Prime_rehash_policy,
     101             :                         __cache_hash_code, true, false>
     102             :     {
     103             :       typedef _Hashtable<_Value, _Value, _Alloc,
     104             :                          std::_Identity<_Value>, _Pred,
     105             :                          _Hash, __detail::_Mod_range_hashing,
     106             :                          __detail::_Default_ranged_hash,
     107             :                          __detail::_Prime_rehash_policy,
     108             :                          __cache_hash_code, true, false>
     109             :         _Base;
     110             : 
     111             :     public:
     112             :       typedef typename _Base::size_type       size_type;
     113             :       typedef typename _Base::hasher          hasher;
     114             :       typedef typename _Base::key_equal       key_equal;
     115             :       typedef typename _Base::allocator_type  allocator_type;
     116             :       
     117             :       explicit
     118             :       __unordered_multiset(size_type __n = 10,
     119             :                            const hasher& __hf = hasher(),
     120             :                            const key_equal& __eql = key_equal(),
     121             :                            const allocator_type& __a = allocator_type())
     122             :       : _Base(__n, __hf, __detail::_Mod_range_hashing(),
     123             :               __detail::_Default_ranged_hash(), __eql,
     124             :               std::_Identity<_Value>(), __a)
     125             :       { }
     126             : 
     127             : 
     128             :       template<typename _InputIterator>
     129             :         __unordered_multiset(_InputIterator __f, _InputIterator __l, 
     130             :                              typename _Base::size_type __n = 0,
     131             :                              const hasher& __hf = hasher(), 
     132             :                              const key_equal& __eql = key_equal(), 
     133             :                              const allocator_type& __a = allocator_type())
     134             :         : _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
     135             :                 __detail::_Default_ranged_hash(), __eql,
     136             :                 std::_Identity<_Value>(), __a)
     137             :         { }
     138             : 
     139             : #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
     140             :       __unordered_multiset(__unordered_multiset&& __x)
     141             :       : _Base(std::forward<_Base>(__x)) { }
     142             : #endif
     143             :     };
     144             : 
     145             :   template<class _Value, class _Hash, class _Pred, class _Alloc,
     146             :            bool __cache_hash_code>
     147             :     inline void
     148             :     swap(__unordered_set<_Value, _Hash, _Pred, _Alloc, __cache_hash_code>& __x,
     149             :          __unordered_set<_Value, _Hash, _Pred, _Alloc, __cache_hash_code>& __y)
     150             :     { __x.swap(__y); }
     151             : 
     152             :   template<class _Value, class _Hash, class _Pred, class _Alloc,
     153             :            bool __cache_hash_code>
     154             :     inline void
     155             :     swap(__unordered_multiset<_Value, _Hash, _Pred,
     156             :          _Alloc, __cache_hash_code>& __x,
     157             :          __unordered_multiset<_Value, _Hash, _Pred,
     158             :          _Alloc, __cache_hash_code>& __y)
     159             :     { __x.swap(__y); }
     160             : 
     161             : 
     162             :   /**
     163             :    *  @brief A standard container composed of unique keys (containing
     164             :    *  at most one of each key value) in which the elements' keys are
     165             :    *  the elements themselves.
     166             :    *
     167             :    *  @ingroup unordered_associative_containers
     168             :    *
     169             :    *  Meets the requirements of a <a href="tables.html#65">container</a>, and
     170             :    *  <a href="tables.html#xx">unordered associative container</a>
     171             :    *
     172             :    *  @param  Value  Type of key objects.
     173             :    *  @param  Hash  Hashing function object type, defaults to hash<Value>.
     174             :    *  @param  Pred  Predicate function object type, defaults to equal_to<Value>.
     175             :    *  @param  Alloc  Allocator type, defaults to allocator<Key>.
     176             :    */
     177             :   template<class _Value,
     178             :            class _Hash = hash<_Value>,
     179             :            class _Pred = std::equal_to<_Value>,
     180             :            class _Alloc = std::allocator<_Value> >
     181             :     class unordered_set
     182             :     : public __unordered_set<_Value, _Hash, _Pred, _Alloc>
     183           0 :     {
     184             :       typedef __unordered_set<_Value, _Hash, _Pred, _Alloc>  _Base;
     185             : 
     186             :     public:
     187             :       typedef typename _Base::value_type      value_type;
     188             :       typedef typename _Base::size_type       size_type;
     189             :       typedef typename _Base::hasher          hasher;
     190             :       typedef typename _Base::key_equal       key_equal;
     191             :       typedef typename _Base::allocator_type  allocator_type;
     192             :       
     193             :       explicit
     194           0 :       unordered_set(size_type __n = 10,
     195             :                     const hasher& __hf = hasher(),
     196             :                     const key_equal& __eql = key_equal(),
     197             :                     const allocator_type& __a = allocator_type())
     198           0 :       : _Base(__n, __hf, __eql, __a)
     199           0 :       { }
     200             : 
     201             :       template<typename _InputIterator>
     202             :         unordered_set(_InputIterator __f, _InputIterator __l, 
     203             :                       size_type __n = 10,
     204             :                       const hasher& __hf = hasher(), 
     205             :                       const key_equal& __eql = key_equal(), 
     206             :                       const allocator_type& __a = allocator_type())
     207             :         : _Base(__f, __l, __n, __hf, __eql, __a)
     208             :         { }
     209             : 
     210             : #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
     211             :       unordered_set(unordered_set&& __x)
     212             :       : _Base(std::forward<_Base>(__x)) { }
     213             : 
     214             :       unordered_set(initializer_list<value_type> __l,
     215             :                     size_type __n = 10,
     216             :                     const hasher& __hf = hasher(),
     217             :                     const key_equal& __eql = key_equal(),
     218             :                     const allocator_type& __a = allocator_type())
     219             :         : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
     220             :       { }
     221             : 
     222             :       unordered_set&
     223             :       operator=(unordered_set&& __x)
     224             :       {
     225             :         // NB: DR 675.
     226             :         this->clear();
     227             :         this->swap(__x); 
     228             :         return *this;   
     229             :       }
     230             : 
     231             :       unordered_set&
     232             :       operator=(initializer_list<value_type> __l)
     233             :       {
     234             :         this->clear();
     235             :         this->insert(__l.begin(), __l.end());
     236             :         return *this;
     237             :       }
     238             : #endif
     239             :     };
     240             : 
     241             :   /**
     242             :    *  @brief A standard container composed of equivalent keys
     243             :    *  (possibly containing multiple of each key value) in which the
     244             :    *  elements' keys are the elements themselves.
     245             :    *
     246             :    *  @ingroup unordered_associative_containers
     247             :    *
     248             :    *  Meets the requirements of a <a href="tables.html#65">container</a>, and
     249             :    *  <a href="tables.html#xx">unordered associative container</a>
     250             :    *
     251             :    *  @param  Value  Type of key objects.
     252             :    *  @param  Hash  Hashing function object type, defaults to hash<Value>.
     253             :    *  @param  Pred  Predicate function object type, defaults to equal_to<Value>.
     254             :    *  @param  Alloc  Allocator type, defaults to allocator<Key>.
     255             :    */
     256             :   template<class _Value,
     257             :            class _Hash = hash<_Value>,
     258             :            class _Pred = std::equal_to<_Value>,
     259             :            class _Alloc = std::allocator<_Value> >
     260             :     class unordered_multiset
     261             :     : public __unordered_multiset<_Value, _Hash, _Pred, _Alloc>
     262             :     {
     263             :       typedef __unordered_multiset<_Value, _Hash, _Pred, _Alloc>  _Base;
     264             : 
     265             :     public:
     266             :       typedef typename _Base::value_type      value_type;
     267             :       typedef typename _Base::size_type       size_type;
     268             :       typedef typename _Base::hasher          hasher;
     269             :       typedef typename _Base::key_equal       key_equal;
     270             :       typedef typename _Base::allocator_type  allocator_type;
     271             :       
     272             :       explicit
     273             :       unordered_multiset(size_type __n = 10,
     274             :                          const hasher& __hf = hasher(),
     275             :                          const key_equal& __eql = key_equal(),
     276             :                          const allocator_type& __a = allocator_type())
     277             :       : _Base(__n, __hf, __eql, __a)
     278             :       { }
     279             : 
     280             : 
     281             :       template<typename _InputIterator>
     282             :         unordered_multiset(_InputIterator __f, _InputIterator __l, 
     283             :                            typename _Base::size_type __n = 0,
     284             :                            const hasher& __hf = hasher(), 
     285             :                            const key_equal& __eql = key_equal(), 
     286             :                            const allocator_type& __a = allocator_type())
     287             :         : _Base(__f, __l, __n, __hf, __eql, __a)
     288             :         { }
     289             : 
     290             : #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
     291             :       unordered_multiset(unordered_multiset&& __x)
     292             :       : _Base(std::forward<_Base>(__x)) { }
     293             : 
     294             :       unordered_multiset(initializer_list<value_type> __l,
     295             :                          size_type __n = 10,
     296             :                          const hasher& __hf = hasher(),
     297             :                          const key_equal& __eql = key_equal(),
     298             :                          const allocator_type& __a = allocator_type())
     299             :         : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
     300             :       { }
     301             : 
     302             :       unordered_multiset&
     303             :       operator=(unordered_multiset&& __x)
     304             :       {
     305             :         // NB: DR 675.
     306             :         this->clear();
     307             :         this->swap(__x); 
     308             :         return *this;   
     309             :       }
     310             : 
     311             :       unordered_multiset&
     312             :       operator=(initializer_list<value_type> __l)
     313             :       {
     314             :         this->clear();
     315             :         this->insert(__l.begin(), __l.end());
     316             :         return *this;
     317             :       }
     318             : #endif
     319             :     };
     320             : 
     321             :   template<class _Value, class _Hash, class _Pred, class _Alloc>
     322             :     inline void
     323             :     swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
     324             :          unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
     325             :     { __x.swap(__y); }
     326             : 
     327             :   template<class _Value, class _Hash, class _Pred, class _Alloc>
     328             :     inline void
     329             :     swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
     330             :          unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
     331             :     { __x.swap(__y); }
     332             : 
     333             : #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
     334             :   template<class _Value, class _Hash, class _Pred, class _Alloc>
     335             :     inline void
     336             :     swap(unordered_set<_Value, _Hash, _Pred, _Alloc>&& __x,
     337             :          unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
     338             :     { __x.swap(__y); }
     339             : 
     340             :   template<class _Value, class _Hash, class _Pred, class _Alloc>
     341             :     inline void
     342             :     swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
     343             :          unordered_set<_Value, _Hash, _Pred, _Alloc>&& __y)
     344             :     { __x.swap(__y); }
     345             : 
     346             :   template<class _Value, class _Hash, class _Pred, class _Alloc>
     347             :     inline void
     348             :     swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>&& __x,
     349             :          unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
     350             :     { __x.swap(__y); }
     351             : 
     352             :   template<class _Value, class _Hash, class _Pred, class _Alloc>
     353             :     inline void
     354             :     swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
     355             :          unordered_multiset<_Value, _Hash, _Pred, _Alloc>&& __y)
     356             :     { __x.swap(__y); }
     357             : #endif
     358             : 
     359             : _GLIBCXX_END_NAMESPACE_TR1
     360             : }

Generated by: LCOV version 1.11