LCOV - code coverage report
Current view: directory - cygdrive/c/program files/microsoft visual studio 9.0/vc/include - set (source / functions) Found Hit Coverage
Test: coverage.lcov Lines: 7 7 100.0 %
Date: 2014-09-25 Functions: 0 0 -

       1                 : // set standard header

       2                 : #pragma once
       3                 : #ifndef _SET_
       4                 : #define _SET_
       5                 : #ifndef RC_INVOKED
       6                 : #include <xtree>
       7                 : 
       8                 : #ifdef _MSC_VER
       9                 :  #pragma pack(push,_CRT_PACKING)
      10                 :  #pragma warning(push,3)
      11                 : #endif  /* _MSC_VER */
      12                 : _STD_BEGIN
      13                 : 
      14                 :                 // TEMPLATE CLASS _Tset_traits
      15                 : template<class _Kty, // key/value type
      16                 :         class _Pr,      // comparator predicate type
      17                 :         class _Alloc,   // actual allocator type (should be value allocator)
      18                 :         bool _Mfl>   // true if multiple equivalent keys are permitted
      19                 :         class _Tset_traits
      20                 :                 : public _CONTAINER_BASE_AUX_ALLOC<_Alloc>
      21                 :         {       // traits required to make _Tree behave like a set
      22                 : public:
      23                 :         typedef _Kty key_type;
      24                 :         typedef _Kty value_type;
      25                 :         typedef _Pr key_compare;
      26                 :         typedef typename _Alloc::template rebind<value_type>::other
      27                 :                 allocator_type;
      28                 : 
      29                 :         typedef typename allocator_type::const_pointer _ITptr;
      30                 :         typedef typename allocator_type::const_reference _IReft;
      31                 : 
      32                 :         enum
      33                 :                 {       // make multi parameter visible as an enumeration constant
      34                 :                 _Multi = _Mfl};
      35                 : 
      36                 :         _Tset_traits(_Pr _Parg, _Alloc _Al)
      37                 :                 : _CONTAINER_BASE_AUX_ALLOC<_Alloc>(_Al), comp(_Parg)
      38               1 :                 {       // construct with specified comparator

      39               1 :                 }

      40                 : 
      41                 :         typedef key_compare value_compare;
      42                 : 
      43                 :         static const _Kty& _Kfn(const value_type& _Val)
      44               1 :                 {       // extract key from element value

      45               1 :                 return (_Val);

      46               1 :                 }

      47                 : 
      48                 :         _Pr comp;       // the comparator predicate for keys
      49                 :         };
      50                 : 
      51                 :                 // TEMPLATE CLASS set
      52                 : template<class _Kty,
      53                 :         class _Pr = less<_Kty>,
      54                 :         class _Alloc = allocator<_Kty> >
      55                 :         class set
      56                 :                 : public _Tree<_Tset_traits<_Kty, _Pr, _Alloc, false> >
      57                 :         {       // ordered red-black tree of key values, unique keys
      58                 : public:
      59                 :         typedef set<_Kty, _Pr, _Alloc> _Myt;
      60                 :         typedef _Tree<_Tset_traits<_Kty, _Pr, _Alloc, false> > _Mybase;
      61                 :         typedef _Kty key_type;
      62                 :         typedef _Pr key_compare;
      63                 :         typedef typename _Mybase::value_compare value_compare;
      64                 :         typedef typename _Mybase::allocator_type allocator_type;
      65                 :         typedef typename _Mybase::size_type size_type;
      66                 :         typedef typename _Mybase::difference_type difference_type;
      67                 :         typedef typename _Mybase::pointer pointer;
      68                 :         typedef typename _Mybase::const_pointer const_pointer;
      69                 :         typedef typename _Mybase::reference reference;
      70                 :         typedef typename _Mybase::const_reference const_reference;
      71                 :         typedef typename _Mybase::iterator iterator;
      72                 :         typedef typename _Mybase::const_iterator const_iterator;
      73                 :         typedef typename _Mybase::reverse_iterator reverse_iterator;
      74                 :         typedef typename _Mybase::const_reverse_iterator
      75                 :                 const_reverse_iterator;
      76                 :         typedef typename _Mybase::value_type value_type;
      77                 : 
      78                 :         set()
      79                 :                 : _Mybase(key_compare(), allocator_type())
      80               1 :                 {       // construct empty set from defaults

      81               1 :                 }

      82                 : 
      83                 :         explicit set(const key_compare& _Pred)
      84                 :                 : _Mybase(_Pred, allocator_type())
      85                 :                 {       // construct empty set from comparator
      86                 :                 }
      87                 : 
      88                 :         set(const key_compare& _Pred, const allocator_type& _Al)
      89                 :                 : _Mybase(_Pred, _Al)
      90                 :                 {       // construct empty set from comparator and allocator
      91                 :                 }
      92                 : 
      93                 :         template<class _Iter>
      94                 :                 set(_Iter _First, _Iter _Last)
      95                 :                 : _Mybase(key_compare(), allocator_type())
      96                 :                 {       // construct set from [_First, _Last), defaults
      97                 :                 _DEBUG_RANGE(_First, _Last);
      98                 :                 for (; _First != _Last; ++_First)
      99                 :                         this->insert(*_First);
     100                 :                 }
     101                 : 
     102                 :         template<class _Iter>
     103                 :                 set(_Iter _First, _Iter _Last,
     104                 :                         const key_compare& _Pred)
     105                 :                 : _Mybase(_Pred, allocator_type())
     106                 :                 {       // construct set from [_First, _Last), comparator
     107                 :                 _DEBUG_RANGE(_First, _Last);
     108                 :                 for (; _First != _Last; ++_First)
     109                 :                         this->insert(*_First);
     110                 :                 }
     111                 : 
     112                 :         template<class _Iter>
     113                 :                 set(_Iter _First, _Iter _Last,
     114                 :                         const key_compare& _Pred, const allocator_type& _Al)
     115                 :                 : _Mybase(_Pred, _Al)
     116                 :                 {       // construct set from [_First, _Last), defaults, and allocator
     117                 :                 _DEBUG_RANGE(_First, _Last);
     118                 :                 for (; _First != _Last; ++_First)
     119                 :                         this->insert(*_First);
     120                 :                 }
     121                 : 
     122                 :  #if _HAS_STRICT_CONFORMANCE
     123                 :         void erase(const_iterator _Where)
     124                 :                 {       // erase element at _Where
     125                 :                 _Mybase::erase(_Where);
     126                 :                 }
     127                 : 
     128                 :         size_type erase(const key_type& _Keyval)
     129                 :                 {       // erase and count all that match _Keyval
     130                 :                 return (_Mybase::erase(_Keyval));
     131                 :                 }
     132                 : 
     133                 :         void erase(const_iterator _First, const_iterator _Last)
     134                 :                 {       // erase [_First, _Last)
     135                 :                 _Mybase::erase(_First, _Last);
     136                 :                 }
     137                 :  #endif /* _HAS_STRICT_CONFORMANCE */
     138                 : 
     139                 : 
     140                 : 
     141                 :         };
     142                 : 
     143                 :         // set implements a performant swap
     144                 : template<class _Kty, class _Pr, class _Alloc>
     145                 :         class _Move_operation_category<set<_Kty, _Pr, _Alloc> >
     146                 :         {
     147                 :         public:
     148                 :                 typedef _Swap_move_tag _Move_cat;
     149                 :         };
     150                 : 
     151                 : template<class _Kty,
     152                 :         class _Pr,
     153                 :         class _Alloc> inline
     154                 :         void swap(set<_Kty, _Pr, _Alloc>& _Left,
     155                 :                 set<_Kty, _Pr, _Alloc>& _Right)
     156                 :         {       // swap _Left and _Right sets
     157                 :         _Left.swap(_Right);
     158                 :         }
     159                 : 
     160                 :                 // TEMPLATE CLASS multiset
     161                 : template<class _Kty,
     162                 :         class _Pr = less<_Kty>,
     163                 :         class _Alloc = allocator<_Kty> >
     164                 :         class multiset
     165                 :                 : public _Tree<_Tset_traits<_Kty, _Pr, _Alloc, true> >
     166                 :         {       // ordered red-black tree of key values, non-unique keys
     167                 : public:
     168                 :         typedef multiset<_Kty, _Pr, _Alloc> _Myt;
     169                 :         typedef _Tree<_Tset_traits<_Kty, _Pr, _Alloc, true> > _Mybase;
     170                 :         typedef _Kty key_type;
     171                 :         typedef _Pr key_compare;
     172                 :         typedef typename _Mybase::value_compare value_compare;
     173                 :         typedef typename _Mybase::allocator_type allocator_type;
     174                 :         typedef typename _Mybase::size_type size_type;
     175                 :         typedef typename _Mybase::difference_type difference_type;
     176                 :         typedef typename _Mybase::pointer pointer;
     177                 :         typedef typename _Mybase::const_pointer const_pointer;
     178                 :         typedef typename _Mybase::reference reference;
     179                 :         typedef typename _Mybase::const_reference const_reference;
     180                 :         typedef typename _Mybase::iterator iterator;
     181                 :         typedef typename _Mybase::const_iterator const_iterator;
     182                 :         typedef typename _Mybase::reverse_iterator reverse_iterator;
     183                 :         typedef typename _Mybase::const_reverse_iterator
     184                 :                 const_reverse_iterator;
     185                 :         typedef typename _Mybase::value_type value_type;
     186                 : 
     187                 :         multiset()
     188                 :                 : _Mybase(key_compare(), allocator_type())
     189                 :                 {       // construct empty set from defaults
     190                 :                 }
     191                 : 
     192                 :         explicit multiset(const key_compare& _Pred)
     193                 :                 : _Mybase(_Pred, allocator_type())
     194                 :                 {       // construct empty set from comparator
     195                 :                 }
     196                 : 
     197                 :         multiset(const key_compare& _Pred, const allocator_type& _Al)
     198                 :                 : _Mybase(_Pred, _Al)
     199                 :                 {       // construct empty set from comparator and allocator
     200                 :                 }
     201                 : 
     202                 :         template<class _Iter>
     203                 :                 multiset(_Iter _First, _Iter _Last)
     204                 :                 : _Mybase(key_compare(), allocator_type())
     205                 :                 {       // construct set from [_First, _Last)
     206                 :                 _DEBUG_RANGE(_First, _Last);
     207                 :                 for (; _First != _Last; ++_First)
     208                 :                         this->insert(*_First);
     209                 :                 }
     210                 : 
     211                 :         template<class _Iter>
     212                 :                 multiset(_Iter _First, _Iter _Last,
     213                 :                         const key_compare& _Pred)
     214                 :                 : _Mybase(_Pred, allocator_type())
     215                 :                 {       // construct set from [_First, _Last), comparator
     216                 :                 _DEBUG_RANGE(_First, _Last);
     217                 :                 for (; _First != _Last; ++_First)
     218                 :                         this->insert(*_First);
     219                 :                 }
     220                 : 
     221                 :         template<class _Iter>
     222                 :                 multiset(_Iter _First, _Iter _Last,
     223                 :                         const key_compare& _Pred, const allocator_type& _Al)
     224                 :                 : _Mybase(_Pred, _Al)
     225                 :                 {       // construct set from [_First, _Last), comparator, and allocator
     226                 :                 _DEBUG_RANGE(_First, _Last);
     227                 :                 for (; _First != _Last; ++_First)
     228                 :                         this->insert(*_First);
     229                 :                 }
     230                 : 
     231                 :  #if _HAS_STRICT_CONFORMANCE
     232                 :         void erase(const_iterator _Where)
     233                 :                 {       // erase element at _Where
     234                 :                 _Mybase::erase(_Where);
     235                 :                 }
     236                 : 
     237                 :         size_type erase(const key_type& _Keyval)
     238                 :                 {       // erase and count all that match _Keyval
     239                 :                 return (_Mybase::erase(_Keyval));
     240                 :                 }
     241                 : 
     242                 :         void erase(const_iterator _First, const_iterator _Last)
     243                 :                 {       // erase [_First, _Last)
     244                 :                 _Mybase::erase(_First, _Last);
     245                 :                 }
     246                 :  #endif /* _HAS_STRICT_CONFORMANCE */
     247                 : 
     248                 :         iterator insert(const value_type& _Val)
     249                 :                 {       // insert a key value
     250                 :                 return (_Mybase::insert(_Val).first);
     251                 :                 }
     252                 : 
     253                 :         iterator insert(const_iterator _Where, const value_type& _Val)
     254                 :                 {       // insert a key value, with hint
     255                 :                 return (_Mybase::insert(_Where, _Val));
     256                 :                 }
     257                 : 
     258                 :         template<class _Iter>
     259                 :                 void insert(_Iter _First, _Iter _Last)
     260                 :                 {       // insert [_First, _Last)
     261                 : 
     262                 :  #if _HAS_ITERATOR_DEBUGGING
     263                 :                 _DEBUG_RANGE(_First, _Last);
     264                 :  #endif /* _HAS_ITERATOR_DEBUGGING */
     265                 : 
     266                 :                 for (; _First != _Last; ++_First)
     267                 :                         this->insert(*_First);
     268                 :                 }
     269                 :         };
     270                 : 
     271                 :         // multiset implements a performant swap
     272                 : template<class _Kty, class _Pr, class _Alloc>
     273                 :         class _Move_operation_category<multiset<_Kty, _Pr, _Alloc> >
     274                 :         {
     275                 :         public:
     276                 :                 typedef _Swap_move_tag _Move_cat;
     277                 :         };
     278                 : 
     279                 : template<class _Kty,
     280                 :         class _Pr,
     281                 :         class _Alloc> inline
     282                 :         void swap(multiset<_Kty, _Pr, _Alloc>& _Left,
     283                 :                 multiset<_Kty, _Pr, _Alloc>& _Right)
     284                 :         {       // swap _Left and _Right multisets
     285                 :         _Left.swap(_Right);
     286                 :         }
     287                 : 
     288                 :  #if _HAS_TRADITIONAL_STL
     289                 :  #define __set__        set
     290                 :  #define __multiset__   multiset
     291                 :  #endif /* _HAS_TRADITIONAL_STL */
     292                 : 
     293                 : _STD_END
     294                 : #ifdef _MSC_VER
     295                 :  #pragma warning(pop)
     296                 :  #pragma pack(pop)
     297                 : #endif  /* _MSC_VER */
     298                 : 
     299                 : #endif /* RC_INVOKED */
     300                 : #endif /* _SET_ */
     301                 : 
     302                 : /*
     303                 :  * Copyright (c) 1992-2007 by P.J. Plauger.  ALL RIGHTS RESERVED.
     304                 :  * Consult your license regarding permissions and restrictions.
     305                 :  V5.03:0009 */

Generated by: LCOV version 1.7