Ugly, not-to-be-pushed sucking in of all of Boost to get windows to work.
[dyninst.git] / external / boost / algorithm / string / detail / util.hpp
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
17 namespace 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