Wiselib
wiselib.testing/algorithms/synchronization/synchronization_base.h
Go to the documentation of this file.
00001 /***************************************************************************
00002  ** This file is part of the generic algorithm library Wiselib.           **
00003  ** Copyright (C) 2008,2009 by the Wisebed (www.wisebed.eu) project.      **
00004  **                                                                       **
00005  ** The Wiselib is free software: you can redistribute it and/or modify   **
00006  ** it under the terms of the GNU Lesser General Public License as        **
00007  ** published by the Free Software Foundation, either version 3 of the    **
00008  ** License, or (at your option) any later version.                       **
00009  **                                                                       **
00010  ** The Wiselib is distributed in the hope that it will be useful,        **
00011  ** but WITHOUT ANY WARRANTY; without even the implied warranty of        **
00012  ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         **
00013  ** GNU Lesser General Public License for more details.                   **
00014  **                                                                       **
00015  ** You should have received a copy of the GNU Lesser General Public      **
00016  ** License along with the Wiselib.                                       **
00017  ** If not, see <http://www.gnu.org/licenses/>.                           **
00018  ** Author: Juan Farré, jafarre@lsi.upc.edu                                 **
00019  ***************************************************************************/
00020 #ifndef __ALGORITHMS_SYNCHRONIZATION_BASE_H__
00021 #define __ALGORITHMS_SYNCHRONIZATION_BASE_H__
00022 
00023 #include "external_interface/external_interface.h"
00024 
00025 namespace wiselib
00026 {
00027 
00028    template<typename OsModel_P>
00029    class SynchronizationBase
00030    {
00031    public:
00032 
00033       typedef OsModel_P OsModel;
00034 
00035       typedef delegate0<void> synchronization_delegate_t;
00036       // --------------------------------------------------------------------
00037       enum
00038       {
00039          READY = 0,
00040          NO_VALUE = 1,
00041          INACTIVE = 2
00042       };
00043       // --------------------------------------------------------------------      
00044       SynchronizationBase();
00045       // --------------------------------------------------------------------
00046       template<class T, void (T::*TMethod)()>
00047       void reg_listener_callback( T *obj_pnt )
00048       {
00049          callback_ = synchronization_delegate_t::from_method<T, TMethod>( obj_pnt );
00050       }
00051       // --------------------------------------------------------------------
00052       template<void (*TMethod)()>
00053       void reg_listener_callback()
00054       {
00055          callback_ = synchronization_delegate_t::from_function<TMethod>();
00056       }
00057       // --------------------------------------------------------------------
00058       void unreg_listener_callback( void )
00059       {
00060          callback_ = synchronization_delegate_t();
00061       }
00062       // --------------------------------------------------------------------
00063       void notify_listeners()
00064       {
00065          if (callback_)
00066             callback_();
00067       }
00068 
00069    private:
00070 
00071       synchronization_delegate_t callback_;
00072 
00073    };
00074    // -----------------------------------------------------------------------
00075    // -----------------------------------------------------------------------
00076    // -----------------------------------------------------------------------
00077    template<typename OsModel_P>
00078    inline SynchronizationBase<OsModel_P>::
00079    SynchronizationBase()
00080       : callback_ ( synchronization_delegate_t() )
00081    {}
00082 
00083 }
00084 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines