comparison framework/Document.cpp @ 665:e19c609a7bec

Update so Document owns the alignment model's input aggregate model
author Chris Cannam
date Thu, 04 Apr 2019 16:17:11 +0100
parents e2715204feaa
children 21673429dba5
comparison
equal deleted inserted replaced
644:6fd0ebfd2bbe 665:e19c609a7bec
785 { 785 {
786 if (model == nullptr) { 786 if (model == nullptr) {
787 return; 787 return;
788 } 788 }
789 789
790 #ifdef DEBUG_DOCUMENT
791 SVDEBUG << "Document::releaseModel(" << model << ", type "
792 << model->getTypeName() << ", name \""
793 << model->objectName() << "\")" << endl;
794 #endif
795
790 if (model == m_mainModel) { 796 if (model == m_mainModel) {
791 return; 797 return;
792 } 798 }
793 799
794 bool toDelete = false; 800 bool toDelete = false;
801 if (--m_models[model].refcount == 0) { 807 if (--m_models[model].refcount == 0) {
802 toDelete = true; 808 toDelete = true;
803 } 809 }
804 } 810 }
805 } else if (m_aggregateModels.find(model) != m_aggregateModels.end()) { 811 } else if (m_aggregateModels.find(model) != m_aggregateModels.end()) {
812 #ifdef DEBUG_DOCUMENT
806 SVDEBUG << "Document::releaseModel: is an aggregate model" << endl; 813 SVDEBUG << "Document::releaseModel: is an aggregate model" << endl;
814 #endif
807 toDelete = true; 815 toDelete = true;
808 } else { 816 } else {
809 SVCERR << "WARNING: Document::releaseModel: Unfound model " 817 SVCERR << "WARNING: Document::releaseModel: Unfound model "
810 << model << endl; 818 << model << endl;
811 toDelete = true; 819 toDelete = true;
877 } 885 }
878 } 886 }
879 887
880 if (m_layers.find(layer) == m_layers.end()) { 888 if (m_layers.find(layer) == m_layers.end()) {
881 SVDEBUG << "Document::deleteLayer: Layer " 889 SVDEBUG << "Document::deleteLayer: Layer "
882 << layer << " (" << typeid(layer).name() << 890 << layer << " (typeid " << typeid(layer).name() <<
883 ") does not exist, or has already been deleted " 891 ") does not exist, or has already been deleted "
884 << "(this may not be as serious as it sounds)" << endl; 892 << "(this may not be as serious as it sounds)" << endl;
885 return; 893 return;
886 } 894 }
887 895
888 m_layers.erase(layer); 896 m_layers.erase(layer);
889 897
890 #ifdef DEBUG_DOCUMENT 898 #ifdef DEBUG_DOCUMENT
891 SVDEBUG << "Document::deleteLayer: Removing, now have " 899 SVDEBUG << "Document::deleteLayer: Removing (and about to release model), now have "
892 << m_layers.size() << " layers" << endl; 900 << m_layers.size() << " layers" << endl;
893 #endif 901 #endif
894 902
895 releaseModel(layer->getModel()); 903 releaseModel(layer->getModel());
896 emit layerRemoved(layer); 904 emit layerRemoved(layer);
1099 // The reference has an empty alignment to itself. This makes 1107 // The reference has an empty alignment to itself. This makes
1100 // it possible to distinguish between the reference and any 1108 // it possible to distinguish between the reference and any
1101 // unaligned model just by looking at the model itself, 1109 // unaligned model just by looking at the model itself,
1102 // without also knowing what the main model is 1110 // without also knowing what the main model is
1103 SVDEBUG << "Document::alignModel(" << model << "): is main model, setting appropriately" << endl; 1111 SVDEBUG << "Document::alignModel(" << model << "): is main model, setting appropriately" << endl;
1104 rm->setAlignment(new AlignmentModel(model, model, nullptr, nullptr)); 1112 rm->setAlignment(new AlignmentModel(model, model, nullptr));
1105 return; 1113 return;
1106 } 1114 }
1107 1115
1108 if (!m_align->alignModel(m_mainModel, rm)) { 1116 if (!m_align->alignModel(this, m_mainModel, rm)) {
1109 cerr << "Alignment failed: " << m_align->getError() << endl; 1117 SVCERR << "Alignment failed: " << m_align->getError() << endl;
1110 emit alignmentFailed(m_align->getError()); 1118 emit alignmentFailed(m_align->getError());
1111 } 1119 }
1112 } 1120 }
1113 1121
1114 void 1122 void