HyperspaceExplorer 0.7.1
|
00001 /* 00002 Hyperspace Explorer - vizualizing higher-dimensional geometry 00003 Copyright (C) 2010 Lene Preuss <lene.preuss@gmail.com> 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 2 of the License, or 00008 (at your option) any later version. 00009 00010 This program 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 General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License along 00016 with this program; if not, write to the Free Software Foundation, Inc., 00017 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 00018 00019 */ 00020 00021 #ifndef OBSERVER_H 00022 #define OBSERVER_H 00023 00024 #include <memory> 00025 00026 template <class Parent> class Observer; 00027 00029 00053 template <class Parent> 00054 class Subject: public Parent { 00055 00056 public: 00057 00058 Subject(); 00059 virtual ~Subject(); 00060 00061 virtual void attach(std::shared_ptr< Observer<Parent> > observer); 00062 virtual void detach(std::shared_ptr< Observer<Parent> > observer); 00063 00064 protected: 00065 00066 virtual void notify(); 00067 00068 private: 00069 00070 class Impl; 00071 std::shared_ptr<Impl> pImpl_; 00072 }; 00073 00075 00096 template <class Parent> 00097 class Observer { 00098 00099 public: 00100 00101 virtual ~Observer(); 00102 00103 virtual void update(std::shared_ptr< const Subject<Parent> > changedSubject) = 0; 00104 00105 }; 00106 00107 #endif // OBSERVER_H