Wiselib
wiselib.testing/algorithms/topology/topology_control_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_TOPOLOGY_CONTROL_BASE_H__
00021 #define __ALGORITHMS_TOPOLOGY_CONTROL_BASE_H__
00022 
00023 #include "external_interface/external_interface.h"
00024 
00025 namespace wiselib
00026 {
00027 
00034    template<typename OsModel_P>
00035    class TopologyBase
00036    {
00037    public:
00038       typedef OsModel_P OsModel;
00039 
00040       typedef delegate0<void> topology_delegate_t;
00041 
00042       TopologyBase();
00043       // --------------------------------------------------------------------
00044       template<class T, void (T::*TMethod)()>
00045       void reg_listener_callback( T *obj_pnt )
00046       {
00047          callback_ = topology_delegate_t::from_method<T, TMethod>( obj_pnt );
00048       }
00049       // --------------------------------------------------------------------
00050       template<void (*TMethod)()>
00051       void reg_listener_callback()
00052       {
00053          callback_ = topology_delegate_t::from_function<TMethod>();
00054       }
00055       // --------------------------------------------------------------------
00056       void unreg_listener_callback( void )
00057       {
00058          callback_ = topology_delegate_t();
00059       }
00060       // --------------------------------------------------------------------
00061       void notify_listeners()
00062       {
00063          if (callback_)
00064             callback_();
00065       }
00066 
00067    private:
00068 
00069       topology_delegate_t callback_;
00070 
00071    };
00072    // -----------------------------------------------------------------------
00073    // -----------------------------------------------------------------------
00074    // -----------------------------------------------------------------------
00075    template<typename OsModel_P>
00076    inline TopologyBase<OsModel_P>::
00077    TopologyBase()
00078       : callback_ ( topology_delegate_t() )
00079    {}
00080 
00081 }
00082 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines