epoc32/include/stdapis/boost/ptr_container/detail/map_iterator.hpp
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
//
williamr@2
     2
// Boost.Pointer Container
williamr@2
     3
//
williamr@2
     4
//  Copyright Thorsten Ottosen 2003-2005. Use, modification and
williamr@2
     5
//  distribution is subject to the Boost Software License, Version
williamr@2
     6
//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
williamr@2
     7
//  http://www.boost.org/LICENSE_1_0.txt)
williamr@2
     8
//
williamr@2
     9
// For more information, see http://www.boost.org/libs/ptr_container/
williamr@2
    10
//
williamr@2
    11
williamr@2
    12
#ifndef BOOST_PTR_CONTAINER_MAP_ITERATOR_HPP
williamr@2
    13
#define BOOST_PTR_CONTAINER_MAP_ITERATOR_HPP
williamr@2
    14
williamr@2
    15
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
williamr@2
    16
# pragma once
williamr@2
    17
#endif
williamr@2
    18
williamr@2
    19
#include <boost/config.hpp>
williamr@2
    20
#include <boost/iterator/iterator_adaptor.hpp>
williamr@2
    21
#include <utility>
williamr@2
    22
williamr@2
    23
namespace boost
williamr@2
    24
{ 
williamr@2
    25
    namespace ptr_container_detail
williamr@2
    26
    {
williamr@2
    27
        template< class F, class S >
williamr@2
    28
        struct ref_pair
williamr@2
    29
        {
williamr@2
    30
            typedef F first_type;
williamr@2
    31
            typedef S second_type;
williamr@2
    32
williamr@2
    33
            const F& first;
williamr@2
    34
            S        second;
williamr@2
    35
williamr@2
    36
            template< class F2, class S2 >
williamr@2
    37
            ref_pair( const std::pair<F2,S2>& p )
williamr@2
    38
            : first(p.first), second(static_cast<S>(p.second))
williamr@2
    39
            { }
williamr@2
    40
williamr@2
    41
            template< class RP >
williamr@2
    42
            ref_pair( const RP* rp )
williamr@2
    43
            : first(rp->first), second(rp->second)
williamr@2
    44
            { }
williamr@2
    45
            
williamr@2
    46
            const ref_pair* const operator->() const
williamr@2
    47
            {
williamr@2
    48
                return this;
williamr@2
    49
            }
williamr@2
    50
        };
williamr@2
    51
    }
williamr@2
    52
    
williamr@2
    53
    template< 
williamr@2
    54
              class I, // base iterator 
williamr@2
    55
              class F, // first type, key type
williamr@2
    56
              class S  // second type, mapped type
williamr@2
    57
            > 
williamr@2
    58
    class ptr_map_iterator : 
williamr@2
    59
        public boost::iterator_adaptor< ptr_map_iterator<I,F,S>, I, 
williamr@2
    60
                                        ptr_container_detail::ref_pair<F,S>, 
williamr@2
    61
                                        use_default, 
williamr@2
    62
                                        ptr_container_detail::ref_pair<F,S> >
williamr@2
    63
    {
williamr@2
    64
        typedef boost::iterator_adaptor< ptr_map_iterator<I,F,S>, I, 
williamr@2
    65
                                         ptr_container_detail::ref_pair<F,S>,
williamr@2
    66
                                         use_default, 
williamr@2
    67
                                         ptr_container_detail::ref_pair<F,S> > 
williamr@2
    68
            base_type;
williamr@2
    69
williamr@2
    70
williamr@2
    71
    public:
williamr@2
    72
        ptr_map_iterator() : base_type()                                 
williamr@2
    73
        { }
williamr@2
    74
        
williamr@2
    75
        explicit ptr_map_iterator( const I& i ) : base_type(i)
williamr@2
    76
        { }
williamr@2
    77
williamr@2
    78
        template< class I2, class F2, class S2 >
williamr@2
    79
            ptr_map_iterator( const ptr_map_iterator<I2,F2,S2>& r ) 
williamr@2
    80
         : base_type(r.base())
williamr@2
    81
        { }
williamr@2
    82
        
williamr@2
    83
   }; // class 'ptr_map_iterator'
williamr@2
    84
williamr@2
    85
}
williamr@2
    86
williamr@2
    87
#endif