LCOV - code coverage report
Current view: top level - 11/bits - regex_constants.h (source / functions) Hit Total Coverage
Test: jami-coverage-filtered.info Lines: 16 16 100.0 %
Date: 2025-08-24 09:11:10 Functions: 8 8 100.0 %

          Line data    Source code
       1             : // class template regex -*- C++ -*-
       2             : 
       3             : // Copyright (C) 2010-2021 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++ 2011 namespace for options and flags used with std::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_multiline
      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             : #if __cplusplus >= 201703L || !defined __STRICT_ANSI__
     174             :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
     175             :   // 2503. multiline option should be added to syntax_option_type
     176             :   /**
     177             :    * Specifies that the `^` anchor matches at the beginning of a line,
     178             :    * and the `$` anchor matches at the end of a line, not only at the
     179             :    * beginning/end of the input.
     180             :    * Valid for the ECMAScript syntax, ignored otherwise.
     181             :    * @since C++17
     182             :    */
     183             :   _GLIBCXX17_INLINE constexpr syntax_option_type multiline =
     184             :     static_cast<syntax_option_type>(1 << _S_multiline);
     185             : #endif
     186             : 
     187             :   /// Extension: Equivalent to regex_constants::multiline for C++11 and C++14.
     188             :   _GLIBCXX17_INLINE constexpr syntax_option_type __multiline =
     189             :     static_cast<syntax_option_type>(1 << _S_multiline);
     190             : 
     191             :   /**
     192             :    * Extension: Ensure both space complexity of compiled regex and
     193             :    * time complexity execution are not exponential.
     194             :    * If specified in a regex with back-references, the exception
     195             :    * regex_constants::error_complexity will be thrown.
     196             :    */
     197             :   _GLIBCXX17_INLINE constexpr syntax_option_type __polynomial =
     198             :     static_cast<syntax_option_type>(1 << _S_polynomial);
     199             : 
     200             :   constexpr inline syntax_option_type
     201       65825 :   operator&(syntax_option_type __a, syntax_option_type __b)
     202             :   {
     203             :     return (syntax_option_type)(static_cast<unsigned int>(__a)
     204       65825 :                                 & static_cast<unsigned int>(__b));
     205             :   }
     206             : 
     207             :   constexpr inline syntax_option_type
     208        2529 :   operator|(syntax_option_type __a, syntax_option_type __b)
     209             :   {
     210             :     return (syntax_option_type)(static_cast<unsigned int>(__a)
     211        2529 :                                 | static_cast<unsigned int>(__b));
     212             :   }
     213             : 
     214             :   constexpr inline syntax_option_type
     215             :   operator^(syntax_option_type __a, syntax_option_type __b)
     216             :   {
     217             :     return (syntax_option_type)(static_cast<unsigned int>(__a)
     218             :                                 ^ static_cast<unsigned int>(__b));
     219             :   }
     220             : 
     221             :   constexpr inline syntax_option_type
     222             :   operator~(syntax_option_type __a)
     223             :   { return (syntax_option_type)(~static_cast<unsigned int>(__a)); }
     224             : 
     225             :   inline syntax_option_type&
     226             :   operator&=(syntax_option_type& __a, syntax_option_type __b)
     227             :   { return __a = __a & __b; }
     228             : 
     229             :   inline syntax_option_type&
     230           3 :   operator|=(syntax_option_type& __a, syntax_option_type __b)
     231           3 :   { return __a = __a | __b; }
     232             : 
     233             :   inline syntax_option_type&
     234             :   operator^=(syntax_option_type& __a, syntax_option_type __b)
     235             :   { return __a = __a ^ __b; }
     236             : 
     237             :   ///@}
     238             : 
     239             :   /**
     240             :    * @name 5.2 Matching Rules
     241             :    *
     242             :    * Matching a regular expression against a sequence of characters [first,
     243             :    * last) proceeds according to the rules of the grammar specified for the
     244             :    * regular expression object, modified according to the effects listed
     245             :    * below for any bitmask elements set.
     246             :    *
     247             :    */
     248             :   ///@{
     249             : 
     250             :   enum __match_flag
     251             :   {
     252             :     _S_not_bol,
     253             :     _S_not_eol,
     254             :     _S_not_bow,
     255             :     _S_not_eow,
     256             :     _S_any,
     257             :     _S_not_null,
     258             :     _S_continuous,
     259             :     _S_prev_avail,
     260             :     _S_sed,
     261             :     _S_no_copy,
     262             :     _S_first_only,
     263             :     _S_match_flag_last
     264             :   };
     265             : 
     266             :   /**
     267             :    * @brief This is a bitmask type indicating regex matching rules.
     268             :    *
     269             :    * The @c match_flag_type is implementation defined but it is valid to
     270             :    * perform bitwise operations on these values and expect the right thing to
     271             :    * happen.
     272             :    */
     273             :   enum match_flag_type : unsigned int { };
     274             : 
     275             :   /**
     276             :    * The default matching rules.
     277             :    */
     278             :   _GLIBCXX17_INLINE constexpr match_flag_type match_default =
     279             :     static_cast<match_flag_type>(0);
     280             : 
     281             :   /**
     282             :    * The first character in the sequence [first, last) is treated as though it
     283             :    * is not at the beginning of a line, so the character (^) in the regular
     284             :    * expression shall not match [first, first).
     285             :    */
     286             :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_bol =
     287             :     static_cast<match_flag_type>(1 << _S_not_bol);
     288             : 
     289             :   /**
     290             :    * The last character in the sequence [first, last) is treated as though it
     291             :    * is not at the end of a line, so the character ($) in the regular
     292             :    * expression shall not match [last, last).
     293             :    */
     294             :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_eol =
     295             :     static_cast<match_flag_type>(1 << _S_not_eol);
     296             : 
     297             :   /**
     298             :    * The expression \\b is not matched against the sub-sequence
     299             :    * [first,first).
     300             :    */
     301             :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_bow =
     302             :     static_cast<match_flag_type>(1 << _S_not_bow);
     303             : 
     304             :   /**
     305             :    * The expression \\b should not be matched against the sub-sequence
     306             :    * [last,last).
     307             :    */
     308             :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_eow =
     309             :     static_cast<match_flag_type>(1 << _S_not_eow);
     310             : 
     311             :   /**
     312             :    * If more than one match is possible then any match is an acceptable
     313             :    * result.
     314             :    */
     315             :   _GLIBCXX17_INLINE constexpr match_flag_type match_any =
     316             :     static_cast<match_flag_type>(1 << _S_any);
     317             : 
     318             :   /**
     319             :    * The expression does not match an empty sequence.
     320             :    */
     321             :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_null =
     322             :     static_cast<match_flag_type>(1 << _S_not_null);
     323             : 
     324             :   /**
     325             :    * The expression only matches a sub-sequence that begins at first .
     326             :    */
     327             :   _GLIBCXX17_INLINE constexpr match_flag_type match_continuous =
     328             :     static_cast<match_flag_type>(1 << _S_continuous);
     329             : 
     330             :   /**
     331             :    * `--first` is a valid iterator position.  When this flag is set then the
     332             :    * flags `match_not_bol` and `match_not_bow` are ignored by the algorithms
     333             :    * `regex_match`, `regex_search`, and `regex_replace`, and by the iterators
     334             :    * `regex_iterator` and `regex_token_iterator`.
     335             :    */
     336             :   _GLIBCXX17_INLINE constexpr match_flag_type match_prev_avail =
     337             :     static_cast<match_flag_type>(1 << _S_prev_avail);
     338             : 
     339             :   /**
     340             :    * When a regular expression match is to be replaced by a new string, the
     341             :    * new string is constructed using the rules used by the ECMAScript replace
     342             :    * function in ECMA- 262 [Ecma International, ECMAScript Language
     343             :    * Specification, Standard Ecma-262, third edition, 1999], part 15.5.4.11
     344             :    * String.prototype.replace. In addition, during search and replace
     345             :    * operations all non-overlapping occurrences of the regular expression
     346             :    * are located and replaced, and sections of the input that did not match
     347             :    * the expression are copied unchanged to the output string.
     348             :    *
     349             :    * Format strings (from ECMA-262 [15.5.4.11]):
     350             :    * @li $$  The dollar-sign itself ($)
     351             :    * @li $&  The matched substring.
     352             :    * @li $`  The portion of @a string that precedes the matched substring.
     353             :    *         This would be match_results::prefix().
     354             :    * @li $'  The portion of @a string that follows the matched substring.
     355             :    *         This would be match_results::suffix().
     356             :    * @li $n  The nth capture, where n is in [1,9] and $n is not followed by a
     357             :    *         decimal digit.  If n <= match_results::size() and the nth capture
     358             :    *         is undefined, use the empty string instead.  If n >
     359             :    *         match_results::size(), the result is implementation-defined.
     360             :    * @li $nn The nnth capture, where nn is a two-digit decimal number on
     361             :    *         [01, 99].  If nn <= match_results::size() and the nth capture is
     362             :    *         undefined, use the empty string instead. If
     363             :    *         nn > match_results::size(), the result is implementation-defined.
     364             :    */
     365             :   _GLIBCXX17_INLINE constexpr match_flag_type format_default =
     366             :     static_cast<match_flag_type>(0);
     367             : 
     368             :   /**
     369             :    * When a regular expression match is to be replaced by a new string, the
     370             :    * new string is constructed using the rules used by the POSIX sed utility
     371             :    * in IEEE Std 1003.1- 2001 [IEEE, Information Technology -- Portable
     372             :    * Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
     373             :    */
     374             :   _GLIBCXX17_INLINE constexpr match_flag_type format_sed =
     375             :     static_cast<match_flag_type>(1 << _S_sed);
     376             : 
     377             :   /**
     378             :    * During a search and replace operation, sections of the character
     379             :    * container sequence being searched that do not match the regular
     380             :    * expression shall not be copied to the output string.
     381             :    */
     382             :   _GLIBCXX17_INLINE constexpr match_flag_type format_no_copy =
     383             :     static_cast<match_flag_type>(1 << _S_no_copy);
     384             : 
     385             :   /**
     386             :    * When specified during a search and replace operation, only the first
     387             :    * occurrence of the regular expression shall be replaced.
     388             :    */
     389             :   _GLIBCXX17_INLINE constexpr match_flag_type format_first_only =
     390             :     static_cast<match_flag_type>(1 << _S_first_only);
     391             : 
     392             :   constexpr inline match_flag_type
     393       73144 :   operator&(match_flag_type __a, match_flag_type __b)
     394             :   {
     395             :     return (match_flag_type)(static_cast<unsigned int>(__a)
     396       73144 :                                 & static_cast<unsigned int>(__b));
     397             :   }
     398             : 
     399             :   constexpr inline match_flag_type
     400       33760 :   operator|(match_flag_type __a, match_flag_type __b)
     401             :   {
     402             :     return (match_flag_type)(static_cast<unsigned int>(__a)
     403       33760 :                                 | static_cast<unsigned int>(__b));
     404             :   }
     405             : 
     406             :   constexpr inline match_flag_type
     407             :   operator^(match_flag_type __a, match_flag_type __b)
     408             :   {
     409             :     return (match_flag_type)(static_cast<unsigned int>(__a)
     410             :                                 ^ static_cast<unsigned int>(__b));
     411             :   }
     412             : 
     413             :   constexpr inline match_flag_type
     414        6501 :   operator~(match_flag_type __a)
     415        6501 :   { return (match_flag_type)(~static_cast<unsigned int>(__a)); }
     416             : 
     417             :   inline match_flag_type&
     418        6501 :   operator&=(match_flag_type& __a, match_flag_type __b)
     419        6501 :   { return __a = __a & __b; }
     420             : 
     421             :   inline match_flag_type&
     422       27259 :   operator|=(match_flag_type& __a, match_flag_type __b)
     423       27259 :   { return __a = __a | __b; }
     424             : 
     425             :   inline match_flag_type&
     426             :   operator^=(match_flag_type& __a, match_flag_type __b)
     427             :   { return __a = __a ^ __b; }
     428             : 
     429             :   ///@}
     430             : } // namespace regex_constants
     431             : /// @} group regex
     432             : 
     433             : _GLIBCXX_END_NAMESPACE_VERSION
     434             : } // namespace std
     435             : 

Generated by: LCOV version 1.14