thread (__thread_data_base): Nest class in std::thread.
2009-02-05 Chris Fairles <cfairles@gcc.gnu.org> Benjamin Kosnik <bkoz@redhat.com> * include/std/thread (__thread_data_base): Nest class in std::thread. (__thread_data): Likewise. (__thread_data_ptr): Nest typedef in std::thread. * src/thread.cc (__thread_proxy): Qualify the above names. * config/abi/pre/gnu.ver: Remove unused exports. Co-Authored-By: Benjamin Kosnik <bkoz@redhat.com> From-SVN: r143969
This commit is contained in:
parent
ee04b57491
commit
8644ecf59d
|
@ -1,3 +1,12 @@
|
|||
2009-02-05 Chris Fairles <cfairles@gcc.gnu.org>
|
||||
Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
* include/std/thread (__thread_data_base): Nest class in std::thread.
|
||||
(__thread_data): Likewise.
|
||||
(__thread_data_ptr): Nest typedef in std::thread.
|
||||
* src/thread.cc (__thread_proxy): Qualify the above names.
|
||||
* config/abi/pre/gnu.ver: Remove unused exports.
|
||||
|
||||
2009-02-04 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
* include/bits/unique_ptr.h: Remove private __this_type typedef.
|
||||
|
|
|
@ -897,9 +897,6 @@ GLIBCXX_3.4.11 {
|
|||
_ZNSt22condition_variable_anyD2Ev;
|
||||
|
||||
# thread
|
||||
_ZNSt10shared_ptrISt18__thread_data_baseED1Ev;
|
||||
_ZNSt12bad_weak_ptrD0Ev;
|
||||
_ZNSt12bad_weak_ptrD1Ev;
|
||||
_ZNSt6thread15_M_start_threadEv;
|
||||
_ZNSt6thread4joinEv;
|
||||
_ZNSt6thread6detachEv;
|
||||
|
|
|
@ -53,41 +53,25 @@
|
|||
|
||||
namespace std
|
||||
{
|
||||
class __thread_data_base;
|
||||
|
||||
typedef shared_ptr<__thread_data_base> __thread_data_ptr;
|
||||
|
||||
class __thread_data_base
|
||||
{
|
||||
public:
|
||||
__thread_data_base() = default;
|
||||
virtual ~__thread_data_base() = default;
|
||||
|
||||
virtual void _M_run() = 0;
|
||||
|
||||
__gthread_t _M_thread_handle;
|
||||
__thread_data_ptr _M_this_ptr;
|
||||
};
|
||||
|
||||
template<typename _Callable>
|
||||
class __thread_data : public __thread_data_base
|
||||
{
|
||||
public:
|
||||
__thread_data(_Callable&& __f)
|
||||
: _M_func(std::forward<_Callable>(__f))
|
||||
{ }
|
||||
|
||||
void _M_run()
|
||||
{ _M_func(); }
|
||||
|
||||
private:
|
||||
_Callable _M_func;
|
||||
};
|
||||
|
||||
/// thread
|
||||
class thread
|
||||
{
|
||||
public:
|
||||
class __thread_data_base;
|
||||
|
||||
typedef shared_ptr<__thread_data_base> __thread_data_ptr;
|
||||
|
||||
class __thread_data_base
|
||||
{
|
||||
public:
|
||||
__thread_data_base() = default;
|
||||
virtual ~__thread_data_base() = default;
|
||||
|
||||
virtual void _M_run() = 0;
|
||||
|
||||
__gthread_t _M_thread_handle;
|
||||
__thread_data_ptr _M_this_ptr;
|
||||
};
|
||||
|
||||
// types
|
||||
class id;
|
||||
typedef __gthread_t native_handle_type;
|
||||
|
@ -152,6 +136,21 @@ namespace std
|
|||
static unsigned hardware_concurrency();
|
||||
|
||||
private:
|
||||
template<typename _Callable>
|
||||
class __thread_data : public __thread_data_base
|
||||
{
|
||||
public:
|
||||
__thread_data(_Callable&& __f)
|
||||
: _M_func(std::forward<_Callable>(__f))
|
||||
{ }
|
||||
|
||||
void _M_run()
|
||||
{ _M_func(); }
|
||||
|
||||
private:
|
||||
_Callable _M_func;
|
||||
};
|
||||
|
||||
template<typename _Callable>
|
||||
__thread_data_ptr
|
||||
_M_make_thread_data(_Callable&& __f)
|
||||
|
|
|
@ -40,8 +40,9 @@ namespace std
|
|||
{
|
||||
void* __thread_proxy(void* __p)
|
||||
{
|
||||
__thread_data_base* __t = static_cast<__thread_data_base*>(__p);
|
||||
__thread_data_ptr __local_thread_data;
|
||||
thread::__thread_data_base* __t =
|
||||
static_cast<thread::__thread_data_base*>(__p);
|
||||
thread::__thread_data_ptr __local_thread_data;
|
||||
__local_thread_data.swap(__t->_M_this_ptr);
|
||||
|
||||
__try
|
||||
|
|
Loading…
Reference in New Issue