00001 #ifndef _SIGX_SIGNAL_SOURCE_THREADPRIVATE_HPP_ 00002 #define _SIGX_SIGNAL_SOURCE_THREADPRIVATE_HPP_ 00003 00004 /* 00005 * Copyright 2005 Klaus Triendl 00006 * 00007 * This library is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Library General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2 of the License, or (at your option) any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Library General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Library General Public 00018 * License along with this library; if not, write to the Free 00019 * Software Foundation, 51 Franklin Street, Fifth Floor, 00020 * Boston, MA 02110-1301, USA. 00021 */ 00022 00023 #include <glibmm/thread.h> // Glib::Private 00024 #include <sigxconfig.h> 00025 #include <sigx/signal_source_base.h> 00026 00027 00028 namespace sigx 00029 { 00030 00034 template<typename T_threadpriv, typename T_signal> 00035 struct signal_source_threadprivate: public signal_source_base 00036 { 00037 typedef signal_source_threadprivate<T_threadpriv, T_signal> self_type; 00038 typedef T_signal T_threadpriv::*typed_signal_ptr; 00039 00040 signal_source_threadprivate(Glib::Private<T_threadpriv>& _A_priv, typed_signal_ptr _A_sig): 00041 signal_source_base(reinterpret_cast<hook>(&self_type::get_signal)), 00042 m_threadpriv(_A_priv), 00043 m_sig(_A_sig) 00044 {} 00045 00046 static T_signal get_signal(signal_source_ptr base) 00047 { 00048 self_type* this_ = static_cast<self_type*>(base); 00049 const typed_signal_ptr sig = this_->m_sig; 00050 return this_->m_threadpriv.get()->*sig; 00051 } 00052 00053 Glib::Private<T_threadpriv>& m_threadpriv; 00054 typed_signal_ptr m_sig; 00055 }; 00056 00057 00058 } // namespace sigx 00059 00060 00061 #endif // _SIGX_SIGNAL_SOURCE_THREADPRIVATE_HPP_