solarpowerlog trunk
/home/tobi/workspace/solarpowerlog/src/patterns/IObserverObserver.cpp
Go to the documentation of this file.
00001 /* ----------------------------------------------------------------------------
00002    solarpowerlog
00003    Copyright (C) 2009  Tobias Frost
00004 
00005    This file is part of solarpowerlog.
00006 
00007    Solarpowerlog is free software; However, it is dual-licenced
00008    as described in the file "COPYING".
00009 
00010    For this file (IObserverObserver.cpp), the license terms are:
00011 
00012    You can redistribute it and/or modify it under the terms of the GNU
00013    General Public License as published by the Free Software Foundation; either
00014    version 3 of the License, or (at your option) any later version.
00015 
00016    This program is distributed in the hope that it will be useful, but
00017    WITHOUT ANY WARRANTY; without even the implied warranty of
00018    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019    Lesser General Public License for more details.
00020 
00021    You should have received a copy of the GNU Library General Public
00022    License along with this proramm; if not, see
00023    <http://www.gnu.org/licenses/>.
00024    ----------------------------------------------------------------------------
00025 */
00026 
00035 #ifdef HAVE_CONFIG_H
00036 #include "config.h"
00037 #endif
00038 
00039 #include <stddef.h>
00040 #include "IObserverObserver.h"
00041 #include "IObserverSubject.h"
00042 
00043 using namespace std;
00044 
00050 IObserverObserver::IObserverObserver(IObserverSubject *subject) {
00051 
00052      /* auto-subscribe */
00053      if (subject != NULL) setSubject(subject);
00054 }
00055 
00057 IObserverObserver::~IObserverObserver() {
00058 
00059      /* auto-unsubsribe */
00060      if (subject) subject->UnSubscribe(this);
00061      // TODO Auto-generated destructor stub
00062 }
00063 
00065 IObserverSubject *IObserverObserver::getSubject() const
00066  {
00067      return subject;
00068  }
00069 
00076  void IObserverObserver::setSubject(IObserverSubject *subject)
00077  {
00078       if(this->subject == subject) return;
00079       if(this->subject) subject->UnSubscribe(this);
00080      this->subject = subject;
00081      subject->Subscribe(this);
00082  }