URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [libstdc++-v3/] [include/] [std/] [system_error] - Rev 826
Compare with Previous | Blame | View Log
// <system_error> -*- C++ -*-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.//// This file is part of the GNU ISO C++ Library. This library is free// software; you can redistribute it and/or modify it under the// terms of the GNU General Public License as published by the// Free Software Foundation; either version 3, or (at your option)// any later version.// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// Under Section 7 of GPL version 3, you are granted additional// permissions described in the GCC Runtime Library Exception, version// 3.1, as published by the Free Software Foundation.// You should have received a copy of the GNU General Public License and// a copy of the GCC Runtime Library Exception along with this program;// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see// <http://www.gnu.org/licenses/>./** @file system_error* This is a Standard C++ Library header.*/#ifndef _GLIBCXX_SYSTEM_ERROR#define _GLIBCXX_SYSTEM_ERROR 1#pragma GCC system_header#ifndef __GXX_EXPERIMENTAL_CXX0X__# include <bits/c++0x_warning.h>#else#include <bits/c++config.h>#include <bits/error_constants.h>#include <iosfwd>#include <stdexcept>_GLIBCXX_BEGIN_NAMESPACE(std)class error_code;class error_condition;class error_category;class system_error;/// is_error_code_enumtemplate<typename _Tp>struct is_error_code_enum : public false_type { };/// is_error_condition_enumtemplate<typename _Tp>struct is_error_condition_enum : public false_type { };template<>struct is_error_condition_enum<errc>: public true_type { };/// error_categoryclass error_category{protected:error_category();public:virtual ~error_category() { }error_category(const error_category&) = delete;error_category& operator=(const error_category&) = delete;virtual const char*name() const = 0;virtual stringmessage(int) const = 0;virtual error_conditiondefault_error_condition(int __i) const;virtual boolequivalent(int __i, const error_condition& __cond) const;virtual boolequivalent(const error_code& __code, int __i) const;booloperator<(const error_category& __other) const{ return less<const error_category*>()(this, &__other); }booloperator==(const error_category& __other) const{ return this == &__other; }booloperator!=(const error_category& __other) const{ return this != &__other; }};inline error_category::error_category() = default;// DR 890._GLIBCXX_CONST const error_category& system_category() throw();_GLIBCXX_CONST const error_category& generic_category() throw();error_code make_error_code(errc);template<typename _Tp>struct hash;/// error_code// Implementation-specific error identificationstruct error_code{error_code(): _M_value(0), _M_cat(&system_category()) { }error_code(int __v, const error_category& __cat): _M_value(__v), _M_cat(&__cat) { }template<typename _ErrorCodeEnum>error_code(_ErrorCodeEnum __e,typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value>::type* = 0){ *this = make_error_code(__e); }voidassign(int __v, const error_category& __cat){_M_value = __v;_M_cat = &__cat;}voidclear(){ assign(0, system_category()); }// DR 804.template<typename _ErrorCodeEnum>typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value,error_code&>::typeoperator=(_ErrorCodeEnum __e){ return *this = make_error_code(__e); }intvalue() const { return _M_value; }const error_category&category() const { return *_M_cat; }error_conditiondefault_error_condition() const;stringmessage() const{ return category().message(value()); }explicit operator bool() const{ return _M_value != 0 ? true : false; }// DR 804.private:friend class hash<error_code>;int _M_value;const error_category* _M_cat;};// 19.4.2.6 non-member functionsinline error_codemake_error_code(errc __e){ return error_code(static_cast<int>(__e), generic_category()); }inline booloperator<(const error_code& __lhs, const error_code& __rhs){return (__lhs.category() < __rhs.category()|| (__lhs.category() == __rhs.category()&& __lhs.value() < __rhs.value()));}template<typename _CharT, typename _Traits>basic_ostream<_CharT, _Traits>&operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e){ return (__os << __e.category().name() << ':' << __e.value()); }error_condition make_error_condition(errc);/// error_condition// Portable error identificationstruct error_condition{error_condition(): _M_value(0), _M_cat(&generic_category()) { }error_condition(int __v, const error_category& __cat): _M_value(__v), _M_cat(&__cat) { }template<typename _ErrorConditionEnum>error_condition(_ErrorConditionEnum __e,typename enable_if<is_error_condition_enum<_ErrorConditionEnum>::value>::type* = 0){ *this = make_error_condition(__e); }voidassign(int __v, const error_category& __cat){_M_value = __v;_M_cat = &__cat;}// DR 804.template<typename _ErrorConditionEnum>typename enable_if<is_error_condition_enum<_ErrorConditionEnum>::value, error_condition&>::typeoperator=(_ErrorConditionEnum __e){ return *this = make_error_condition(__e); }voidclear(){ assign(0, generic_category()); }// 19.4.3.4 observersintvalue() const { return _M_value; }const error_category&category() const { return *_M_cat; }stringmessage() const{ return category().message(value()); }explicit operator bool() const{ return _M_value != 0 ? true : false; }// DR 804.private:int _M_value;const error_category* _M_cat;};// 19.4.3.6 non-member functionsinline error_conditionmake_error_condition(errc __e){ return error_condition(static_cast<int>(__e), generic_category()); }inline booloperator<(const error_condition& __lhs, const error_condition& __rhs){return (__lhs.category() < __rhs.category()|| (__lhs.category() == __rhs.category()&& __lhs.value() < __rhs.value()));}// 19.4.4 Comparison operatorsinline booloperator==(const error_code& __lhs, const error_code& __rhs){ return (__lhs.category() == __rhs.category()&& __lhs.value() == __rhs.value()); }inline booloperator==(const error_code& __lhs, const error_condition& __rhs){return (__lhs.category().equivalent(__lhs.value(), __rhs)|| __rhs.category().equivalent(__lhs, __rhs.value()));}inline booloperator==(const error_condition& __lhs, const error_code& __rhs){return (__rhs.category().equivalent(__rhs.value(), __lhs)|| __lhs.category().equivalent(__rhs, __lhs.value()));}inline booloperator==(const error_condition& __lhs, const error_condition& __rhs){return (__lhs.category() == __rhs.category()&& __lhs.value() == __rhs.value());}inline booloperator!=(const error_code& __lhs, const error_code& __rhs){ return !(__lhs == __rhs); }inline booloperator!=(const error_code& __lhs, const error_condition& __rhs){ return !(__lhs == __rhs); }inline booloperator!=(const error_condition& __lhs, const error_code& __rhs){ return !(__lhs == __rhs); }inline booloperator!=(const error_condition& __lhs, const error_condition& __rhs){ return !(__lhs == __rhs); }/*** @brief Thrown to indicate error code of underlying system.** @ingroup exceptions*/class system_error : public std::runtime_error{private:error_code _M_code;public:system_error(error_code __ec = error_code()): runtime_error(""), _M_code(__ec) { }system_error(error_code __ec, const string& __what): runtime_error(__what), _M_code(__ec) { }/** TODO: Add const char* ctors to all exceptions.** system_error(error_code __ec, const char* __what)* : runtime_error(__what), _M_code(__ec) { }** system_error(int __v, const error_category& __ecat, const char* __what)* : runtime_error(__what), _M_code(error_code(__v, __ecat)) { }*/system_error(int __v, const error_category& __ecat): runtime_error(""), _M_code(error_code(__v, __ecat)) { }system_error(int __v, const error_category& __ecat, const string& __what): runtime_error(__what), _M_code(error_code(__v, __ecat)) { }virtual ~system_error() throw();const error_code&code() const throw() { return _M_code; }};_GLIBCXX_END_NAMESPACE#ifndef _GLIBCXX_COMPATIBILITY_CXX0X#include <bits/functional_hash.h>_GLIBCXX_BEGIN_NAMESPACE(std)// DR 1182./// std::hash specialization for error_code.template<>struct hash<error_code>: public std::unary_function<error_code, size_t>{size_toperator()(const error_code& __e) const{const size_t __tmp = std::_Fnv_hash::hash(__e._M_value);return std::_Fnv_hash::__hash_combine(__e._M_cat, __tmp);}};_GLIBCXX_END_NAMESPACE#endif // _GLIBCXX_COMPATIBILITY_CXX0X#endif // __GXX_EXPERIMENTAL_CXX0X__#endif // _GLIBCXX_SYSTEM_ERROR
