- Timestamp:
- Feb 14, 2016, 12:34:26 PM (9 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- 393342
- Parents:
- b43585
- git-author:
- Frederik Heber <heber@…> (12/30/15 14:28:53)
- git-committer:
- Frederik Heber <heber@…> (02/14/16 12:34:26)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp
rb43585 r0af22d 33 33 { 34 34 for (typename CountedObservedValues_t::iterator iter = ObservedValues.begin(); 35 iter != ObservedValues.end(); ++iter) 36 iter->second.first->noteBoardIsGone(); 35 iter != ObservedValues.end(); ++iter) { 36 ASSERT( !iter->second.empty(), 37 "~ObservedValuesContainer() of "+NameOfType+" "+toString(iter->first) 38 +" has an empty list in ObservedValues."); 39 for (typename RefCountedObservedValues_t::iterator listiter = iter->second.begin(); 40 listiter != iter->second.end(); ++listiter) { 41 listiter->first->noteBoardIsGone(); 42 } 43 } 37 44 } 38 45 … … 44 51 "ObservedValuesContainer::getObservedValues() - no observed values present for " 45 52 +NameOfType+" "+toString(_id)); 46 const typename T::ptr &obsvalues = iter->second.first; 53 ASSERT( !iter->second.empty(), 54 "ObservedValuesContainer<T,id>::get() of "+NameOfType+" "+toString(_id) 55 +" has an empty list in ObservedValues."); 56 const typename T::ptr &obsvalues = iter->second.back().first; 47 57 48 58 return obsvalues; … … 59 69 "ObservedValuesContainer<T,id>::markObservedValuesAsConnected() - Observed value of " 60 70 +NameOfType+" "+toString(_id)+" is not present yet."); 61 ++(iter->second.second); 71 ASSERT( !iter->second.empty(), 72 "ObservedValuesContainer<T,id>::markObservedValuesAsConnected() of "+NameOfType 73 +" "+toString(_id)+" has an empty list in ObservedValues."); 74 ++(iter->second.back().second); 62 75 } 63 76 … … 67 80 { 68 81 typename CountedObservedValues_t::const_iterator iter = ObservedValues.find(_id); 69 return ((iter != ObservedValues.end()) && (iter->second.second == 0)); 82 ASSERT( !iter->second.empty(), 83 "ObservedValuesContainer<T,id>::checkRefCount() of "+NameOfType 84 +" "+toString(_id)+" has an empty list in ObservedValues."); 85 return ((iter != ObservedValues.end()) && (iter->second.front().second == 0)); 70 86 } 71 87 … … 80 96 "ObservedValuesContainer<T,id>::markObservedValuesAsDisconnected() - Observed value of " 81 97 +NameOfType+" "+toString(_id)+" is not present yet."); 82 ASSERT (iter->second.second != 0, 98 ASSERT( !iter->second.empty(), 99 "ObservedValuesContainer<T,id>::markObservedValuesAsDisconnected() of "+NameOfType 100 +" "+toString(_id)+" has an empty list in ObservedValues."); 101 ASSERT (iter->second.front().second != 0, 83 102 "ObservedValuesContainer<T,id>::markObservedValuesAsDisconnected() - Observed value of " 84 103 +NameOfType+" "+toString(_id)+" is already signOff() from all."); 85 --(iter->second. second);104 --(iter->second.front().second); 86 105 87 106 if (checkRefCount(_id) && checksubjectKilled(_id) && checkMarkedForErase(_id)) … … 124 143 onDestroy(_id); 125 144 subjectKilledCount.erase(_id); 126 ObservedValues.erase(_id); 145 typename CountedObservedValues_t::iterator iter = ObservedValues.find(_id); 146 ASSERT( !iter->second.empty(), 147 "ObservedValuesContainer<T,id>::removeObservedValues() of "+NameOfType 148 +" for "+toString(_id)+" has an empty list in ObservedValues."); 149 if (iter->second.size() == 1) 150 ObservedValues.erase(iter); 151 else { 152 //if more than one, erase always the first one 153 iter->second.pop_front(); 154 } 127 155 MarkedForErase.erase(_id); 128 156 } … … 150 178 151 179 template <class T, typename id> 152 boolObservedValuesContainer<T,id>::insert(const id _id, const typename T::ptr &_obsvalues)180 void ObservedValuesContainer<T,id>::insert(const id _id, const typename T::ptr &_obsvalues) 153 181 { 154 182 std::pair<typename CountedObservedValues_t::iterator, bool> inserter = 155 183 ObservedValues.insert( 156 std::make_pair( _id, std::make_pair(_obsvalues,0) ) ); 184 std::make_pair( _id, RefCountedObservedValues_t(1,std::make_pair(_obsvalues,0)) ) ); 185 if (!inserter.second) { 186 // already an entry present? add to deque 187 inserter.first->second.push_back( std::make_pair(_obsvalues,0) ); 188 } 157 189 _obsvalues->activateObserver(); 158 return inserter.second;159 190 } 160 191 … … 174 205 if (status) { 175 206 { 207 // TODO: Actually, we need to think whether we do not have to to split the 208 // deque in two parts: the last entry having the newid, while all other 209 // ones retain the old one until they get removed. But we need to check 210 // whether changing ids "there" is possible when the QtObserved... is under 211 // removal. 176 212 RefCountedObservedValues_t obsvalues = Colditer->second; 177 213 ObservedValues.erase(Colditer); … … 193 229 194 230 template <class T, typename id> 195 size_t ObservedValuesContainer<T,id>::getRefCount(const id _id) const196 {197 typename CountedObservedValues_t::const_iterator iter = ObservedValues.find(_id);198 return iter->second.second;199 }200 201 template <class T, typename id>202 231 bool ObservedValuesContainer<T,id>::isPresent(const id _id) const 203 232 {
Note:
See TracChangeset
for help on using the changeset viewer.