@@ -718,14 +718,7 @@ void dbDatabase::beginEco(dbBlock* block_)
718718{
719719 _dbBlock* block = (_dbBlock*) block_;
720720 if (block->_journal ) {
721- block->_journal_history .push_back (block->_journal );
722- debugPrint (block_->getImpl ()->getLogger (),
723- utl::ODB,
724- " DB_ECO" ,
725- 2 ,
726- " ECO: Ended ECO #{} (size {}) and pushed to ECO history" ,
727- block->_journal_history .size () - 1 ,
728- block->_journal ->size ());
721+ endEco (block_);
729722 }
730723 block->_journal = new dbJournal (block_);
731724 assert (block->_journal );
@@ -734,56 +727,54 @@ void dbDatabase::beginEco(dbBlock* block_)
734727 " DB_ECO" ,
735728 2 ,
736729 " ECO: Started ECO #{}" ,
737- block->_journal_history .size ());
730+ block->_journal_stack .size ());
738731}
739732
740733void dbDatabase::endEco (dbBlock* block_)
741734{
742735 _dbBlock* block = (_dbBlock*) block_;
743736 assert (block->_journal );
744- block->_journal_history . push_back (block->_journal );
737+ block->_journal_stack . push (block->_journal );
745738 block->_journal = nullptr ;
746739 debugPrint (block_->getImpl ()->getLogger (),
747740 utl::ODB,
748741 " DB_ECO" ,
749742 2 ,
750- " ECO: Ended ECO #{} (size {}) and pushed to ECO history " ,
751- block->_journal_history .size () - 1 ,
752- block->_journal_history . back ()->size ());
743+ " ECO: Ended ECO #{} (size {}) and pushed to ECO stack " ,
744+ block->_journal_stack .size () - 1 ,
745+ block->_journal_stack . top ()->size ());
753746}
754747
755748void dbDatabase::commitEco (dbBlock* block_)
756749{
757750 _dbBlock* block = (_dbBlock*) block_;
758- // Commit the current journal or the last journal in history
759- assert (block->_journal || !block->_journal_history .empty ());
751+ // Commit the current ECO or the last ECO into stack
752+ assert (block->_journal || !block->_journal_stack .empty ());
760753 if (!block->_journal ) {
761- block->_journal = block->_journal_history .back ();
762- block->_journal_history .pop_back ();
763- }
764- if (!block->_journal_history .empty ()) {
765- dbJournal* next_journal = block->_journal_history .back ();
766- block->_journal_history .pop_back ();
767- int old_size = next_journal->size ();
768- next_journal->append (block->_journal );
769- block->_journal_history .push_back (next_journal);
754+ block->_journal = block->_journal_stack .top ();
755+ block->_journal_stack .pop ();
756+ }
757+ if (!block->_journal_stack .empty ()) {
758+ dbJournal* prev_journal = block->_journal_stack .top ();
759+ int old_size = prev_journal->size ();
760+ prev_journal->append (block->_journal );
770761 debugPrint (block_->getImpl ()->getLogger (),
771762 utl::ODB,
772763 " DB_ECO" ,
773764 2 ,
774765 " ECO: Merged ECO #{} (size {}) with ECO #{} (size {} -> {})" ,
775- block->_journal_history .size (),
766+ block->_journal_stack .size (),
776767 block->_journal ->size (),
777- block->_journal_history .size () - 1 ,
768+ block->_journal_stack .size () - 1 ,
778769 old_size,
779- block->_journal_history . back ()->size ());
770+ block->_journal_stack . top ()->size ());
780771 } else {
781772 debugPrint (block_->getImpl ()->getLogger (),
782773 utl::ODB,
783774 " DB_ECO" ,
784775 2 ,
785- " ECO: Committed ECO #{} (size {}) and removed from ECO history " ,
786- block->_journal_history .size (),
776+ " ECO: Committed ECO #{} (size {}) and removed from ECO stack " ,
777+ block->_journal_stack .size (),
787778 block->_journal ->size ());
788779 }
789780 delete block->_journal ;
@@ -793,26 +784,18 @@ void dbDatabase::commitEco(dbBlock* block_)
793784void dbDatabase::undoEco (dbBlock* block_)
794785{
795786 _dbBlock* block = (_dbBlock*) block_;
796- assert (block->_journal || !block->_journal_history .empty ());
787+ assert (block->_journal || !block->_journal_stack .empty ());
797788 if (!block->_journal ) {
798- block->_journal = block->_journal_history .back ();
799- block->_journal_history .pop_back ();
800- debugPrint (block_->getImpl ()->getLogger (),
801- utl::ODB,
802- " DB_ECO" ,
803- 2 ,
804- " ECO: Undid ECO #{} (size {})" ,
805- block->_journal_history .size (),
806- block->_journal ->size ());
807- } else {
808- debugPrint (block_->getImpl ()->getLogger (),
809- utl::ODB,
810- " DB_ECO" ,
811- 2 ,
812- " ECO: Undid ECO #{} (size {})" ,
813- block->_journal_history .size (),
814- block->_journal ->size ());
789+ block->_journal = block->_journal_stack .top ();
790+ block->_journal_stack .pop ();
815791 }
792+ debugPrint (block_->getImpl ()->getLogger (),
793+ utl::ODB,
794+ " DB_ECO" ,
795+ 2 ,
796+ " ECO: Undid ECO #{} (size {})" ,
797+ block->_journal_stack .size (),
798+ block->_journal ->size ());
816799 dbJournal* journal = block->_journal ;
817800 block->_journal = nullptr ;
818801 journal->undo ();
@@ -828,10 +811,10 @@ bool dbDatabase::ecoEmpty(dbBlock* block_)
828811 return false ;
829812}
830813
831- bool dbDatabase::ecoHistoryEmpty (dbBlock* block_)
814+ bool dbDatabase::ecoStackEmpty (dbBlock* block_)
832815{
833816 _dbBlock* block = (_dbBlock*) block_;
834- return block->_journal_history .empty ();
817+ return block->_journal_stack .empty ();
835818}
836819
837820void dbDatabase::readEco (dbBlock* block_, const char * filename)
@@ -872,9 +855,9 @@ void dbDatabase::writeEco(dbBlock* block_, const char* filename)
872855 if (block->_journal ) {
873856 dbOStream stream (block->getDatabase (), file);
874857 stream << *block->_journal ;
875- } else if (!block->_journal_history .empty ()) {
858+ } else if (!block->_journal_stack .empty ()) {
876859 dbOStream stream (block->getDatabase (), file);
877- stream << *block->_journal_history . back ();
860+ stream << *block->_journal_stack . top ();
878861 }
879862}
880863
0 commit comments