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