source: src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp@ 65c323

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 Candidate_v1.7.0 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
Last change on this file since 65c323 was 65c323, checked in by Frederik Heber <heber@…>, 10 years ago

Extracted all ObservedValue functionality out of GLMoleculeObject_atom.

  • i.e. GLMoleculeObject_atom is reduced to simple displaying, updated via Qt signals. These signals are connected to a QtObservedAtom which in turn now contains all the ObservedValue functionality.
  • this is preparatory for having a single (Observed)Atom as representer of its associated World's atom in the QtGui part of the code.
  • Property mode set to 100644
File size: 4.9 KB
Line 
1/*
2 * ObservedValuesContainer_impl.hpp
3 *
4 * Created on: Oct 29, 2015
5 * Author: heber
6 */
7
8
9#ifndef OBSERVEDVALUESCONTAINER_IMPL_HPP_
10#define OBSERVEDVALUESCONTAINER_IMPL_HPP_
11
12// include config.h
13#ifdef HAVE_CONFIG_H
14#include <config.h>
15#endif
16
17#include "ObservedValuesContainer.hpp"
18
19#include "CodePatterns/Assert.hpp"
20
21template <class T, typename id>
22ObservedValuesContainer<T,id>::ObservedValuesContainer(
23 const std::string _name,
24 QtObservedInstanceBoard &_board) :
25 NameOfType(_name),
26 board(_board)
27{}
28
29template <class T, typename id>
30typename T::ptr ObservedValuesContainer<T,id>::get(const id _id)
31{
32 typename CountedObservedValues_t::iterator iter = ObservedValues.find(_id);
33 ASSERT( iter != ObservedValues.end(),
34 "ObservedValuesContainer::getObservedValues() - no observed values present for "
35 +NameOfType+" "+toString(_id));
36 const ObservedValues_t &obsvalues = iter->second.first;
37 // increase refcount
38 ++(iter->second.second);
39 typename T::ptr _molecule(new T(obsvalues, board));
40
41 return _molecule;
42}
43
44template <>
45typename QtObservedMolecule::ptr
46ObservedValuesContainer<QtObservedMolecule,moleculeId_t>::get(const moleculeId_t _id)
47{
48 typename CountedObservedValues_t::iterator iter = ObservedValues.find(_id);
49 ASSERT( iter != ObservedValues.end(),
50 "ObservedValuesContainer::getObservedValues() - no observed values present for "
51 +NameOfType+" "+toString(_id));
52 const ObservedValues_t &obsvalues = iter->second.first;
53 // increase refcount
54 ++(iter->second.second);
55 typename QtObservedMolecule::ptr _molecule(new QtObservedMolecule(obsvalues));
56
57 return _molecule;
58}
59
60template <class T, typename id>
61void ObservedValuesContainer<T,id>::yield(const id _id)
62{
63 typename CountedObservedValues_t::iterator iter = ObservedValues.find(_id);
64 ASSERT( iter != ObservedValues.end(),
65 "ObservedValuesContainer::returnObservedAtom() - no observed values present for "
66 +NameOfType+" "+toString(_id));
67 ASSERT( iter->second.second != 0,
68 "ObservedValuesContainer::returnObservedAtom() - all instances for "
69 +NameOfType+" "+toString(_id)+" have already been returned.");
70 // decrease refcount
71 --(iter->second.second);
72 if (iter->second.second == 0) {
73 // free instance
74 }
75}
76
77template <class T, typename id>
78ObservedValues_t ObservedValuesContainer<T,id>::getObservedValues(const id _id)
79{
80 ObservedValues_t returnvalues;
81 typename CountedObservedValues_t::iterator iter = ObservedValues.find(_id);
82 ASSERT(iter != ObservedValues.end(),
83 "ObservedValuesContainer::getObservedValues() - "+NameOfType
84 +" values not present for id "+toString(_id));
85 if (iter->first == _id) {
86 returnvalues = iter->second.first;
87 ObservedValues.erase(iter);
88 }
89 return returnvalues;
90}
91
92template <class T, typename id>
93void ObservedValuesContainer<T,id>::returnObservedValues(
94 const id _id,
95 ObservedValues_t &_observedvalues)
96{
97#ifndef NDEBUG
98 std::pair<typename CountedObservedValues_t::iterator, bool> inserter =
99#endif
100 ObservedValues.insert(
101 std::make_pair( _id, std::make_pair(_observedvalues,0) ) );
102 ASSERT( inserter.second,
103 "QtObservedInstanceBoard::returnAtomObservedValues() - could not insert ObservedValues for"
104 +toString(_id)+".");
105}
106
107template <class T, typename id>
108bool ObservedValuesContainer<T,id>::insert(const id _id, ObservedValues_t &_obsvalues)
109{
110 std::pair<typename CountedObservedValues_t::iterator, bool> inserter =
111 ObservedValues.insert(
112 std::make_pair( _id, std::make_pair(_obsvalues,0) ) );
113 return inserter.second;
114}
115
116template <class T, typename id>
117bool ObservedValuesContainer<T,id>::changeIdentifier(const id _oldid, const id _newid)
118{
119 const typename CountedObservedValues_t::iterator Colditer = ObservedValues.find(_oldid);
120 const typename CountedObservedValues_t::iterator Cnewiter = ObservedValues.find(_newid);
121 bool status = ((Colditer != ObservedValues.end()) && (Cnewiter == ObservedValues.end()));
122 // change id here only if still present
123 if (status) {
124 {
125 RefCountedObservedValues_t obsvalues = Colditer->second;
126 ObservedValues.erase(Colditer);
127 ObservedValues.insert( std::make_pair(_newid, obsvalues) );
128 }
129 return true;
130 } else
131 return false;
132}
133
134template <class T, typename id>
135size_t ObservedValuesContainer<T,id>::getRefCount(const id _id) const
136{
137 typename CountedObservedValues_t::const_iterator iter = ObservedValues.find(_id);
138 return iter->second.second;
139}
140
141template <class T, typename id>
142bool ObservedValuesContainer<T,id>::erase(const id _id)
143{
144 typename CountedObservedValues_t::iterator iter = ObservedValues.find(_id);
145 if (iter != ObservedValues.end()) {
146 ObservedValues.erase(iter);
147 return true;
148 } else
149 return false;
150}
151
152template <class T, typename id>
153bool ObservedValuesContainer<T,id>::isPresent(const id _id) const
154{
155 typename CountedObservedValues_t::const_iterator iter = ObservedValues.find(_id);
156 return (iter != ObservedValues.end());
157}
158
159#endif /* OBSERVEDVALUESCONTAINER_IMPL_HPP_ */
Note: See TracBrowser for help on using the repository browser.