1*e4b17023SJohn Marino // class template regex -*- C++ -*- 2*e4b17023SJohn Marino 3*e4b17023SJohn Marino // Copyright (C) 2010, 2011 Free Software Foundation, Inc. 4*e4b17023SJohn Marino // 5*e4b17023SJohn Marino // This file is part of the GNU ISO C++ Library. This library is free 6*e4b17023SJohn Marino // software; you can redistribute it and/or modify it under the 7*e4b17023SJohn Marino // terms of the GNU General Public License as published by the 8*e4b17023SJohn Marino // Free Software Foundation; either version 3, or (at your option) 9*e4b17023SJohn Marino // any later version. 10*e4b17023SJohn Marino 11*e4b17023SJohn Marino // This library is distributed in the hope that it will be useful, 12*e4b17023SJohn Marino // but WITHOUT ANY WARRANTY; without even the implied warranty of 13*e4b17023SJohn Marino // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*e4b17023SJohn Marino // GNU General Public License for more details. 15*e4b17023SJohn Marino 16*e4b17023SJohn Marino // Under Section 7 of GPL version 3, you are granted additional 17*e4b17023SJohn Marino // permissions described in the GCC Runtime Library Exception, version 18*e4b17023SJohn Marino // 3.1, as published by the Free Software Foundation. 19*e4b17023SJohn Marino 20*e4b17023SJohn Marino // You should have received a copy of the GNU General Public License and 21*e4b17023SJohn Marino // a copy of the GCC Runtime Library Exception along with this program; 22*e4b17023SJohn Marino // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23*e4b17023SJohn Marino // <http://www.gnu.org/licenses/>. 24*e4b17023SJohn Marino 25*e4b17023SJohn Marino /** 26*e4b17023SJohn Marino * @file bits/regex_error.h 27*e4b17023SJohn Marino * @brief Error and exception objects for the std regex library. 28*e4b17023SJohn Marino * 29*e4b17023SJohn Marino * This is an internal header file, included by other library headers. 30*e4b17023SJohn Marino * Do not attempt to use it directly. @headername{regex} 31*e4b17023SJohn Marino */ 32*e4b17023SJohn Marino 33*e4b17023SJohn Marino namespace std _GLIBCXX_VISIBILITY(default) 34*e4b17023SJohn Marino { 35*e4b17023SJohn Marino namespace regex_constants 36*e4b17023SJohn Marino { 37*e4b17023SJohn Marino _GLIBCXX_BEGIN_NAMESPACE_VERSION 38*e4b17023SJohn Marino 39*e4b17023SJohn Marino /** 40*e4b17023SJohn Marino * @name 5.3 Error Types 41*e4b17023SJohn Marino */ 42*e4b17023SJohn Marino //@{ 43*e4b17023SJohn Marino 44*e4b17023SJohn Marino enum error_type 45*e4b17023SJohn Marino { 46*e4b17023SJohn Marino _S_error_collate, 47*e4b17023SJohn Marino _S_error_ctype, 48*e4b17023SJohn Marino _S_error_escape, 49*e4b17023SJohn Marino _S_error_backref, 50*e4b17023SJohn Marino _S_error_brack, 51*e4b17023SJohn Marino _S_error_paren, 52*e4b17023SJohn Marino _S_error_brace, 53*e4b17023SJohn Marino _S_error_badbrace, 54*e4b17023SJohn Marino _S_error_range, 55*e4b17023SJohn Marino _S_error_space, 56*e4b17023SJohn Marino _S_error_badrepeat, 57*e4b17023SJohn Marino _S_error_complexity, 58*e4b17023SJohn Marino _S_error_stack, 59*e4b17023SJohn Marino _S_error_last 60*e4b17023SJohn Marino }; 61*e4b17023SJohn Marino 62*e4b17023SJohn Marino /** The expression contained an invalid collating element name. */ 63*e4b17023SJohn Marino static constexpr error_type error_collate(_S_error_collate); 64*e4b17023SJohn Marino 65*e4b17023SJohn Marino /** The expression contained an invalid character class name. */ 66*e4b17023SJohn Marino static constexpr error_type error_ctype(_S_error_ctype); 67*e4b17023SJohn Marino 68*e4b17023SJohn Marino /** 69*e4b17023SJohn Marino * The expression contained an invalid escaped character, or a trailing 70*e4b17023SJohn Marino * escape. 71*e4b17023SJohn Marino */ 72*e4b17023SJohn Marino static constexpr error_type error_escape(_S_error_escape); 73*e4b17023SJohn Marino 74*e4b17023SJohn Marino /** The expression contained an invalid back reference. */ 75*e4b17023SJohn Marino static constexpr error_type error_backref(_S_error_backref); 76*e4b17023SJohn Marino 77*e4b17023SJohn Marino /** The expression contained mismatched [ and ]. */ 78*e4b17023SJohn Marino static constexpr error_type error_brack(_S_error_brack); 79*e4b17023SJohn Marino 80*e4b17023SJohn Marino /** The expression contained mismatched ( and ). */ 81*e4b17023SJohn Marino static constexpr error_type error_paren(_S_error_paren); 82*e4b17023SJohn Marino 83*e4b17023SJohn Marino /** The expression contained mismatched { and } */ 84*e4b17023SJohn Marino static constexpr error_type error_brace(_S_error_brace); 85*e4b17023SJohn Marino 86*e4b17023SJohn Marino /** The expression contained an invalid range in a {} expression. */ 87*e4b17023SJohn Marino static constexpr error_type error_badbrace(_S_error_badbrace); 88*e4b17023SJohn Marino 89*e4b17023SJohn Marino /** 90*e4b17023SJohn Marino * The expression contained an invalid character range, 91*e4b17023SJohn Marino * such as [b-a] in most encodings. 92*e4b17023SJohn Marino */ 93*e4b17023SJohn Marino static constexpr error_type error_range(_S_error_range); 94*e4b17023SJohn Marino 95*e4b17023SJohn Marino /** 96*e4b17023SJohn Marino * There was insufficient memory to convert the expression into a 97*e4b17023SJohn Marino * finite state machine. 98*e4b17023SJohn Marino */ 99*e4b17023SJohn Marino static constexpr error_type error_space(_S_error_space); 100*e4b17023SJohn Marino 101*e4b17023SJohn Marino /** 102*e4b17023SJohn Marino * One of <em>*?+{</em> was not preceded by a valid regular expression. 103*e4b17023SJohn Marino */ 104*e4b17023SJohn Marino static constexpr error_type error_badrepeat(_S_error_badrepeat); 105*e4b17023SJohn Marino 106*e4b17023SJohn Marino /** 107*e4b17023SJohn Marino * The complexity of an attempted match against a regular expression 108*e4b17023SJohn Marino * exceeded a pre-set level. 109*e4b17023SJohn Marino */ 110*e4b17023SJohn Marino static constexpr error_type error_complexity(_S_error_complexity); 111*e4b17023SJohn Marino 112*e4b17023SJohn Marino /** 113*e4b17023SJohn Marino * There was insufficient memory to determine whether the 114*e4b17023SJohn Marino * regular expression could match the specified character sequence. 115*e4b17023SJohn Marino */ 116*e4b17023SJohn Marino static constexpr error_type error_stack(_S_error_stack); 117*e4b17023SJohn Marino 118*e4b17023SJohn Marino //@} 119*e4b17023SJohn Marino _GLIBCXX_END_NAMESPACE_VERSION 120*e4b17023SJohn Marino } // namespace regex_constants 121*e4b17023SJohn Marino 122*e4b17023SJohn Marino _GLIBCXX_BEGIN_NAMESPACE_VERSION 123*e4b17023SJohn Marino 124*e4b17023SJohn Marino // [7.8] Class regex_error 125*e4b17023SJohn Marino /** 126*e4b17023SJohn Marino * @brief A regular expression exception class. 127*e4b17023SJohn Marino * @ingroup exceptions 128*e4b17023SJohn Marino * 129*e4b17023SJohn Marino * The regular expression library throws objects of this class on error. 130*e4b17023SJohn Marino */ 131*e4b17023SJohn Marino class regex_error : public std::runtime_error 132*e4b17023SJohn Marino { 133*e4b17023SJohn Marino regex_constants::error_type _M_code; 134*e4b17023SJohn Marino 135*e4b17023SJohn Marino public: 136*e4b17023SJohn Marino /** 137*e4b17023SJohn Marino * @brief Constructs a regex_error object. 138*e4b17023SJohn Marino * 139*e4b17023SJohn Marino * @param __ecode the regex error code. 140*e4b17023SJohn Marino */ 141*e4b17023SJohn Marino explicit 142*e4b17023SJohn Marino regex_error(regex_constants::error_type __ecode); 143*e4b17023SJohn Marino 144*e4b17023SJohn Marino virtual ~regex_error() throw(); 145*e4b17023SJohn Marino 146*e4b17023SJohn Marino /** 147*e4b17023SJohn Marino * @brief Gets the regex error code. 148*e4b17023SJohn Marino * 149*e4b17023SJohn Marino * @returns the regex error code. 150*e4b17023SJohn Marino */ 151*e4b17023SJohn Marino regex_constants::error_type 152*e4b17023SJohn Marino code() const 153*e4b17023SJohn Marino { return _M_code; } 154*e4b17023SJohn Marino }; 155*e4b17023SJohn Marino 156*e4b17023SJohn Marino 157*e4b17023SJohn Marino void 158*e4b17023SJohn Marino __throw_regex_error(regex_constants::error_type __ecode); 159*e4b17023SJohn Marino 160*e4b17023SJohn Marino _GLIBCXX_END_NAMESPACE_VERSION 161*e4b17023SJohn Marino } // namespace std 162