comparison Core/Logging.cpp @ 4003:3c19371090c3

removing useless LoggingMemento
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sat, 06 Jun 2020 11:08:59 +0200
parents 02e61695cd83
children 9b5ace33a00d
comparison
equal deleted inserted replaced
4002:02e61695cd83 4003:3c19371090c3
457 warning_(&std::cerr), 457 warning_(&std::cerr),
458 info_(&std::cerr) 458 info_(&std::cerr)
459 { 459 {
460 } 460 }
461 }; 461 };
462
463 struct LoggingMementoImpl
464 {
465 bool valid_;
466 bool infoEnabled_;
467 bool traceEnabled_;
468 std::string targetFile_;
469 std::string targetFolder_;
470
471 std::ostream* error_;
472 std::ostream* warning_;
473 std::ostream* info_;
474 };
475 } 462 }
476 463
477 464
478 465
479 static std::unique_ptr<LoggingContext> loggingContext_; 466 static std::unique_ptr<LoggingContext> loggingContext_;
591 { 578 {
592 SetTargetFile(old->targetFile_); 579 SetTargetFile(old->targetFile_);
593 } 580 }
594 } 581 }
595 582
596
597 LoggingMemento CreateLoggingMemento()
598 {
599 LoggingMementoImpl* memento = new LoggingMementoImpl();
600
601 memento->valid_ = true;
602 {
603 boost::mutex::scoped_lock lock(loggingMutex_);
604 memento->infoEnabled_ = loggingContext_->infoEnabled_;
605 memento->traceEnabled_ = loggingContext_->traceEnabled_;
606 memento->targetFile_ = loggingContext_->targetFile_;
607 memento->targetFolder_ = loggingContext_->targetFolder_;
608
609 memento->error_ = loggingContext_->error_;
610 memento->warning_ = loggingContext_->warning_;
611 memento->info_ = loggingContext_->info_;
612 }
613 return reinterpret_cast<void*>(memento);
614 }
615
616 void RestoreLoggingMemento(LoggingMemento mementoPtr)
617 {
618 LoggingMementoImpl* memento =
619 reinterpret_cast<LoggingMementoImpl*>(mementoPtr);
620 if (!memento->valid_)
621 throw std::runtime_error("Memento already used");
622 memento->valid_ = false;
623 std::unique_ptr<LoggingMementoImpl> deleter(memento);
624 {
625 boost::mutex::scoped_lock lock(loggingMutex_);
626 loggingContext_.reset(new LoggingContext);
627 loggingContext_->error_ = memento->error_;
628 loggingContext_->warning_ = memento->warning_;
629 loggingContext_->info_ = memento->info_;
630 }
631 EnableInfoLevel(memento->infoEnabled_);
632 EnableTraceLevel(memento->traceEnabled_);
633 if (!memento->targetFolder_.empty())
634 {
635 SetTargetFolder(memento->targetFolder_);
636 }
637 else if (!memento->targetFile_.empty())
638 {
639 SetTargetFile(memento->targetFile_);
640 }
641 }
642
643 void DiscardLoggingMemento(LoggingMemento mementoPtr)
644 {
645 LoggingMementoImpl* memento =
646 reinterpret_cast<LoggingMementoImpl*>(mementoPtr);
647 delete memento;
648 }
649 583
650 void EnableInfoLevel(bool enabled) 584 void EnableInfoLevel(bool enabled)
651 { 585 {
652 boost::mutex::scoped_lock lock(loggingMutex_); 586 boost::mutex::scoped_lock lock(loggingMutex_);
653 assert(loggingContext_.get() != NULL); 587 assert(loggingContext_.get() != NULL);