Changeset 2c11c1 for src/Patterns/Observer
- Timestamp:
- Dec 13, 2011, 10:45:00 AM (14 years ago)
- Children:
- d85532
- Parents:
- 40f2e6
- git-author:
- Frederik Heber <heber@…> (12/02/11 13:05:49)
- git-committer:
- Frederik Heber <heber@…> (12/13/11 10:45:00)
- Location:
- src/Patterns/Observer
- Files:
-
- 6 edited
-
Observable.cpp (modified) (9 diffs)
-
Observer.cpp (modified) (2 diffs)
-
ObserverLog.cpp (modified) (2 diffs)
-
ObserverLog.hpp (modified) (3 diffs)
-
Relay.cpp (modified) (3 diffs)
-
unittests/ObserverUnitTest.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Patterns/Observer/Observable.cpp
r40f2e6 r2c11c1 77 77 // by the STL and initialized to 0 (see STL documentation) 78 78 #ifdef LOG_OBSERVER 79 observerLog().addMessage(depth[publisher]) << ">> Locking " << observerLog().getName(publisher) << std::endl;79 observerLog().addMessage(depth[publisher]) << ">> Locking " << observerLog().getName(publisher); 80 80 #endif 81 81 depth[publisher]++; … … 98 98 --depth[publisher]; 99 99 #ifdef LOG_OBSERVER 100 observerLog().addMessage(depth[publisher]) << "<< Unlocking " << observerLog().getName(publisher) << std::endl;100 observerLog().addMessage(depth[publisher]) << "<< Unlocking " << observerLog().getName(publisher); 101 101 #endif 102 102 if(depth[publisher]){} … … 165 165 observerLog().addMessage() << "-> Sending update from " << observerLog().getName(this) 166 166 << " to " << observerLog().getName((*iter).second) 167 << " (priority=" << (*iter).first << ")" << std::endl;167 << " (priority=" << (*iter).first << ")"; 168 168 #endif 169 169 (*iter).second->update(this); … … 211 211 #ifdef LOG_OBSERVER 212 212 observerLog().addMessage() << "-* Update from " << observerLog().getName(publisher) 213 << " propagated by " << observerLog().getName(this) << std::endl;213 << " propagated by " << observerLog().getName(this); 214 214 #endif 215 215 notifyAll(); … … 218 218 #ifdef LOG_OBSERVER 219 219 observerLog().addMessage() << "-| Update from " << observerLog().getName(publisher) 220 << " not propagated by " << observerLog().getName(this) << std::endl;220 << " not propagated by " << observerLog().getName(this); 221 221 #endif 222 222 } … … 232 232 { 233 233 #ifdef LOG_OBSERVER 234 observerLog().addMessage() << "@@ Signing on " << observerLog().getName(target) << " to " << observerLog().getName(const_cast<Observable *>(this)) << std::endl;234 observerLog().addMessage() << "@@ Signing on " << observerLog().getName(target) << " to " << observerLog().getName(const_cast<Observable *>(this)); 235 235 #endif 236 236 bool res = false; … … 254 254 "SignOff called for an Observable without Observers."); 255 255 #ifdef LOG_OBSERVER 256 observerLog().addMessage() << "** Signing off " << observerLog().getName(target) << " from " << observerLog().getName(const_cast<Observable *>(this)) << std::endl;256 observerLog().addMessage() << "** Signing off " << observerLog().getName(target) << " from " << observerLog().getName(const_cast<Observable *>(this)); 257 257 #endif 258 258 callees_t &callees = callTable[const_cast<Observable *>(this)]; … … 315 315 #ifdef LOG_OBSERVER 316 316 observerLog().addName(this,name); 317 observerLog().addMessage() << "++ Creating Observable " << observerLog().getName(this) << std::endl;317 observerLog().addMessage() << "++ Creating Observable " << observerLog().getName(this); 318 318 #endif 319 319 } … … 325 325 { 326 326 #ifdef LOG_OBSERVER 327 observerLog().addMessage() << "-- Destroying Observable " << observerLog().getName(this) << std::endl;327 observerLog().addMessage() << "-- Destroying Observable " << observerLog().getName(this); 328 328 #endif 329 329 if(callTable.count(this)) { -
src/Patterns/Observer/Observer.cpp
r40f2e6 r2c11c1 29 29 #endif 30 30 31 using namespace std;32 33 31 34 32 /** Constructor for class Observer. 35 33 */ 36 Observer::Observer(st ring name)34 Observer::Observer(std::string name) 37 35 { 38 36 #ifdef LOG_OBSERVER 39 37 observerLog().addName(this,name); 40 observerLog().addMessage() << "++ Creating Observer " << observerLog().getName(this) << endl;38 observerLog().addMessage() << "++ Creating Observer " << observerLog().getName(this); 41 39 #endif 42 40 } … … 59 57 #ifdef LOG_OBSERVER 60 58 if(!observerLog().isObservable(this)){ 61 observerLog().addMessage() << "-- Destroying Observer " << observerLog().getName(this) << endl;59 observerLog().addMessage() << "-- Destroying Observer " << observerLog().getName(this); 62 60 } 63 61 #endif -
src/Patterns/Observer/ObserverLog.cpp
r40f2e6 r2c11c1 20 20 #include "MemDebug.hpp" 21 21 22 #include <fstream> 23 #include <iostream> 24 #include <sstream> 25 22 26 #include "ObserverLog.hpp" 27 #include "Singleton_impl.hpp" 23 28 29 std::ostream* ObserverLog::nullstream = NULL; 30 std::ostream* ObserverLog::outstream = NULL; 24 31 25 ObserverLog::ObserverLog() : 26 count (0) 32 ObserverLog::ObserverLog() 33 { 34 nullstream = new std::ofstream("/dev/null"); 35 outstream = nullstream; 36 } 37 38 ObserverLog::~ObserverLog() 39 { 40 outstream = NULL; 41 delete nullstream; 42 } 43 44 /** Constructor of class Log. 45 * 46 * Log is just a tiny helper to bring the log message to screen and to the 47 * ObserverLog's log. 48 * 49 * @param _callback_ref 50 */ 51 ObserverLog::Log::Log(ObserverLog *_callback_ref) : 52 callback_ref(_callback_ref) 27 53 {} 28 54 29 ObserverLog::~ObserverLog(){} 55 /** Destructor of class Log. 56 * 57 * Prints to both ObserverLog::log and to ObserverLog::outstream. 58 * 59 */ 60 ObserverLog::Log::~Log() 61 { 62 callback_ref->log << log.str() << std::endl; 63 *callback_ref->outstream << log.str() << std::endl; 30 64 31 std::string ObserverLog::getLog(){return log.str();} 65 callback_ref = NULL; 66 } 67 68 void ObserverLog::disableLogging() 69 { 70 outstream = nullstream; 71 } 72 73 void ObserverLog::enableLogging() 74 { 75 outstream = &std::cout; 76 } 77 78 std::string ObserverLog::getLog() { return log.str(); } 32 79 33 80 std::string ObserverLog::getName(void* obj){ … … 57 104 } 58 105 59 std::stringstream &ObserverLog::addMessage(int depth){ 106 /** Obtain Log reference to place another message (line) in log. 107 * 108 * \warning Don't append std::endl to the message, won't work and is done 109 * automatically. 110 * 111 * @param depth depth (indenting) of the message 112 * @return ref to Log class which can be ostreamed to 113 */ 114 boost::shared_ptr<ObserverLog::Log> ObserverLog::addMessage(int depth){ 115 boost::shared_ptr<ObserverLog::Log> L(new Log(this)); 60 116 for(int i=depth;i--;) 61 log << " ";62 return log;117 L->log << " "; 118 return L; 63 119 } 64 120 65 // The log needs to exist fairly early, so we make it construct on first use, 66 // and never destroy it 67 ObserverLog &observerLog(){ 68 // yes, this memory is never freed... we need it around for the whole programm, 69 // so no freeing is possible 70 static ObserverLog *theLog = Memory::ignore(new ObserverLog()); 71 return *theLog; 121 ObserverLog &observerLog() 122 { 123 return ObserverLog::getInstance(); 72 124 } 73 125 126 CONSTRUCT_SINGLETON(ObserverLog) -
src/Patterns/Observer/ObserverLog.hpp
r40f2e6 r2c11c1 14 14 #endif 15 15 16 #include <boost/shared_ptr.hpp> 16 17 #include <map> 17 18 #include <set> 19 #include <iosfwd> 20 #include <string> 18 21 #include <sstream> 19 #include <string>20 22 21 23 #include "Observable.hpp" 22 24 #include "Observer.hpp" 23 25 #include "Singleton.hpp" 24 26 25 27 /** … … 28 30 * TODO: make this conditional dependent on compiler Flag. 29 31 */ 30 class ObserverLog {32 class ObserverLog : public Singleton<ObserverLog> { 31 33 friend class Observable; 32 34 friend class Observer; 35 friend class Relay; 33 36 template <typename> friend class Cacheable; 37 friend class Singleton<ObserverLog>; 34 38 public: 35 ObserverLog();36 ~ObserverLog();37 39 std::string getLog(); // get everything that has been logged 38 40 std::string getName(void*); // get the name of an actor 39 41 bool isObservable(void*); 42 void disableLogging(); 43 void enableLogging(); 44 45 /** tiny helper class to allow for both capturing and printing of messages. 46 * 47 */ 48 class Log { 49 public: 50 Log(ObserverLog *_callback_ref); 51 ~Log(); 52 53 std::stringstream log; // the internal stream that later gets appended 54 ObserverLog *callback_ref; // internal stringstream to capture messages 55 }; 56 40 57 private: 58 ObserverLog(); 59 ~ObserverLog(); 41 60 int count; // number to reference each actor in this framework 42 61 std::map<void*,std::string> names; // List of names assigned to actors … … 46 65 void deleteName(void*); // delete the name of an Actor 47 66 void deleteObservable(void*); 48 std::stringstream &addMessage(int depth=0); // Add a Message to the logging 49 std::stringstream log; // The internal log object 67 boost::shared_ptr<ObserverLog::Log> addMessage(int depth=0); // Add a Message to the logging 68 std::stringstream log; 69 static std::ostream *nullstream; // stream that is not displayed 70 static std::ostream *outstream; // stream that is currently used 50 71 }; 51 72 52 73 ObserverLog &observerLog(); 53 74 54 75 template <class T> 76 boost::shared_ptr<ObserverLog::Log> operator<<(boost::shared_ptr<ObserverLog::Log> L, const T msg) 77 { 78 L->log << msg; 79 return L; 80 } 55 81 56 82 #endif /* OBSERVERLOG_HPP_ */ -
src/Patterns/Observer/Relay.cpp
r40f2e6 r2c11c1 30 30 #ifdef LOG_OBSERVER 31 31 observerLog().addName(this,name); 32 observerLog().addMessage() << "++ Creating Relay " << observerLog().getName(this) << endl;32 observerLog().addMessage() << "++ Creating Relay " << observerLog().getName(this); 33 33 #endif 34 34 } … … 40 40 { 41 41 #ifdef LOG_OBSERVER 42 observerLog().addMessage() << "-- Destroying Relay " << observerLog().getName(this) << endl;42 observerLog().addMessage() << "-- Destroying Relay " << observerLog().getName(this); 43 43 #endif 44 44 if(callTable.count(this)) { … … 76 76 << " is relaying update from " << observerLog().getName(Updater) 77 77 << " to " << observerLog().getName((*iter).second) 78 << " (priority=" << (*iter).first << ")" << endl;78 << " (priority=" << (*iter).first << ")"; 79 79 #endif 80 80 (*iter).second->update(Updater); -
src/Patterns/Observer/unittests/ObserverUnitTest.cpp
r40f2e6 r2c11c1 31 31 #include "Observer/ObservedContainer.hpp" 32 32 #include "Observer/ObservedContainer_impl.hpp" 33 #include "Observer/ObserverLog.hpp" 33 34 34 35 #include "ObserverUnitTest.hpp" … … 48 49 void ObserverTest::setUp() { 49 50 ASSERT_DO(Assert::Throw); 51 50 52 simpleObservable1 = new SimpleObservable(); 51 53 simpleObservable2 = new SimpleObservable(); … … 84 86 delete notificationObserver1; 85 87 delete notificationObserver2; 88 #ifdef LOG_OBSERVER 89 ObserverLog::purgeInstance(); 90 #endif 86 91 } 87 92
Note:
See TracChangeset
for help on using the changeset viewer.
