Changeset cd5047 for src/Patterns/Observer.cpp
- Timestamp:
- Jun 9, 2010, 2:30:10 PM (16 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, Candidate_v1.7.0, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- 112b09
- Parents:
- 2c8934
- File:
-
- 1 edited
-
src/Patterns/Observer.cpp (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Patterns/Observer.cpp
r2c8934 rcd5047 12 12 13 13 #include "Helpers/Assert.hpp" 14 #include "Helpers/MemDebug.hpp" 14 15 15 16 using namespace std; … … 43 44 // if no entry for this observable is found, an new one is created 44 45 // by the STL and initialized to 0 (see STL documentation) 46 #ifdef LOG_OBSERVER 47 observerLog().addMessage(depth[publisher]) << ">> Locking " << observerLog().getName(publisher) << endl; 48 #endif 45 49 depth[publisher]++; 46 50 } … … 60 64 // if zero is reached all observed blocks are done and we can 61 65 // start to notify our observers 62 if(--(depth[publisher])){} 66 --depth[publisher]; 67 #ifdef LOG_OBSERVER 68 observerLog().addMessage(depth[publisher]) << "<< Unlocking " << observerLog().getName(publisher) << endl; 69 #endif 70 if(depth[publisher]){} 63 71 else{ 64 72 publisher->notifyAll(); … … 123 131 callees_t::iterator iter; 124 132 for(iter=callees.begin();iter!=callees.end();++iter){ 133 #ifdef LOG_OBSERVER 134 observerLog().addMessage() << "-> Sending update from " << observerLog().getName(this) 135 << " to " << observerLog().getName((*iter).second) 136 << " (priority=" << (*iter).first << ")"<< endl; 137 #endif 125 138 (*iter).second->update(this); 126 139 } … … 165 178 // we do not need to publish all the changes at each time we are called 166 179 if(depth.find(this)==depth.end()) { 180 #ifdef LOG_OBSERVER 181 observerLog().addMessage() << "-* Update from " << observerLog().getName(publisher) 182 << " propagated by " << observerLog().getName(this) << endl; 183 #endif 167 184 notifyAll(); 185 } 186 else{ 187 #ifdef LOG_OBSERVER 188 observerLog().addMessage() << "-| Update from " << observerLog().getName(publisher) 189 << " not propagated by " << observerLog().getName(this) << endl; 190 #endif 168 191 } 169 192 } … … 177 200 void Observable::signOn(Observer *target,int priority) { 178 201 ASSERT(priority>=-20 && priority<=+20, "Priority out of range [-20:+20] when signing on Observer"); 202 #ifdef LOG_OBSERVER 203 observerLog().addMessage() << "@@ Signing on " << observerLog().getName(target) << " to " << observerLog().getName(this) << endl; 204 #endif 179 205 bool res = false; 180 206 callees_t &callees = callTable[this]; … … 194 220 void Observable::signOff(Observer *target) { 195 221 ASSERT(callTable.count(this),"SignOff called for an Observable without Observers."); 222 #ifdef LOG_OBSERVER 223 observerLog().addMessage() << "** Signing off " << observerLog().getName(target) << " from " << observerLog().getName(this) << endl; 224 #endif 196 225 callees_t &callees = callTable[this]; 197 226 … … 238 267 /** Constructor for class Observable. 239 268 */ 240 Observable::Observable() 241 {} 269 Observable::Observable(string name) : 270 Observer(Observer::BaseConstructor()) 271 { 272 #ifdef LOG_OBSERVER 273 observerLog().addName(this,name); 274 observerLog().addMessage() << "++ Creating Observable " << observerLog().getName(this) << endl; 275 #endif 276 } 242 277 243 278 /** Destructor for class Observable. … … 246 281 Observable::~Observable() 247 282 { 283 #ifdef LOG_OBSERVER 284 observerLog().addMessage() << "-- Destroying Observable " << observerLog().getName(this) << endl; 285 #endif 248 286 if(callTable.count(this)) { 249 287 // delete all entries for this observable … … 259 297 /** Constructor for class Observer. 260 298 */ 261 Observer::Observer() 262 {} 299 Observer::Observer(string name) 300 { 301 #ifdef LOG_OBSERVER 302 observerLog().addName(this,name); 303 observerLog().addMessage() << "++ Creating Observer " << observerLog().getName(this) << endl; 304 #endif 305 } 306 307 /** 308 * Base Constructor for class Observer 309 * 310 * only called from Observable Constructor 311 */ 312 Observer::Observer(Observer::BaseConstructor){ 313 #ifdef LOG_OBSERVER 314 observerLog().addObservable(this); 315 #endif 316 } 263 317 264 318 /** Destructor for class Observer. 265 319 */ 266 320 Observer::~Observer() 267 {} 321 { 322 #ifdef LOG_OBSERVER 323 if(!observerLog().isObservable(this)){ 324 observerLog().addMessage() << "-- Destroying Observer " << observerLog().getName(this) << endl; 325 } 326 #endif 327 } 268 328 269 329 /** … … 296 356 } 297 357 } 358 359 #ifdef LOG_OBSERVER 360 361 /************************* Methods to do logging of the Observer Mechanism *********/ 362 363 // The log needs to exist fairly early, so we make it construct on first use, 364 // and never destroy it 365 ObserverLog &observerLog(){ 366 // yes, this memory is never freed... we need it around for the whole programm, 367 // so no freeing is possible 368 static ObserverLog *theLog = Memory::ignore(new ObserverLog()); 369 return *theLog; 370 } 371 372 373 ObserverLog::ObserverLog() : 374 count (0) 375 {} 376 377 ObserverLog::~ObserverLog(){} 378 379 string ObserverLog::getLog(){return log.str();} 380 381 std::string ObserverLog::getName(void* obj){ 382 return names[obj]; 383 } 384 385 bool ObserverLog::isObservable(void* obj){ 386 return observables.count(obj); 387 } 388 389 void ObserverLog::addName(void* obj , string name){ 390 stringstream sstr; 391 sstr << name << "_" << count++; 392 names[obj] = sstr.str(); 393 } 394 395 void ObserverLog::addObservable(void* obj){ 396 observables.insert(obj); 397 } 398 399 void ObserverLog::deleteName(void* obj){ 400 names.erase(obj); 401 } 402 403 void ObserverLog::deleteObservable(void* obj){ 404 observables.erase(obj); 405 } 406 407 stringstream &ObserverLog::addMessage(int depth){ 408 for(int i=depth;i--;) 409 log << " "; 410 return log; 411 } 412 413 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
