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:
Chris Fairles 2009-02-05 17:47:56 +00:00
parent ee04b57491
commit 8644ecf59d
4 changed files with 43 additions and 37 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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)

View File

@ -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