X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=libstdc%2B%2B-v3%2Fsrc%2Fcompatibility-c%2B%2B0x.cc;h=08a572761f9c2b73fd10db085e6511119201414a;hb=45936f18b2fbb1ca6647f04675fba92967276249;hp=0e92135d403b254104b6286112b983e0d3d4b9ea;hpb=95757e522e315b154d47243830255df1f9ad33e2;p=pf3gnuchains%2Fgcc-fork.git diff --git a/libstdc++-v3/src/compatibility-c++0x.cc b/libstdc++-v3/src/compatibility-c++0x.cc index 0e92135d403..08a572761f9 100644 --- a/libstdc++-v3/src/compatibility-c++0x.cc +++ b/libstdc++-v3/src/compatibility-c++0x.cc @@ -1,6 +1,6 @@ // Compatibility symbols for previous versions, C++0x bits -*- C++ -*- -// Copyright (C) 2009 Free Software Foundation, Inc. +// Copyright (C) 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 @@ -22,48 +22,63 @@ // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see // . -#include +#define _GLIBCXX_COMPATIBILITY_CXX0X #include -#include #include #ifndef __GXX_EXPERIMENTAL_CXX0X__ # error "compatibility-c++0x.cc must be compiled with -std=gnu++0x" #endif -namespace std +namespace std _GLIBCXX_VISIBILITY(default) { + // gcc-4.4.0 + // exported std::lock_error +#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) + class lock_error : public exception + { + public: + virtual const char* + _GLIBCXX_CONST what() const throw(); + }; + + const char* + lock_error::what() const throw() + { return "std::lock_error"; } +#endif + // We need these due to the symbols exported since GLIBCXX_3.4.10. // See libstdc++/41662 for details. - template - struct hash : public std::unary_function<_Tp, size_t> - { - size_t - operator()(_Tp __val) const; - }; +#ifndef _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL + template<> + size_t + hash::operator()(string __s) const + { return _Hash_impl::hash(__s.data(), __s.length()); } - /// Dummy generic implementation (for sizeof(size_t) != 4, 8). - template - struct _Fnv_hash - { - static size_t - hash(const char* __first, size_t __length) - { - size_t __result = 0; - for (; __length > 0; --__length) - __result = (__result * 131) + *__first++; - return __result; - } - }; + template<> + size_t + hash::operator()(const string& __s) const + { return _Hash_impl::hash(__s.data(), __s.length()); } -#include "hash.cc" +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + size_t + hash::operator()(wstring __s) const + { return _Hash_impl::hash(__s.data(), __s.length() * sizeof(wchar_t)); } + + template<> + size_t + hash::operator()(const wstring& __s) const + { return _Hash_impl::hash(__s.data(), __s.length() * sizeof(wchar_t)); } +#endif +#endif template<> size_t hash::operator()(error_code __e) const - { - const char* __p = reinterpret_cast(&__e); - return _Fnv_hash<>::hash(__p, sizeof(__e)); + { + const size_t __tmp = std::_Hash_impl::hash(__e._M_value); + return std::_Hash_impl::__hash_combine(__e._M_cat, __tmp); } }