source: NonGTP/Boost/boost/algorithm/string/detail/util.hpp @ 857

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