diff options
Diffstat (limited to 'contrib/src/boost/algorithm/string/classification.hpp')
-rw-r--r-- | contrib/src/boost/algorithm/string/classification.hpp | 624 |
1 files changed, 312 insertions, 312 deletions
diff --git a/contrib/src/boost/algorithm/string/classification.hpp b/contrib/src/boost/algorithm/string/classification.hpp index e868b88..ca43602 100644 --- a/contrib/src/boost/algorithm/string/classification.hpp +++ b/contrib/src/boost/algorithm/string/classification.hpp @@ -1,312 +1,312 @@ -// Boost string_algo library classification.hpp header file ---------------------------//
-
-// Copyright Pavol Droba 2002-2003.
-//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See http://www.boost.org/ for updates, documentation, and revision history.
-
-#ifndef BOOST_STRING_CLASSIFICATION_HPP
-#define BOOST_STRING_CLASSIFICATION_HPP
-
-#include <algorithm>
-#include <locale>
-#include <boost/range/value_type.hpp>
-#include <boost/range/as_literal.hpp>
-#include <boost/algorithm/string/detail/classification.hpp>
-#include <boost/algorithm/string/predicate_facade.hpp>
-
-
-/*! \file
- Classification predicates are included in the library to give
- some more convenience when using algorithms like \c trim() and \c all().
- They wrap functionality of STL classification functions ( e.g. \c std::isspace() )
- into generic functors.
-*/
-
-namespace boost {
- namespace algorithm {
-
-// classification functor generator -------------------------------------//
-
- //! is_classified predicate
- /*!
- Construct the \c is_classified predicate. This predicate holds if the input is
- of specified \c std::ctype category.
-
- \param Type A \c std::ctype category
- \param Loc A locale used for classification
- \return An instance of the \c is_classified predicate
- */
- inline detail::is_classifiedF
- is_classified(std::ctype_base::mask Type, const std::locale& Loc=std::locale())
- {
- return detail::is_classifiedF(Type, Loc);
- }
-
- //! is_space predicate
- /*!
- Construct the \c is_classified predicate for the \c ctype_base::space category.
-
- \param Loc A locale used for classification
- \return An instance of the \c is_classified predicate
- */
- inline detail::is_classifiedF
- is_space(const std::locale& Loc=std::locale())
- {
- return detail::is_classifiedF(std::ctype_base::space, Loc);
- }
-
- //! is_alnum predicate
- /*!
- Construct the \c is_classified predicate for the \c ctype_base::alnum category.
-
- \param Loc A locale used for classification
- \return An instance of the \c is_classified predicate
- */
- inline detail::is_classifiedF
- is_alnum(const std::locale& Loc=std::locale())
- {
- return detail::is_classifiedF(std::ctype_base::alnum, Loc);
- }
-
- //! is_alpha predicate
- /*!
- Construct the \c is_classified predicate for the \c ctype_base::alpha category.
-
- \param Loc A locale used for classification
- \return An instance of the \c is_classified predicate
- */
- inline detail::is_classifiedF
- is_alpha(const std::locale& Loc=std::locale())
- {
- return detail::is_classifiedF(std::ctype_base::alpha, Loc);
- }
-
- //! is_cntrl predicate
- /*!
- Construct the \c is_classified predicate for the \c ctype_base::cntrl category.
-
- \param Loc A locale used for classification
- \return An instance of the \c is_classified predicate
- */
- inline detail::is_classifiedF
- is_cntrl(const std::locale& Loc=std::locale())
- {
- return detail::is_classifiedF(std::ctype_base::cntrl, Loc);
- }
-
- //! is_digit predicate
- /*!
- Construct the \c is_classified predicate for the \c ctype_base::digit category.
-
- \param Loc A locale used for classification
- \return An instance of the \c is_classified predicate
- */
- inline detail::is_classifiedF
- is_digit(const std::locale& Loc=std::locale())
- {
- return detail::is_classifiedF(std::ctype_base::digit, Loc);
- }
-
- //! is_graph predicate
- /*!
- Construct the \c is_classified predicate for the \c ctype_base::graph category.
-
- \param Loc A locale used for classification
- \return An instance of the \c is_classified predicate
- */
- inline detail::is_classifiedF
- is_graph(const std::locale& Loc=std::locale())
- {
- return detail::is_classifiedF(std::ctype_base::graph, Loc);
- }
-
- //! is_lower predicate
- /*!
- Construct the \c is_classified predicate for the \c ctype_base::lower category.
-
- \param Loc A locale used for classification
- \return An instance of \c is_classified predicate
- */
- inline detail::is_classifiedF
- is_lower(const std::locale& Loc=std::locale())
- {
- return detail::is_classifiedF(std::ctype_base::lower, Loc);
- }
-
- //! is_print predicate
- /*!
- Construct the \c is_classified predicate for the \c ctype_base::print category.
-
- \param Loc A locale used for classification
- \return An instance of the \c is_classified predicate
- */
- inline detail::is_classifiedF
- is_print(const std::locale& Loc=std::locale())
- {
- return detail::is_classifiedF(std::ctype_base::print, Loc);
- }
-
- //! is_punct predicate
- /*!
- Construct the \c is_classified predicate for the \c ctype_base::punct category.
-
- \param Loc A locale used for classification
- \return An instance of the \c is_classified predicate
- */
- inline detail::is_classifiedF
- is_punct(const std::locale& Loc=std::locale())
- {
- return detail::is_classifiedF(std::ctype_base::punct, Loc);
- }
-
- //! is_upper predicate
- /*!
- Construct the \c is_classified predicate for the \c ctype_base::upper category.
-
- \param Loc A locale used for classification
- \return An instance of the \c is_classified predicate
- */
- inline detail::is_classifiedF
- is_upper(const std::locale& Loc=std::locale())
- {
- return detail::is_classifiedF(std::ctype_base::upper, Loc);
- }
-
- //! is_xdigit predicate
- /*!
- Construct the \c is_classified predicate for the \c ctype_base::xdigit category.
-
- \param Loc A locale used for classification
- \return An instance of the \c is_classified predicate
- */
- inline detail::is_classifiedF
- is_xdigit(const std::locale& Loc=std::locale())
- {
- return detail::is_classifiedF(std::ctype_base::xdigit, Loc);
- }
-
- //! is_any_of predicate
- /*!
- Construct the \c is_any_of predicate. The predicate holds if the input
- is included in the specified set of characters.
-
- \param Set A set of characters to be recognized
- \return An instance of the \c is_any_of predicate
- */
- template<typename RangeT>
- inline detail::is_any_ofF<
- BOOST_STRING_TYPENAME range_value<RangeT>::type>
- is_any_of( const RangeT& Set )
- {
- iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_set(boost::as_literal(Set));
- return detail::is_any_ofF<BOOST_STRING_TYPENAME range_value<RangeT>::type>(lit_set);
- }
-
- //! is_from_range predicate
- /*!
- Construct the \c is_from_range predicate. The predicate holds if the input
- is included in the specified range. (i.e. From <= Ch <= To )
-
- \param From The start of the range
- \param To The end of the range
- \return An instance of the \c is_from_range predicate
- */
- template<typename CharT>
- inline detail::is_from_rangeF<CharT> is_from_range(CharT From, CharT To)
- {
- return detail::is_from_rangeF<CharT>(From,To);
- }
-
- // predicate combinators ---------------------------------------------------//
-
- //! predicate 'and' composition predicate
- /*!
- Construct the \c class_and predicate. This predicate can be used
- to logically combine two classification predicates. \c class_and holds,
- if both predicates return true.
-
- \param Pred1 The first predicate
- \param Pred2 The second predicate
- \return An instance of the \c class_and predicate
- */
- template<typename Pred1T, typename Pred2T>
- inline detail::pred_andF<Pred1T, Pred2T>
- operator&&(
- const predicate_facade<Pred1T>& Pred1,
- const predicate_facade<Pred2T>& Pred2 )
- {
- // Doing the static_cast with the pointer instead of the reference
- // is a workaround for some compilers which have problems with
- // static_cast's of template references, i.e. CW8. /grafik/
- return detail::pred_andF<Pred1T,Pred2T>(
- *static_cast<const Pred1T*>(&Pred1),
- *static_cast<const Pred2T*>(&Pred2) );
- }
-
- //! predicate 'or' composition predicate
- /*!
- Construct the \c class_or predicate. This predicate can be used
- to logically combine two classification predicates. \c class_or holds,
- if one of the predicates return true.
-
- \param Pred1 The first predicate
- \param Pred2 The second predicate
- \return An instance of the \c class_or predicate
- */
- template<typename Pred1T, typename Pred2T>
- inline detail::pred_orF<Pred1T, Pred2T>
- operator||(
- const predicate_facade<Pred1T>& Pred1,
- const predicate_facade<Pred2T>& Pred2 )
- {
- // Doing the static_cast with the pointer instead of the reference
- // is a workaround for some compilers which have problems with
- // static_cast's of template references, i.e. CW8. /grafik/
- return detail::pred_orF<Pred1T,Pred2T>(
- *static_cast<const Pred1T*>(&Pred1),
- *static_cast<const Pred2T*>(&Pred2));
- }
-
- //! predicate negation operator
- /*!
- Construct the \c class_not predicate. This predicate represents a negation.
- \c class_or holds if of the predicates return false.
-
- \param Pred The predicate to be negated
- \return An instance of the \c class_not predicate
- */
- template<typename PredT>
- inline detail::pred_notF<PredT>
- operator!( const predicate_facade<PredT>& Pred )
- {
- // Doing the static_cast with the pointer instead of the reference
- // is a workaround for some compilers which have problems with
- // static_cast's of template references, i.e. CW8. /grafik/
- return detail::pred_notF<PredT>(*static_cast<const PredT*>(&Pred));
- }
-
- } // namespace algorithm
-
- // pull names to the boost namespace
- using algorithm::is_classified;
- using algorithm::is_space;
- using algorithm::is_alnum;
- using algorithm::is_alpha;
- using algorithm::is_cntrl;
- using algorithm::is_digit;
- using algorithm::is_graph;
- using algorithm::is_lower;
- using algorithm::is_upper;
- using algorithm::is_print;
- using algorithm::is_punct;
- using algorithm::is_xdigit;
- using algorithm::is_any_of;
- using algorithm::is_from_range;
-
-} // namespace boost
-
-#endif // BOOST_STRING_PREDICATE_HPP
+// Boost string_algo library classification.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_CLASSIFICATION_HPP +#define BOOST_STRING_CLASSIFICATION_HPP + +#include <algorithm> +#include <locale> +#include <boost/range/value_type.hpp> +#include <boost/range/as_literal.hpp> +#include <boost/algorithm/string/detail/classification.hpp> +#include <boost/algorithm/string/predicate_facade.hpp> + + +/*! \file + Classification predicates are included in the library to give + some more convenience when using algorithms like \c trim() and \c all(). + They wrap functionality of STL classification functions ( e.g. \c std::isspace() ) + into generic functors. +*/ + +namespace boost { + namespace algorithm { + +// classification functor generator -------------------------------------// + + //! is_classified predicate + /*! + Construct the \c is_classified predicate. This predicate holds if the input is + of specified \c std::ctype category. + + \param Type A \c std::ctype category + \param Loc A locale used for classification + \return An instance of the \c is_classified predicate + */ + inline detail::is_classifiedF + is_classified(std::ctype_base::mask Type, const std::locale& Loc=std::locale()) + { + return detail::is_classifiedF(Type, Loc); + } + + //! is_space predicate + /*! + Construct the \c is_classified predicate for the \c ctype_base::space category. + + \param Loc A locale used for classification + \return An instance of the \c is_classified predicate + */ + inline detail::is_classifiedF + is_space(const std::locale& Loc=std::locale()) + { + return detail::is_classifiedF(std::ctype_base::space, Loc); + } + + //! is_alnum predicate + /*! + Construct the \c is_classified predicate for the \c ctype_base::alnum category. + + \param Loc A locale used for classification + \return An instance of the \c is_classified predicate + */ + inline detail::is_classifiedF + is_alnum(const std::locale& Loc=std::locale()) + { + return detail::is_classifiedF(std::ctype_base::alnum, Loc); + } + + //! is_alpha predicate + /*! + Construct the \c is_classified predicate for the \c ctype_base::alpha category. + + \param Loc A locale used for classification + \return An instance of the \c is_classified predicate + */ + inline detail::is_classifiedF + is_alpha(const std::locale& Loc=std::locale()) + { + return detail::is_classifiedF(std::ctype_base::alpha, Loc); + } + + //! is_cntrl predicate + /*! + Construct the \c is_classified predicate for the \c ctype_base::cntrl category. + + \param Loc A locale used for classification + \return An instance of the \c is_classified predicate + */ + inline detail::is_classifiedF + is_cntrl(const std::locale& Loc=std::locale()) + { + return detail::is_classifiedF(std::ctype_base::cntrl, Loc); + } + + //! is_digit predicate + /*! + Construct the \c is_classified predicate for the \c ctype_base::digit category. + + \param Loc A locale used for classification + \return An instance of the \c is_classified predicate + */ + inline detail::is_classifiedF + is_digit(const std::locale& Loc=std::locale()) + { + return detail::is_classifiedF(std::ctype_base::digit, Loc); + } + + //! is_graph predicate + /*! + Construct the \c is_classified predicate for the \c ctype_base::graph category. + + \param Loc A locale used for classification + \return An instance of the \c is_classified predicate + */ + inline detail::is_classifiedF + is_graph(const std::locale& Loc=std::locale()) + { + return detail::is_classifiedF(std::ctype_base::graph, Loc); + } + + //! is_lower predicate + /*! + Construct the \c is_classified predicate for the \c ctype_base::lower category. + + \param Loc A locale used for classification + \return An instance of \c is_classified predicate + */ + inline detail::is_classifiedF + is_lower(const std::locale& Loc=std::locale()) + { + return detail::is_classifiedF(std::ctype_base::lower, Loc); + } + + //! is_print predicate + /*! + Construct the \c is_classified predicate for the \c ctype_base::print category. + + \param Loc A locale used for classification + \return An instance of the \c is_classified predicate + */ + inline detail::is_classifiedF + is_print(const std::locale& Loc=std::locale()) + { + return detail::is_classifiedF(std::ctype_base::print, Loc); + } + + //! is_punct predicate + /*! + Construct the \c is_classified predicate for the \c ctype_base::punct category. + + \param Loc A locale used for classification + \return An instance of the \c is_classified predicate + */ + inline detail::is_classifiedF + is_punct(const std::locale& Loc=std::locale()) + { + return detail::is_classifiedF(std::ctype_base::punct, Loc); + } + + //! is_upper predicate + /*! + Construct the \c is_classified predicate for the \c ctype_base::upper category. + + \param Loc A locale used for classification + \return An instance of the \c is_classified predicate + */ + inline detail::is_classifiedF + is_upper(const std::locale& Loc=std::locale()) + { + return detail::is_classifiedF(std::ctype_base::upper, Loc); + } + + //! is_xdigit predicate + /*! + Construct the \c is_classified predicate for the \c ctype_base::xdigit category. + + \param Loc A locale used for classification + \return An instance of the \c is_classified predicate + */ + inline detail::is_classifiedF + is_xdigit(const std::locale& Loc=std::locale()) + { + return detail::is_classifiedF(std::ctype_base::xdigit, Loc); + } + + //! is_any_of predicate + /*! + Construct the \c is_any_of predicate. The predicate holds if the input + is included in the specified set of characters. + + \param Set A set of characters to be recognized + \return An instance of the \c is_any_of predicate + */ + template<typename RangeT> + inline detail::is_any_ofF< + BOOST_STRING_TYPENAME range_value<RangeT>::type> + is_any_of( const RangeT& Set ) + { + iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_set(boost::as_literal(Set)); + return detail::is_any_ofF<BOOST_STRING_TYPENAME range_value<RangeT>::type>(lit_set); + } + + //! is_from_range predicate + /*! + Construct the \c is_from_range predicate. The predicate holds if the input + is included in the specified range. (i.e. From <= Ch <= To ) + + \param From The start of the range + \param To The end of the range + \return An instance of the \c is_from_range predicate + */ + template<typename CharT> + inline detail::is_from_rangeF<CharT> is_from_range(CharT From, CharT To) + { + return detail::is_from_rangeF<CharT>(From,To); + } + + // predicate combinators ---------------------------------------------------// + + //! predicate 'and' composition predicate + /*! + Construct the \c class_and predicate. This predicate can be used + to logically combine two classification predicates. \c class_and holds, + if both predicates return true. + + \param Pred1 The first predicate + \param Pred2 The second predicate + \return An instance of the \c class_and predicate + */ + template<typename Pred1T, typename Pred2T> + inline detail::pred_andF<Pred1T, Pred2T> + operator&&( + const predicate_facade<Pred1T>& Pred1, + const predicate_facade<Pred2T>& Pred2 ) + { + // Doing the static_cast with the pointer instead of the reference + // is a workaround for some compilers which have problems with + // static_cast's of template references, i.e. CW8. /grafik/ + return detail::pred_andF<Pred1T,Pred2T>( + *static_cast<const Pred1T*>(&Pred1), + *static_cast<const Pred2T*>(&Pred2) ); + } + + //! predicate 'or' composition predicate + /*! + Construct the \c class_or predicate. This predicate can be used + to logically combine two classification predicates. \c class_or holds, + if one of the predicates return true. + + \param Pred1 The first predicate + \param Pred2 The second predicate + \return An instance of the \c class_or predicate + */ + template<typename Pred1T, typename Pred2T> + inline detail::pred_orF<Pred1T, Pred2T> + operator||( + const predicate_facade<Pred1T>& Pred1, + const predicate_facade<Pred2T>& Pred2 ) + { + // Doing the static_cast with the pointer instead of the reference + // is a workaround for some compilers which have problems with + // static_cast's of template references, i.e. CW8. /grafik/ + return detail::pred_orF<Pred1T,Pred2T>( + *static_cast<const Pred1T*>(&Pred1), + *static_cast<const Pred2T*>(&Pred2)); + } + + //! predicate negation operator + /*! + Construct the \c class_not predicate. This predicate represents a negation. + \c class_or holds if of the predicates return false. + + \param Pred The predicate to be negated + \return An instance of the \c class_not predicate + */ + template<typename PredT> + inline detail::pred_notF<PredT> + operator!( const predicate_facade<PredT>& Pred ) + { + // Doing the static_cast with the pointer instead of the reference + // is a workaround for some compilers which have problems with + // static_cast's of template references, i.e. CW8. /grafik/ + return detail::pred_notF<PredT>(*static_cast<const PredT*>(&Pred)); + } + + } // namespace algorithm + + // pull names to the boost namespace + using algorithm::is_classified; + using algorithm::is_space; + using algorithm::is_alnum; + using algorithm::is_alpha; + using algorithm::is_cntrl; + using algorithm::is_digit; + using algorithm::is_graph; + using algorithm::is_lower; + using algorithm::is_upper; + using algorithm::is_print; + using algorithm::is_punct; + using algorithm::is_xdigit; + using algorithm::is_any_of; + using algorithm::is_from_range; + +} // namespace boost + +#endif // BOOST_STRING_PREDICATE_HPP |