Chris@16: // Boost string_algo library concept.hpp header file ---------------------------// Chris@16: Chris@16: // Copyright Pavol Droba 2002-2003. Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // See http://www.boost.org/ for updates, documentation, and revision history. Chris@16: Chris@16: #ifndef BOOST_STRING_CONCEPT_HPP Chris@16: #define BOOST_STRING_CONCEPT_HPP Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: /*! \file Chris@16: Defines concepts used in string_algo library Chris@16: */ Chris@16: Chris@16: namespace boost { Chris@16: namespace algorithm { Chris@16: Chris@16: //! Finder concept Chris@16: /*! Chris@16: Defines the Finder concept. Finder is a functor which selects Chris@16: an arbitrary part of a string. Search is performed on Chris@16: the range specified by starting and ending iterators. Chris@16: Chris@16: Result of the find operation must be convertible to iterator_range. Chris@16: */ Chris@16: template Chris@16: struct FinderConcept Chris@16: { Chris@16: private: Chris@16: typedef iterator_range range; Chris@16: public: Chris@16: void constraints() Chris@16: { Chris@16: // Operation Chris@16: r=(*pF)(i,i); Chris@16: } Chris@16: private: Chris@16: range r; Chris@16: IteratorT i; Chris@16: FinderT* pF; Chris@16: }; // Finder_concept Chris@16: Chris@16: Chris@16: //! Formatter concept Chris@16: /*! Chris@16: Defines the Formatter concept. Formatter is a functor, which Chris@16: takes a result from a finder operation and transforms it Chris@16: in a specific way. Chris@16: Chris@16: Result must be a container supported by container_traits, Chris@16: or a reference to it. Chris@16: */ Chris@16: template Chris@16: struct FormatterConcept Chris@16: { Chris@16: public: Chris@16: void constraints() Chris@16: { Chris@16: // Operation Chris@16: ::boost::begin((*pFo)( (*pF)(i,i) )); Chris@16: ::boost::end((*pFo)( (*pF)(i,i) )); Chris@16: } Chris@16: private: Chris@16: IteratorT i; Chris@16: FinderT* pF; Chris@16: FormatterT *pFo; Chris@16: }; // FormatterConcept; Chris@16: Chris@16: } // namespace algorithm Chris@16: } // namespace boost Chris@16: Chris@16: Chris@16: Chris@16: Chris@16: #endif // BOOST_STRING_CONCEPT_HPP