shared_ptr.h (hash<shared_ptr>): Add.
2010-06-11 Paolo Carlini <paolo.carlini@oracle.com> * include/bits/shared_ptr.h (hash<shared_ptr>): Add. * include/bits/shared_ptr_base.h (hash<__shared_ptr>): Likewise. * include/bits/unique_ptr.h (hash<unique_ptr>): Likewise. * testsuite/20_util/shared_ptr/hash/1.cc: New. * testsuite/20_util/unique_ptr/hash/1.cc: Likewise. From-SVN: r160621
This commit is contained in:
parent
6575ae2160
commit
b0e788cc09
@ -1,3 +1,11 @@
|
||||
2010-06-11 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
* include/bits/shared_ptr.h (hash<shared_ptr>): Add.
|
||||
* include/bits/shared_ptr_base.h (hash<__shared_ptr>): Likewise.
|
||||
* include/bits/unique_ptr.h (hash<unique_ptr>): Likewise.
|
||||
* testsuite/20_util/shared_ptr/hash/1.cc: New.
|
||||
* testsuite/20_util/unique_ptr/hash/1.cc: Likewise.
|
||||
|
||||
2010-06-11 Jonathan Wakely <jwakely.gcc@gmail.com>
|
||||
|
||||
* doc/xml/manual/appendix_contributing.xml: Indent code examples
|
||||
|
@ -514,6 +514,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
std::forward<_Args>(__args)...);
|
||||
}
|
||||
|
||||
/// std::hash specialization for shared_ptr.
|
||||
template<typename _Tp>
|
||||
struct hash<shared_ptr<_Tp>>
|
||||
: public std::unary_function<shared_ptr<_Tp>, size_t>
|
||||
{
|
||||
size_t
|
||||
operator()(const shared_ptr<_Tp>& __s) const
|
||||
{ return std::hash<_Tp*>()(__s.get()); }
|
||||
};
|
||||
|
||||
// @} group pointer_abstractions
|
||||
|
||||
_GLIBCXX_END_NAMESPACE
|
||||
|
@ -1164,6 +1164,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
std::forward<_Args>(__args)...);
|
||||
}
|
||||
|
||||
/// std::hash specialization for __shared_ptr.
|
||||
template<typename _Tp, _Lock_policy _Lp>
|
||||
struct hash<__shared_ptr<_Tp, _Lp>>
|
||||
: public std::unary_function<__shared_ptr<_Tp, _Lp>, size_t>
|
||||
{
|
||||
size_t
|
||||
operator()(const __shared_ptr<_Tp, _Lp>& __s) const
|
||||
{ return std::hash<_Tp*>()(__s.get()); }
|
||||
};
|
||||
|
||||
_GLIBCXX_END_NAMESPACE
|
||||
|
||||
#endif // _SHARED_PTR_BASE_H
|
||||
|
@ -233,7 +233,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
// [unique.ptr.runtime]
|
||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
// DR 740 - omit specialization for array objects with a compile time length
|
||||
template<typename _Tp, typename _Tp_Deleter>
|
||||
template<typename _Tp, typename _Tp_Deleter>
|
||||
class unique_ptr<_Tp[], _Tp_Deleter>
|
||||
{
|
||||
typedef std::tuple<_Tp*, _Tp_Deleter> __tuple_type;
|
||||
@ -444,6 +444,19 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
const unique_ptr<_Up, _Up_Deleter>& __y)
|
||||
{ return !(__x.get() < __y.get()); }
|
||||
|
||||
/// std::hash specialization for unique_ptr.
|
||||
template<typename _Tp, typename _Tp_Deleter>
|
||||
struct hash<unique_ptr<_Tp, _Tp_Deleter>>
|
||||
: public std::unary_function<unique_ptr<_Tp, _Tp_Deleter>, size_t>
|
||||
{
|
||||
size_t
|
||||
operator()(const unique_ptr<_Tp, _Tp_Deleter>& __u) const
|
||||
{
|
||||
typedef unique_ptr<_Tp, _Tp_Deleter> _UP;
|
||||
return std::hash<typename _UP::pointer>()(__u.get());
|
||||
}
|
||||
};
|
||||
|
||||
// @} group pointer_abstractions
|
||||
|
||||
_GLIBCXX_END_NAMESPACE
|
||||
|
48
libstdc++-v3/testsuite/20_util/shared_ptr/hash/1.cc
Normal file
48
libstdc++-v3/testsuite/20_util/shared_ptr/hash/1.cc
Normal file
@ -0,0 +1,48 @@
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// 2010-06-11 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 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.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <memory>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
struct T { };
|
||||
|
||||
std::shared_ptr<T> s0(new T);
|
||||
std::hash<std::shared_ptr<T>> hs0;
|
||||
std::hash<T*> hp0;
|
||||
|
||||
VERIFY( hs0(s0) == hp0(s0.get()) );
|
||||
|
||||
std::__shared_ptr<T> s1(new T);
|
||||
std::hash<std::__shared_ptr<T>> hs1;
|
||||
std::hash<T*> hp1;
|
||||
|
||||
VERIFY( hs1(s1) == hp1(s1.get()) );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
48
libstdc++-v3/testsuite/20_util/unique_ptr/hash/1.cc
Normal file
48
libstdc++-v3/testsuite/20_util/unique_ptr/hash/1.cc
Normal file
@ -0,0 +1,48 @@
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// 2010-06-11 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 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.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <memory>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
struct T { };
|
||||
|
||||
std::unique_ptr<T> u0(new T);
|
||||
std::hash<std::unique_ptr<T>> hu0;
|
||||
std::hash<typename std::unique_ptr<T>::pointer> hp0;
|
||||
|
||||
VERIFY( hu0(u0) == hp0(u0.get()) );
|
||||
|
||||
std::unique_ptr<T[]> u1(new T[10]);
|
||||
std::hash<std::unique_ptr<T[]>> hu1;
|
||||
std::hash<typename std::unique_ptr<T[]>::pointer> hp1;
|
||||
|
||||
VERIFY( hu1(u1) == hp1(u1.get()) );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user