source: vendor/nemo/current/NEMOGCM/EXTERNAL/XIOS/extern/boost/include/boost/algorithm/string/detail/util.hpp @ 44

Last change on this file since 44 was 44, checked in by cholod, 12 years ago

Load NEMO_TMP into vendor/nemo/current.

File size: 3.4 KB
Line 
1//  Boost string_algo library util.hpp header file  ---------------------------//
2
3//  Copyright Pavol Droba 2002-2003.
4//
5// Distributed under the Boost Software License, Version 1.0.
6//    (See accompanying file LICENSE_1_0.txt or copy at
7//          http://www.boost.org/LICENSE_1_0.txt)
8
9//  See http://www.boost.org/ for updates, documentation, and revision history.
10
11#ifndef BOOST_STRING_UTIL_DETAIL_HPP
12#define BOOST_STRING_UTIL_DETAIL_HPP
13
14#include <boost/algorithm/string/config.hpp>
15#include <functional>
16#include <boost/range/iterator_range.hpp>
17
18namespace boost {
19    namespace algorithm {
20        namespace detail {
21
22//  empty container  -----------------------------------------------//
23
24            //  empty_container
25            /*
26                This class represents always empty container,
27                containing elements of type CharT.
28
29                It is supposed to be used in a const version only
30            */
31            template< typename CharT >
32            struct empty_container
33            {
34                typedef empty_container<CharT> type;       
35                typedef CharT value_type;
36                typedef std::size_t size_type;
37                typedef std::ptrdiff_t difference_type;
38                typedef const value_type& reference;
39                typedef const value_type& const_reference;
40                typedef const value_type* iterator;
41                typedef const value_type* const_iterator;
42
43               
44                // Operations
45                const_iterator begin() const
46                {
47                    return reinterpret_cast<const_iterator>(0);
48                }
49
50                const_iterator end() const
51                {
52                    return reinterpret_cast<const_iterator>(0);
53                }
54
55                bool empty() const
56                {
57                    return false;
58                }
59
60                size_type size() const
61                {
62                    return 0;
63                }
64            };
65   
66//  bounded copy algorithm  -----------------------------------------------//
67
68            // Bounded version of the std::copy algorithm
69            template<typename InputIteratorT, typename OutputIteratorT>
70            inline OutputIteratorT bounded_copy(
71                InputIteratorT First, 
72                InputIteratorT Last, 
73                OutputIteratorT DestFirst,
74                OutputIteratorT DestLast )
75            {
76                InputIteratorT InputIt=First;
77                OutputIteratorT OutputIt=DestFirst;
78                for(; InputIt!=Last && OutputIt!=DestLast; InputIt++, OutputIt++ )
79                {
80                    *OutputIt=*InputIt;
81                }
82
83                return OutputIt;
84            }
85
86//  iterator range utilities -----------------------------------------//
87
88            // copy range functor
89            template< 
90                typename SeqT, 
91                typename IteratorT=BOOST_STRING_TYPENAME SeqT::const_iterator >
92            struct copy_iterator_rangeF : 
93                public std::unary_function< iterator_range<IteratorT>, SeqT >
94            {
95                SeqT operator()( const iterator_range<IteratorT>& Range ) const
96                {
97                    return copy_range<SeqT>(Range);
98                }
99            };
100
101        } // namespace detail
102    } // namespace algorithm
103} // namespace boost
104
105
106#endif  // BOOST_STRING_UTIL_DETAIL_HPP
Note: See TracBrowser for help on using the repository browser.