Changeset 2384:805c5a2a36dd in lemon-0.x for lemon/bits/alteration_notifier.h
- Timestamp:
- 03/01/07 18:14:24 (17 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@3215
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/bits/alteration_notifier.h
r2305 r2384 144 144 /// Default constructor for ObserverBase. 145 145 /// 146 ObserverBase() : notifier(0) {}146 ObserverBase() : _notifier(0) {} 147 147 148 148 /// \brief Constructor which attach the observer into notifier. 149 149 /// 150 150 /// Constructor which attach the observer into notifier. 151 ObserverBase(AlterationNotifier& _notifier) {152 attach( _notifier);151 ObserverBase(AlterationNotifier& notifier) { 152 attach(notifier); 153 153 } 154 154 … … 159 159 ObserverBase(const ObserverBase& copy) { 160 160 if (copy.attached()) { 161 attach(*copy. getNotifier());161 attach(*copy._notifier()); 162 162 } 163 163 } … … 174 174 /// This member attaches the observer into an AlterationNotifier. 175 175 /// 176 void attach(AlterationNotifier& _notifier) {177 _notifier.attach(*this);176 void attach(AlterationNotifier& notifier) { 177 notifier.attach(*this); 178 178 } 179 179 … … 183 183 /// 184 184 void detach() { 185 notifier->detach(*this);185 _notifier->detach(*this); 186 186 } 187 187 … … 192 192 /// attached into. 193 193 /// 194 Notifier* getNotifier() const { return const_cast<Notifier*>(notifier); }194 Notifier* notifier() const { return const_cast<Notifier*>(_notifier); } 195 195 196 196 /// Gives back true when the observer is attached into a notifier. 197 bool attached() const { return notifier != 0; }197 bool attached() const { return _notifier != 0; } 198 198 199 199 private: … … 203 203 protected: 204 204 205 Notifier* notifier;206 typename std::list<ObserverBase*>::iterator index;205 Notifier* _notifier; 206 typename std::list<ObserverBase*>::iterator _index; 207 207 208 208 /// \brief The member function to notificate the observer about an … … 262 262 263 263 typedef std::list<ObserverBase*> Observers; 264 Observers observers;264 Observers _observers; 265 265 266 266 … … 294 294 ~AlterationNotifier() { 295 295 typename Observers::iterator it; 296 for (it = observers.begin(); it !=observers.end(); ++it) {297 (*it)-> notifier = 0;296 for (it = _observers.begin(); it != _observers.end(); ++it) { 297 (*it)->_notifier = 0; 298 298 } 299 299 } … … 347 347 348 348 void attach(ObserverBase& observer) { 349 observer. index = observers.insert(observers.begin(), &observer);350 observer. notifier = this;349 observer._index = _observers.insert(_observers.begin(), &observer); 350 observer._notifier = this; 351 351 } 352 352 353 353 void detach(ObserverBase& observer) { 354 observers.erase(observer.index);355 observer. index =observers.end();356 observer. notifier = 0;354 _observers.erase(observer._index); 355 observer._index = _observers.end(); 356 observer._notifier = 0; 357 357 } 358 358 … … 368 368 typename Observers::reverse_iterator it; 369 369 try { 370 for (it = observers.rbegin(); it !=observers.rend(); ++it) {370 for (it = _observers.rbegin(); it != _observers.rend(); ++it) { 371 371 (*it)->add(item); 372 372 } 373 373 } catch (...) { 374 374 typename Observers::iterator jt; 375 for (jt = it.base(); jt != observers.end(); ++jt) {375 for (jt = it.base(); jt != _observers.end(); ++jt) { 376 376 (*jt)->erase(item); 377 377 } … … 389 389 typename Observers::reverse_iterator it; 390 390 try { 391 for (it = observers.rbegin(); it !=observers.rend(); ++it) {391 for (it = _observers.rbegin(); it != _observers.rend(); ++it) { 392 392 (*it)->add(items); 393 393 } 394 394 } catch (...) { 395 395 typename Observers::iterator jt; 396 for (jt = it.base(); jt != observers.end(); ++jt) {396 for (jt = it.base(); jt != _observers.end(); ++jt) { 397 397 (*jt)->erase(items); 398 398 } … … 408 408 /// 409 409 void erase(const Item& item) throw() { 410 typename Observers::iterator it = observers.begin();411 while (it != observers.end()) {410 typename Observers::iterator it = _observers.begin(); 411 while (it != _observers.end()) { 412 412 try { 413 413 (*it)->erase(item); 414 414 ++it; 415 415 } catch (const ImmediateDetach&) { 416 it = observers.erase(it);417 (*it)-> index =observers.end();418 (*it)-> notifier = 0;416 it = _observers.erase(it); 417 (*it)->_index = _observers.end(); 418 (*it)->_notifier = 0; 419 419 } 420 420 } … … 428 428 /// 429 429 void erase(const std::vector<Item>& items) { 430 typename Observers::iterator it = observers.begin();431 while (it != observers.end()) {430 typename Observers::iterator it = _observers.begin(); 431 while (it != _observers.end()) { 432 432 try { 433 433 (*it)->erase(items); 434 434 ++it; 435 435 } catch (const ImmediateDetach&) { 436 it = observers.erase(it);437 (*it)-> index =observers.end();438 (*it)-> notifier = 0;436 it = _observers.erase(it); 437 (*it)->_index = _observers.end(); 438 (*it)->_notifier = 0; 439 439 } 440 440 } … … 449 449 typename Observers::reverse_iterator it; 450 450 try { 451 for (it = observers.rbegin(); it !=observers.rend(); ++it) {451 for (it = _observers.rbegin(); it != _observers.rend(); ++it) { 452 452 (*it)->build(); 453 453 } 454 454 } catch (...) { 455 455 typename Observers::iterator jt; 456 for (jt = it.base(); jt != observers.end(); ++jt) {456 for (jt = it.base(); jt != _observers.end(); ++jt) { 457 457 (*jt)->clear(); 458 458 } … … 467 467 /// from the container. 468 468 void clear() { 469 typename Observers::iterator it = observers.begin();470 while (it != observers.end()) {469 typename Observers::iterator it = _observers.begin(); 470 while (it != _observers.end()) { 471 471 try { 472 472 (*it)->clear(); 473 473 ++it; 474 474 } catch (const ImmediateDetach&) { 475 it = observers.erase(it);476 (*it)-> index =observers.end();477 (*it)-> notifier = 0;475 it = _observers.erase(it); 476 (*it)->_index = _observers.end(); 477 (*it)->_notifier = 0; 478 478 } 479 479 }
Note: See TracChangeset
for help on using the changeset viewer.