1 // class template regex -*- C++ -*- 2 3 // Copyright (C) 2010-2013 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_error.h 27 * @brief Error and exception objects 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 /** 36 * @addtogroup regex 37 * @{ 38 */ 39 40 namespace regex_constants 41 { 42 _GLIBCXX_BEGIN_NAMESPACE_VERSION 43 44 /** 45 * @name 5.3 Error Types 46 */ 47 //@{ 48 49 enum error_type 50 { 51 _S_error_collate, 52 _S_error_ctype, 53 _S_error_escape, 54 _S_error_backref, 55 _S_error_brack, 56 _S_error_paren, 57 _S_error_brace, 58 _S_error_badbrace, 59 _S_error_range, 60 _S_error_space, 61 _S_error_badrepeat, 62 _S_error_complexity, 63 _S_error_stack, 64 _S_error_last 65 }; 66 67 /** The expression contained an invalid collating element name. */ 68 constexpr error_type error_collate(_S_error_collate); 69 70 /** The expression contained an invalid character class name. */ 71 constexpr error_type error_ctype(_S_error_ctype); 72 73 /** 74 * The expression contained an invalid escaped character, or a trailing 75 * escape. 76 */ 77 constexpr error_type error_escape(_S_error_escape); 78 79 /** The expression contained an invalid back reference. */ 80 constexpr error_type error_backref(_S_error_backref); 81 82 /** The expression contained mismatched [ and ]. */ 83 constexpr error_type error_brack(_S_error_brack); 84 85 /** The expression contained mismatched ( and ). */ 86 constexpr error_type error_paren(_S_error_paren); 87 88 /** The expression contained mismatched { and } */ 89 constexpr error_type error_brace(_S_error_brace); 90 91 /** The expression contained an invalid range in a {} expression. */ 92 constexpr error_type error_badbrace(_S_error_badbrace); 93 94 /** 95 * The expression contained an invalid character range, 96 * such as [b-a] in most encodings. 97 */ 98 constexpr error_type error_range(_S_error_range); 99 100 /** 101 * There was insufficient memory to convert the expression into a 102 * finite state machine. 103 */ 104 constexpr error_type error_space(_S_error_space); 105 106 /** 107 * One of <em>*?+{</em> was not preceded by a valid regular expression. 108 */ 109 constexpr error_type error_badrepeat(_S_error_badrepeat); 110 111 /** 112 * The complexity of an attempted match against a regular expression 113 * exceeded a pre-set level. 114 */ 115 constexpr error_type error_complexity(_S_error_complexity); 116 117 /** 118 * There was insufficient memory to determine whether the 119 * regular expression could match the specified character sequence. 120 */ 121 constexpr error_type error_stack(_S_error_stack); 122 123 //@} 124 _GLIBCXX_END_NAMESPACE_VERSION 125 } // namespace regex_constants 126 127 _GLIBCXX_BEGIN_NAMESPACE_VERSION 128 129 // [7.8] Class regex_error 130 /** 131 * @brief A regular expression exception class. 132 * @ingroup exceptions 133 * 134 * The regular expression library throws objects of this class on error. 135 */ 136 class regex_error : public std::runtime_error 137 { 138 regex_constants::error_type _M_code; 139 140 public: 141 /** 142 * @brief Constructs a regex_error object. 143 * 144 * @param __ecode the regex error code. 145 */ 146 explicit 147 regex_error(regex_constants::error_type __ecode); 148 149 virtual ~regex_error() throw(); 150 151 /** 152 * @brief Gets the regex error code. 153 * 154 * @returns the regex error code. 155 */ 156 regex_constants::error_type 157 code() const 158 { return _M_code; } 159 }; 160 161 //@} // group regex 162 163 void 164 __throw_regex_error(regex_constants::error_type __ecode); 165 166 _GLIBCXX_END_NAMESPACE_VERSION 167 } // namespace std 168