Home | History | Annotate | Download | only in bits
      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