tunnel_context_base.h

Go to the documentation of this file.
00001 #ifndef _SIGX_TUNNEL_CONTEXT_BASE_HPP_
00002 #define _SIGX_TUNNEL_CONTEXT_BASE_HPP_
00003 
00004 /*
00005  * Copyright 2008 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>
00024 #include <sigx/fwddecl.h>
00025 #include <sigx/bad_dispatcher.h>
00026 #include <sigx/operator_new.h>
00027 #include <sigx/shared_dispatchable.h>
00028 #include <sigx/tunnel_validity_tracker.h>
00029 
00030 
00031 namespace sigx
00032 {
00033 
00042 class SIGX_API tunnel_context_base: public operator_new
00043 {
00044 public:
00045     tunnel_context_base(const shared_dispatchable& _A_disp, const tunnel_validity_tracker& _A_validity_tracker, bool sync = false);
00046     virtual ~tunnel_context_base();
00047 
00050     virtual void invoke() = 0;
00051         
00052     bool is_sync() const    {   return m_sync;  }
00053     bool is_valid() const   {   return m_validity_tracker.is_valid();   }
00054     const void* creator_thread() const  {   return m_creator_thread;    }
00055         
00056 protected:
00060     void dispatch_me();
00061     
00062 protected:
00063     tunnel_validity_tracker m_validity_tracker;
00064     shared_dispatchable m_disp;
00065     bool m_sync;
00066     const void* const m_creator_thread;
00067 };
00068 
00069 
00073 class SIGX_API sync_tunnel_context_base: public tunnel_context_base
00074 {
00075 public:
00076     sync_tunnel_context_base(const shared_dispatchable& _A_disp, const tunnel_validity_tracker& _A_validity_tracker);
00077 
00078 
00079 protected:
00088     void dispatch_me();
00089 
00090 
00091 protected:
00092     Glib::Cond m_cond;
00093     Glib::Mutex m_mutex;
00094 };
00095 
00096 
00097 } // namespace sigx
00098 
00099 
00100 #endif // end file guard

Generated on Wed Jan 28 21:37:59 2009 for sigx++ by  doxygen 1.5.8