gravatar
deba@inf.elte.hu
deba@inf.elte.hu
Fix ImmediateDetach in AlterationObserver (ticket #130)
0 1 0
default
1 file changed with 3 insertions and 3 deletions:
↑ Collapse diff ↑
Show white space 12 line context
... ...
@@ -406,15 +406,15 @@
406 406
      typename Observers::iterator it = _observers.begin();
407 407
      while (it != _observers.end()) {
408 408
        try {
409 409
          (*it)->erase(item);
410 410
          ++it;
411 411
        } catch (const ImmediateDetach&) {
412
          it = _observers.erase(it);
413 412
          (*it)->_index = _observers.end();
414 413
          (*it)->_notifier = 0;
414
          it = _observers.erase(it);
415 415
        }
416 416
      }
417 417
    }
418 418

	
419 419
    /// \brief Notifies all the registed observers about more item erased
420 420
    /// from the container.
... ...
@@ -426,15 +426,15 @@
426 426
      typename Observers::iterator it = _observers.begin();
427 427
      while (it != _observers.end()) {
428 428
        try {
429 429
          (*it)->erase(items);
430 430
          ++it;
431 431
        } catch (const ImmediateDetach&) {
432
          it = _observers.erase(it);
433 432
          (*it)->_index = _observers.end();
434 433
          (*it)->_notifier = 0;
434
          it = _observers.erase(it);
435 435
        }
436 436
      }
437 437
    }
438 438

	
439 439
    /// \brief Notifies all the registed observers about the container is
440 440
    /// built.
... ...
@@ -465,15 +465,15 @@
465 465
      typename Observers::iterator it = _observers.begin();
466 466
      while (it != _observers.end()) {
467 467
        try {
468 468
          (*it)->clear();
469 469
          ++it;
470 470
        } catch (const ImmediateDetach&) {
471
          it = _observers.erase(it);
472 471
          (*it)->_index = _observers.end();
473 472
          (*it)->_notifier = 0;
473
          it = _observers.erase(it);
474 474
        }
475 475
      }
476 476
    }
477 477
  };
478 478

	
479 479
}
0 comments (0 inline)