1 //  Boost string_algo library concept.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_CONCEPT_HPP
12 #define BOOST_STRING_CONCEPT_HPP
13 
14 #include <boost/concept_check.hpp>
15 #include <boost/range/iterator_range_core.hpp>
16 #include <boost/range/begin.hpp>
17 #include <boost/range/end.hpp>
18 
19 /*! \file
20     Defines concepts used in string_algo library
21 */
22 
23 namespace boost {
24     namespace algorithm {
25 
26         //! Finder concept
27         /*!
28             Defines the Finder concept. Finder is a functor which selects
29             an arbitrary part of a string. Search is performed on
30             the range specified by starting and ending iterators.
31 
32             Result of the find operation must be convertible to iterator_range.
33         */
34         template<typename FinderT, typename IteratorT>
35         struct FinderConcept
36         {
37         private:
38             typedef iterator_range<IteratorT> range;
39         public:
constraintsboost::algorithm::FinderConcept40             void constraints()
41             {
42                 // Operation
43                 r=(*pF)(i,i);
44             }
45         private:
46             range r;
47             IteratorT i;
48             FinderT* pF;
49         }; // Finder_concept
50 
51 
52         //! Formatter concept
53         /*!
54             Defines the Formatter concept. Formatter is a functor, which
55             takes a result from a finder operation and transforms it
56             in a specific way.
57 
58             Result must be a container supported by container_traits,
59             or a reference to it.
60         */
61         template<typename FormatterT, typename FinderT, typename IteratorT>
62         struct FormatterConcept
63         {
64         public:
constraintsboost::algorithm::FormatterConcept65             void constraints()
66             {
67                 // Operation
68                 ::boost::begin((*pFo)( (*pF)(i,i) ));
69                 ::boost::end((*pFo)( (*pF)(i,i) ));
70             }
71         private:
72             IteratorT i;
73             FinderT* pF;
74             FormatterT *pFo;
75         }; // FormatterConcept;
76 
77     } // namespace algorithm
78 } // namespace boost
79 
80 
81 
82 
83 #endif  // BOOST_STRING_CONCEPT_HPP
84