LCOV - code coverage report
Current view: top level - usr/include/c++/9/bits - regex_constants.h (source / functions) Hit Total Coverage
Test: ROSE Lines: 5 9 55.6 %
Date: 2022-12-08 13:48:47 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : // class template regex -*- C++ -*-
       2             : 
       3             : // Copyright (C) 2010-2019 Free Software Foundation, Inc.
       4             : //
       5             : // This file is part of the GNU ISO C++ Library.  This library is free
       6             : // software; you can redistribute it and/or modify it under the
       7             : // terms of the GNU General Public License as published by the
       8             : // Free Software Foundation; either version 3, or (at your option)
       9             : // any later version.
      10             : 
      11             : // This library is distributed in the hope that it will be useful,
      12             : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13             : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14             : // GNU General Public License for more details.
      15             : 
      16             : // Under Section 7 of GPL version 3, you are granted additional
      17             : // permissions described in the GCC Runtime Library Exception, version
      18             : // 3.1, as published by the Free Software Foundation.
      19             : 
      20             : // You should have received a copy of the GNU General Public License and
      21             : // a copy of the GCC Runtime Library Exception along with this program;
      22             : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
      23             : // <http://www.gnu.org/licenses/>.
      24             : 
      25             : /**
      26             :  *  @file bits/regex_constants.h
      27             :  *  @brief Constant definitions for the std regex library.
      28             :  *
      29             :  *  This is an internal header file, included by other library headers.
      30             :  *  Do not attempt to use it directly. @headername{regex}
      31             :  */
      32             : 
      33             : namespace std _GLIBCXX_VISIBILITY(default)
      34             : {
      35             : _GLIBCXX_BEGIN_NAMESPACE_VERSION
      36             : 
      37             : /**
      38             :  * @defgroup regex Regular Expressions
      39             :  *
      40             :  * A facility for performing regular expression pattern matching.
      41             :  * @{
      42             :  */
      43             : 
      44             : /**
      45             :  * @namespace std::regex_constants
      46             :  * @brief ISO C++-0x entities sub namespace for regex.
      47             :  */
      48             : namespace regex_constants
      49             : {
      50             :   /**
      51             :    * @name 5.1 Regular Expression Syntax Options
      52             :    */
      53             :   ///@{
      54             :   enum __syntax_option
      55             :   {
      56             :     _S_icase,
      57             :     _S_nosubs,
      58             :     _S_optimize,
      59             :     _S_collate,
      60             :     _S_ECMAScript,
      61             :     _S_basic,
      62             :     _S_extended,
      63             :     _S_awk,
      64             :     _S_grep,
      65             :     _S_egrep,
      66             :     _S_polynomial,
      67             :     _S_syntax_last
      68             :   };
      69             : 
      70             :   /**
      71             :    * @brief This is a bitmask type indicating how to interpret the regex.
      72             :    *
      73             :    * The @c syntax_option_type is implementation defined but it is valid to
      74             :    * perform bitwise operations on these values and expect the right thing to
      75             :    * happen.
      76             :    *
      77             :    * A valid value of type syntax_option_type shall have exactly one of the
      78             :    * elements @c ECMAScript, @c basic, @c extended, @c awk, @c grep, @c egrep
      79             :    * %set.
      80             :    */
      81             :   enum syntax_option_type : unsigned int { };
      82             : 
      83             :   /**
      84             :    * Specifies that the matching of regular expressions against a character
      85             :    * sequence shall be performed without regard to case.
      86             :    */
      87             :   _GLIBCXX17_INLINE constexpr syntax_option_type icase =
      88             :     static_cast<syntax_option_type>(1 << _S_icase);
      89             : 
      90             :   /**
      91             :    * Specifies that when a regular expression is matched against a character
      92             :    * container sequence, no sub-expression matches are to be stored in the
      93             :    * supplied match_results structure.
      94             :    */
      95             :   _GLIBCXX17_INLINE constexpr syntax_option_type nosubs =
      96             :     static_cast<syntax_option_type>(1 << _S_nosubs);
      97             : 
      98             :   /**
      99             :    * Specifies that the regular expression engine should pay more attention to
     100             :    * the speed with which regular expressions are matched, and less to the
     101             :    * speed with which regular expression objects are constructed. Otherwise
     102             :    * it has no detectable effect on the program output.
     103             :    */
     104             :   _GLIBCXX17_INLINE constexpr syntax_option_type optimize =
     105             :     static_cast<syntax_option_type>(1 << _S_optimize);
     106             : 
     107             :   /**
     108             :    * Specifies that character ranges of the form [a-b] should be locale
     109             :    * sensitive.
     110             :    */
     111             :   _GLIBCXX17_INLINE constexpr syntax_option_type collate =
     112             :     static_cast<syntax_option_type>(1 << _S_collate);
     113             : 
     114             :   /**
     115             :    * Specifies that the grammar recognized by the regular expression engine is
     116             :    * that used by ECMAScript in ECMA-262 [Ecma International, ECMAScript
     117             :    * Language Specification, Standard Ecma-262, third edition, 1999], as
     118             :    * modified in section [28.13].  This grammar is similar to that defined
     119             :    * in the PERL scripting language but extended with elements found in the
     120             :    * POSIX regular expression grammar.
     121             :    */
     122             :   _GLIBCXX17_INLINE constexpr syntax_option_type ECMAScript =
     123             :     static_cast<syntax_option_type>(1 << _S_ECMAScript);
     124             : 
     125             :   /**
     126             :    * Specifies that the grammar recognized by the regular expression engine is
     127             :    * that used by POSIX basic regular expressions in IEEE Std 1003.1-2001,
     128             :    * Portable Operating System Interface (POSIX), Base Definitions and
     129             :    * Headers, Section 9, Regular Expressions [IEEE, Information Technology --
     130             :    * Portable Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
     131             :    */
     132             :   _GLIBCXX17_INLINE constexpr syntax_option_type basic =
     133             :     static_cast<syntax_option_type>(1 << _S_basic);
     134             : 
     135             :   /**
     136             :    * Specifies that the grammar recognized by the regular expression engine is
     137             :    * that used by POSIX extended regular expressions in IEEE Std 1003.1-2001,
     138             :    * Portable Operating System Interface (POSIX), Base Definitions and
     139             :    * Headers, Section 9, Regular Expressions.
     140             :    */
     141             :   _GLIBCXX17_INLINE constexpr syntax_option_type extended =
     142             :     static_cast<syntax_option_type>(1 << _S_extended);
     143             : 
     144             :   /**
     145             :    * Specifies that the grammar recognized by the regular expression engine is
     146             :    * that used by POSIX utility awk in IEEE Std 1003.1-2001.  This option is
     147             :    * identical to syntax_option_type extended, except that C-style escape
     148             :    * sequences are supported.  These sequences are:
     149             :    * \\\\, \\a, \\b, \\f, \\n, \\r, \\t , \\v, \\&apos,, &apos,,
     150             :    * and \\ddd (where ddd is one, two, or three octal digits).
     151             :    */
     152             :   _GLIBCXX17_INLINE constexpr syntax_option_type awk =
     153             :     static_cast<syntax_option_type>(1 << _S_awk);
     154             : 
     155             :   /**
     156             :    * Specifies that the grammar recognized by the regular expression engine is
     157             :    * that used by POSIX utility grep in IEEE Std 1003.1-2001.  This option is
     158             :    * identical to syntax_option_type basic, except that newlines are treated
     159             :    * as whitespace.
     160             :    */
     161             :   _GLIBCXX17_INLINE constexpr syntax_option_type grep =
     162             :     static_cast<syntax_option_type>(1 << _S_grep);
     163             : 
     164             :   /**
     165             :    * Specifies that the grammar recognized by the regular expression engine is
     166             :    * that used by POSIX utility grep when given the -E option in
     167             :    * IEEE Std 1003.1-2001.  This option is identical to syntax_option_type
     168             :    * extended, except that newlines are treated as whitespace.
     169             :    */
     170             :   _GLIBCXX17_INLINE constexpr syntax_option_type egrep =
     171             :     static_cast<syntax_option_type>(1 << _S_egrep);
     172             : 
     173             :   /**
     174             :    * Extension: Ensure both space complexity of compiled regex and
     175             :    * time complexity execution are not exponential.
     176             :    * If specified in a regex with back-references, the exception
     177             :    * regex_constants::error_complexity will be thrown.
     178             :    */
     179             :   _GLIBCXX17_INLINE constexpr syntax_option_type __polynomial =
     180             :     static_cast<syntax_option_type>(1 << _S_polynomial);
     181             : 
     182             :   constexpr inline syntax_option_type
     183       28764 :   operator&(syntax_option_type __a, syntax_option_type __b)
     184             :   {
     185         955 :     return (syntax_option_type)(static_cast<unsigned int>(__a)
     186       23034 :                                 & static_cast<unsigned int>(__b));
     187             :   }
     188             : 
     189             :   constexpr inline syntax_option_type
     190           0 :   operator|(syntax_option_type __a, syntax_option_type __b)
     191             :   {
     192           0 :     return (syntax_option_type)(static_cast<unsigned int>(__a)
     193           0 :                                 | static_cast<unsigned int>(__b));
     194             :   }
     195             : 
     196             :   constexpr inline syntax_option_type
     197             :   operator^(syntax_option_type __a, syntax_option_type __b)
     198             :   {
     199             :     return (syntax_option_type)(static_cast<unsigned int>(__a)
     200             :                                 ^ static_cast<unsigned int>(__b));
     201             :   }
     202             : 
     203             :   constexpr inline syntax_option_type
     204             :   operator~(syntax_option_type __a)
     205             :   { return (syntax_option_type)(~static_cast<unsigned int>(__a)); }
     206             : 
     207             :   inline syntax_option_type&
     208             :   operator&=(syntax_option_type& __a, syntax_option_type __b)
     209             :   { return __a = __a & __b; }
     210             : 
     211             :   inline syntax_option_type&
     212             :   operator|=(syntax_option_type& __a, syntax_option_type __b)
     213             :   { return __a = __a | __b; }
     214             : 
     215             :   inline syntax_option_type&
     216             :   operator^=(syntax_option_type& __a, syntax_option_type __b)
     217             :   { return __a = __a ^ __b; }
     218             : 
     219             :   ///@}
     220             : 
     221             :   /**
     222             :    * @name 5.2 Matching Rules
     223             :    *
     224             :    * Matching a regular expression against a sequence of characters [first,
     225             :    * last) proceeds according to the rules of the grammar specified for the
     226             :    * regular expression object, modified according to the effects listed
     227             :    * below for any bitmask elements set.
     228             :    *
     229             :    */
     230             :   ///@{
     231             : 
     232             :   enum __match_flag
     233             :   {
     234             :     _S_not_bol,
     235             :     _S_not_eol,
     236             :     _S_not_bow,
     237             :     _S_not_eow,
     238             :     _S_any,
     239             :     _S_not_null,
     240             :     _S_continuous,
     241             :     _S_prev_avail,
     242             :     _S_sed,
     243             :     _S_no_copy,
     244             :     _S_first_only,
     245             :     _S_match_flag_last
     246             :   };
     247             : 
     248             :   /**
     249             :    * @brief This is a bitmask type indicating regex matching rules.
     250             :    *
     251             :    * The @c match_flag_type is implementation defined but it is valid to
     252             :    * perform bitwise operations on these values and expect the right thing to
     253             :    * happen.
     254             :    */
     255             :   enum match_flag_type : unsigned int { };
     256             : 
     257             :   /**
     258             :    * The default matching rules.
     259             :    */
     260             :   _GLIBCXX17_INLINE constexpr match_flag_type match_default =
     261             :     static_cast<match_flag_type>(0);
     262             : 
     263             :   /**
     264             :    * The first character in the sequence [first, last) is treated as though it
     265             :    * is not at the beginning of a line, so the character (^) in the regular
     266             :    * expression shall not match [first, first).
     267             :    */
     268             :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_bol =
     269             :     static_cast<match_flag_type>(1 << _S_not_bol);
     270             : 
     271             :   /**
     272             :    * The last character in the sequence [first, last) is treated as though it
     273             :    * is not at the end of a line, so the character ($) in the regular
     274             :    * expression shall not match [last, last).
     275             :    */
     276             :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_eol =
     277             :     static_cast<match_flag_type>(1 << _S_not_eol);
     278             : 
     279             :   /**
     280             :    * The expression \\b is not matched against the sub-sequence
     281             :    * [first,first).
     282             :    */
     283             :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_bow =
     284             :     static_cast<match_flag_type>(1 << _S_not_bow);
     285             : 
     286             :   /**
     287             :    * The expression \\b should not be matched against the sub-sequence
     288             :    * [last,last).
     289             :    */
     290             :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_eow =
     291             :     static_cast<match_flag_type>(1 << _S_not_eow);
     292             : 
     293             :   /**
     294             :    * If more than one match is possible then any match is an acceptable
     295             :    * result.
     296             :    */
     297             :   _GLIBCXX17_INLINE constexpr match_flag_type match_any =
     298             :     static_cast<match_flag_type>(1 << _S_any);
     299             : 
     300             :   /**
     301             :    * The expression does not match an empty sequence.
     302             :    */
     303             :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_null =
     304             :     static_cast<match_flag_type>(1 << _S_not_null);
     305             : 
     306             :   /**
     307             :    * The expression only matches a sub-sequence that begins at first .
     308             :    */
     309             :   _GLIBCXX17_INLINE constexpr match_flag_type match_continuous =
     310             :     static_cast<match_flag_type>(1 << _S_continuous);
     311             : 
     312             :   /**
     313             :    * --first is a valid iterator position.  When this flag is set then the
     314             :    * flags match_not_bol and match_not_bow are ignored by the regular
     315             :    * expression algorithms 28.11 and iterators 28.12.
     316             :    */
     317             :   _GLIBCXX17_INLINE constexpr match_flag_type match_prev_avail =
     318             :     static_cast<match_flag_type>(1 << _S_prev_avail);
     319             : 
     320             :   /**
     321             :    * When a regular expression match is to be replaced by a new string, the
     322             :    * new string is constructed using the rules used by the ECMAScript replace
     323             :    * function in ECMA- 262 [Ecma International, ECMAScript Language
     324             :    * Specification, Standard Ecma-262, third edition, 1999], part 15.5.4.11
     325             :    * String.prototype.replace. In addition, during search and replace
     326             :    * operations all non-overlapping occurrences of the regular expression
     327             :    * are located and replaced, and sections of the input that did not match
     328             :    * the expression are copied unchanged to the output string.
     329             :    *
     330             :    * Format strings (from ECMA-262 [15.5.4.11]):
     331             :    * @li $$  The dollar-sign itself ($)
     332             :    * @li $&  The matched substring.
     333             :    * @li $`  The portion of @a string that precedes the matched substring.
     334             :    *         This would be match_results::prefix().
     335             :    * @li $'  The portion of @a string that follows the matched substring.
     336             :    *         This would be match_results::suffix().
     337             :    * @li $n  The nth capture, where n is in [1,9] and $n is not followed by a
     338             :    *         decimal digit.  If n <= match_results::size() and the nth capture
     339             :    *         is undefined, use the empty string instead.  If n >
     340             :    *         match_results::size(), the result is implementation-defined.
     341             :    * @li $nn The nnth capture, where nn is a two-digit decimal number on
     342             :    *         [01, 99].  If nn <= match_results::size() and the nth capture is
     343             :    *         undefined, use the empty string instead. If
     344             :    *         nn > match_results::size(), the result is implementation-defined.
     345             :    */
     346             :   _GLIBCXX17_INLINE constexpr match_flag_type format_default =
     347             :     static_cast<match_flag_type>(0);
     348             : 
     349             :   /**
     350             :    * When a regular expression match is to be replaced by a new string, the
     351             :    * new string is constructed using the rules used by the POSIX sed utility
     352             :    * in IEEE Std 1003.1- 2001 [IEEE, Information Technology -- Portable
     353             :    * Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
     354             :    */
     355             :   _GLIBCXX17_INLINE constexpr match_flag_type format_sed =
     356             :     static_cast<match_flag_type>(1 << _S_sed);
     357             : 
     358             :   /**
     359             :    * During a search and replace operation, sections of the character
     360             :    * container sequence being searched that do not match the regular
     361             :    * expression shall not be copied to the output string.
     362             :    */
     363             :   _GLIBCXX17_INLINE constexpr match_flag_type format_no_copy =
     364             :     static_cast<match_flag_type>(1 << _S_no_copy);
     365             : 
     366             :   /**
     367             :    * When specified during a search and replace operation, only the first
     368             :    * occurrence of the regular expression shall be replaced.
     369             :    */
     370             :   _GLIBCXX17_INLINE constexpr match_flag_type format_first_only =
     371             :     static_cast<match_flag_type>(1 << _S_first_only);
     372             : 
     373             :   constexpr inline match_flag_type
     374         955 :   operator&(match_flag_type __a, match_flag_type __b)
     375             :   {
     376           0 :     return (match_flag_type)(static_cast<unsigned int>(__a)
     377         955 :                                 & static_cast<unsigned int>(__b));
     378             :   }
     379             : 
     380             :   constexpr inline match_flag_type
     381             :   operator|(match_flag_type __a, match_flag_type __b)
     382             :   {
     383             :     return (match_flag_type)(static_cast<unsigned int>(__a)
     384             :                                 | static_cast<unsigned int>(__b));
     385             :   }
     386             : 
     387             :   constexpr inline match_flag_type
     388             :   operator^(match_flag_type __a, match_flag_type __b)
     389             :   {
     390             :     return (match_flag_type)(static_cast<unsigned int>(__a)
     391             :                                 ^ static_cast<unsigned int>(__b));
     392             :   }
     393             : 
     394             :   constexpr inline match_flag_type
     395             :   operator~(match_flag_type __a)
     396             :   { return (match_flag_type)(~static_cast<unsigned int>(__a)); }
     397             : 
     398             :   inline match_flag_type&
     399             :   operator&=(match_flag_type& __a, match_flag_type __b)
     400             :   { return __a = __a & __b; }
     401             : 
     402             :   inline match_flag_type&
     403             :   operator|=(match_flag_type& __a, match_flag_type __b)
     404             :   { return __a = __a | __b; }
     405             : 
     406             :   inline match_flag_type&
     407             :   operator^=(match_flag_type& __a, match_flag_type __b)
     408             :   { return __a = __a ^ __b; }
     409             : 
     410             :   ///@}
     411             : } // namespace regex_constants
     412             : /// @} group regex
     413             : 
     414             : _GLIBCXX_END_NAMESPACE_VERSION
     415             : } // namespace std
     416             : 

Generated by: LCOV version 1.14