LCOV - code coverage report
Current view: top level - usr/include/boost/algorithm/string - classification.hpp (source / functions) Hit Total Coverage
Test: ROSE Lines: 2 7 28.6 %
Date: 2022-12-08 13:48:47 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //  Boost string_algo library classification.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_CLASSIFICATION_HPP
      12             : #define BOOST_STRING_CLASSIFICATION_HPP
      13             : 
      14             : #include <algorithm>
      15             : #include <locale>
      16             : #include <boost/range/value_type.hpp>
      17             : #include <boost/range/as_literal.hpp>
      18             : #include <boost/algorithm/string/detail/classification.hpp>
      19             : #include <boost/algorithm/string/predicate_facade.hpp>
      20             : 
      21             : 
      22             : /*! \file
      23             :     Classification predicates are included in the library to give 
      24             :     some more convenience when using algorithms like \c trim() and \c all(). 
      25             :     They wrap functionality of STL classification functions ( e.g. \c std::isspace() )
      26             :     into generic functors. 
      27             : */
      28             : 
      29             : namespace boost {
      30             :     namespace algorithm {
      31             : 
      32             : //  classification functor generator -------------------------------------//
      33             : 
      34             :         //! is_classified predicate
      35             :         /*!
      36             :             Construct the \c is_classified predicate. This predicate holds if the input is
      37             :             of specified \c std::ctype category.
      38             : 
      39             :             \param Type A \c std::ctype category
      40             :             \param Loc A locale used for classification
      41             :             \return An instance of the \c is_classified predicate 
      42             :         */
      43             :         inline detail::is_classifiedF
      44             :         is_classified(std::ctype_base::mask Type, const std::locale& Loc=std::locale())
      45             :         {
      46             :             return detail::is_classifiedF(Type, Loc);
      47             :         }
      48             : 
      49             :         //! is_space predicate
      50             :         /*!
      51             :             Construct the \c is_classified predicate for the \c ctype_base::space category.   
      52             : 
      53             :             \param Loc A locale used for classification
      54             :             \return An instance of the \c is_classified predicate
      55             :         */
      56             :         inline detail::is_classifiedF 
      57        1069 :         is_space(const std::locale& Loc=std::locale())
      58             :         {
      59        1069 :             return detail::is_classifiedF(std::ctype_base::space, Loc);
      60             :         }
      61             : 
      62             :         //! is_alnum predicate
      63             :         /*!
      64             :             Construct the \c is_classified predicate for the \c ctype_base::alnum category.   
      65             : 
      66             :             \param Loc A locale used for classification
      67             :             \return An instance of the \c is_classified predicate 
      68             :         */
      69             :         inline detail::is_classifiedF 
      70             :         is_alnum(const std::locale& Loc=std::locale())
      71             :         {
      72             :             return detail::is_classifiedF(std::ctype_base::alnum, Loc);
      73             :         }
      74             : 
      75             :         //! is_alpha predicate
      76             :         /*!
      77             :             Construct the \c is_classified predicate for the \c ctype_base::alpha category.   
      78             : 
      79             :             \param Loc A locale used for classification
      80             :             \return An instance of the \c is_classified predicate 
      81             :         */
      82             :         inline detail::is_classifiedF 
      83             :         is_alpha(const std::locale& Loc=std::locale())
      84             :         {
      85             :             return detail::is_classifiedF(std::ctype_base::alpha, Loc);
      86             :         }
      87             : 
      88             :         //! is_cntrl predicate
      89             :         /*!
      90             :             Construct the \c is_classified predicate for the \c ctype_base::cntrl category.   
      91             : 
      92             :             \param Loc A locale used for classification
      93             :             \return An instance of the \c is_classified predicate 
      94             :         */
      95             :         inline detail::is_classifiedF 
      96             :         is_cntrl(const std::locale& Loc=std::locale())
      97             :         {
      98             :             return detail::is_classifiedF(std::ctype_base::cntrl, Loc);
      99             :         }
     100             : 
     101             :         //! is_digit predicate
     102             :         /*!
     103             :             Construct the \c is_classified predicate for the \c ctype_base::digit category.   
     104             : 
     105             :             \param Loc A locale used for classification
     106             :             \return An instance of the \c is_classified predicate 
     107             :         */
     108             :         inline detail::is_classifiedF 
     109             :         is_digit(const std::locale& Loc=std::locale())
     110             :         {
     111             :             return detail::is_classifiedF(std::ctype_base::digit, Loc);
     112             :         }
     113             : 
     114             :         //! is_graph predicate
     115             :         /*!
     116             :             Construct the \c is_classified predicate for the \c ctype_base::graph category.   
     117             : 
     118             :             \param Loc A locale used for classification
     119             :             \return An instance of the \c is_classified predicate 
     120             :         */
     121             :         inline detail::is_classifiedF
     122           0 :         is_graph(const std::locale& Loc=std::locale())
     123             :         {
     124           0 :             return detail::is_classifiedF(std::ctype_base::graph, Loc);
     125             :         }
     126             : 
     127             :         //! is_lower predicate
     128             :         /*!
     129             :             Construct the \c is_classified predicate for the \c ctype_base::lower category.   
     130             : 
     131             :             \param Loc A locale used for classification
     132             :             \return An instance of \c is_classified predicate 
     133             :         */
     134             :         inline detail::is_classifiedF 
     135             :         is_lower(const std::locale& Loc=std::locale())
     136             :         {
     137             :             return detail::is_classifiedF(std::ctype_base::lower, Loc);
     138             :         }
     139             : 
     140             :         //! is_print predicate
     141             :         /*!
     142             :             Construct the \c is_classified predicate for the \c ctype_base::print category.   
     143             : 
     144             :             \param Loc A locale used for classification
     145             :             \return An instance of the \c is_classified predicate 
     146             :         */
     147             :         inline detail::is_classifiedF 
     148             :         is_print(const std::locale& Loc=std::locale())
     149             :         {
     150             :             return detail::is_classifiedF(std::ctype_base::print, Loc);
     151             :         }
     152             : 
     153             :         //! is_punct predicate
     154             :         /*!
     155             :             Construct the \c is_classified predicate for the \c ctype_base::punct category.   
     156             : 
     157             :             \param Loc A locale used for classification
     158             :             \return An instance of the \c is_classified predicate 
     159             :         */
     160             :         inline detail::is_classifiedF 
     161             :         is_punct(const std::locale& Loc=std::locale())
     162             :         {
     163             :             return detail::is_classifiedF(std::ctype_base::punct, Loc);
     164             :         }
     165             : 
     166             :         //! is_upper predicate
     167             :         /*!
     168             :             Construct the \c is_classified predicate for the \c ctype_base::upper category.   
     169             : 
     170             :             \param Loc A locale used for classification
     171             :             \return An instance of the \c is_classified predicate 
     172             :         */
     173             :         inline detail::is_classifiedF 
     174             :         is_upper(const std::locale& Loc=std::locale())
     175             :         {
     176             :             return detail::is_classifiedF(std::ctype_base::upper, Loc);
     177             :         }
     178             : 
     179             :         //! is_xdigit predicate
     180             :         /*!
     181             :             Construct the \c is_classified predicate for the \c ctype_base::xdigit category.  
     182             : 
     183             :             \param Loc A locale used for classification
     184             :             \return An instance of the \c is_classified predicate 
     185             :         */
     186             :         inline detail::is_classifiedF 
     187             :         is_xdigit(const std::locale& Loc=std::locale())
     188             :         {
     189             :             return detail::is_classifiedF(std::ctype_base::xdigit, Loc);
     190             :         }
     191             : 
     192             :         //! is_any_of predicate
     193             :         /*!
     194             :             Construct the \c is_any_of predicate. The predicate holds if the input
     195             :             is included in the specified set of characters.
     196             : 
     197             :             \param Set A set of characters to be recognized
     198             :             \return An instance of the \c is_any_of predicate 
     199             :         */
     200             :         template<typename RangeT>
     201             :         inline detail::is_any_ofF<
     202             :             BOOST_STRING_TYPENAME range_value<RangeT>::type> 
     203           0 :         is_any_of( const RangeT& Set )
     204             :         {
     205           0 :             iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_set(boost::as_literal(Set));
     206           0 :             return detail::is_any_ofF<BOOST_STRING_TYPENAME range_value<RangeT>::type>(lit_set); 
     207             :         }
     208             : 
     209             :         //! is_from_range predicate
     210             :         /*!
     211             :             Construct the \c is_from_range predicate. The predicate holds if the input
     212             :             is included in the specified range. (i.e. From <= Ch <= To )
     213             : 
     214             :             \param From The start of the range
     215             :             \param To The end of the range
     216             :             \return An instance of the \c is_from_range predicate 
     217             :         */
     218             :         template<typename CharT>
     219             :         inline detail::is_from_rangeF<CharT> is_from_range(CharT From, CharT To)
     220             :         {
     221             :             return detail::is_from_rangeF<CharT>(From,To); 
     222             :         }
     223             :         
     224             :         // predicate combinators ---------------------------------------------------//
     225             : 
     226             :         //! predicate 'and' composition predicate
     227             :         /*!
     228             :             Construct the \c class_and predicate. This predicate can be used
     229             :             to logically combine two classification predicates. \c class_and holds,
     230             :             if both predicates return true.
     231             : 
     232             :             \param Pred1 The first predicate
     233             :             \param Pred2 The second predicate
     234             :             \return An instance of the \c class_and predicate     
     235             :         */
     236             :         template<typename Pred1T, typename Pred2T>
     237             :         inline detail::pred_andF<Pred1T, Pred2T>
     238             :         operator&&( 
     239             :             const predicate_facade<Pred1T>& Pred1, 
     240             :             const predicate_facade<Pred2T>& Pred2 )
     241             :         {    
     242             :             // Doing the static_cast with the pointer instead of the reference
     243             :             // is a workaround for some compilers which have problems with
     244             :             // static_cast's of template references, i.e. CW8. /grafik/
     245             :             return detail::pred_andF<Pred1T,Pred2T>(
     246             :                 *static_cast<const Pred1T*>(&Pred1), 
     247             :                 *static_cast<const Pred2T*>(&Pred2) );
     248             :         }
     249             : 
     250             :         //! predicate 'or' composition predicate
     251             :         /*!
     252             :             Construct the \c class_or predicate. This predicate can be used
     253             :             to logically combine two classification predicates. \c class_or holds,
     254             :             if one of the predicates return true.
     255             : 
     256             :             \param Pred1 The first predicate
     257             :             \param Pred2 The second predicate
     258             :             \return An instance of the \c class_or predicate     
     259             :         */
     260             :         template<typename Pred1T, typename Pred2T>
     261             :         inline detail::pred_orF<Pred1T, Pred2T>
     262             :         operator||( 
     263             :             const predicate_facade<Pred1T>& Pred1, 
     264             :             const predicate_facade<Pred2T>& Pred2 )
     265             :         {    
     266             :             // Doing the static_cast with the pointer instead of the reference
     267             :             // is a workaround for some compilers which have problems with
     268             :             // static_cast's of template references, i.e. CW8. /grafik/
     269             :             return detail::pred_orF<Pred1T,Pred2T>(
     270             :                 *static_cast<const Pred1T*>(&Pred1), 
     271             :                 *static_cast<const Pred2T*>(&Pred2));
     272             :         }
     273             : 
     274             :         //! predicate negation operator
     275             :         /*!
     276             :             Construct the \c class_not predicate. This predicate represents a negation. 
     277             :             \c class_or holds if of the predicates return false.
     278             : 
     279             :             \param Pred The predicate to be negated
     280             :             \return An instance of the \c class_not predicate     
     281             :         */
     282             :         template<typename PredT>
     283             :         inline detail::pred_notF<PredT>
     284             :         operator!( const predicate_facade<PredT>& Pred )
     285             :         {
     286             :             // Doing the static_cast with the pointer instead of the reference
     287             :             // is a workaround for some compilers which have problems with
     288             :             // static_cast's of template references, i.e. CW8. /grafik/
     289             :             return detail::pred_notF<PredT>(*static_cast<const PredT*>(&Pred)); 
     290             :         }
     291             : 
     292             :     } // namespace algorithm
     293             : 
     294             :     // pull names to the boost namespace
     295             :     using algorithm::is_classified;
     296             :     using algorithm::is_space;
     297             :     using algorithm::is_alnum;
     298             :     using algorithm::is_alpha;
     299             :     using algorithm::is_cntrl;
     300             :     using algorithm::is_digit;
     301             :     using algorithm::is_graph;
     302             :     using algorithm::is_lower;
     303             :     using algorithm::is_upper;
     304             :     using algorithm::is_print;
     305             :     using algorithm::is_punct;
     306             :     using algorithm::is_xdigit;
     307             :     using algorithm::is_any_of;
     308             :     using algorithm::is_from_range;
     309             : 
     310             : } // namespace boost
     311             : 
     312             : #endif  // BOOST_STRING_PREDICATE_HPP

Generated by: LCOV version 1.14