Ignore:
Timestamp:
Jul 23, 2010, 5:30:57 PM (15 years ago)
Author:
Frederik Heber <heber@…>
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:
85f35e
Parents:
dde125
Message:

Inserted all possible queries into MapOfActions.

  • MapOfActions::query/setCurrentValue(): only special classes such as atom, Box, element, molecule, Vector need a specialization of the template.
  • also added missing MissingValueException files.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/MapOfActions.hpp

    rdde125 r0b0a20  
    135135  friend class MapOfActionsTest;
    136136public:
    137   enum OptionTypes { None, Boolean, Integer, ListOfInts, Double, ListOfDoubles, String, ListOfString, Axis, Vector, Box, Molecule, ListOfMolecules, Atom, ListOfAtoms, Element, ListOfElements };
     137  enum OptionTypes { None, Boolean, Integer, ListOfIntegers, Double, ListOfDoubles, String, ListOfStrings, Vector, ListOfVectors, Box, Molecule, ListOfMolecules, Atom, ListOfAtoms, Element, ListOfElements };
    138138
    139139  // getter for the action descriptions and short forms
     
    167167  void queryCurrentValue(const char * name, class Box &_T);
    168168  void queryCurrentValue(const char * name, class Vector &_T);
     169  void queryCurrentValue(const char * name, std::vector<atom *>&_T);
    169170  void queryCurrentValue(const char * name, std::vector<element *>&_T);
    170   void queryCurrentValue(const char * name, std::vector<std::string>&_T);
     171  void queryCurrentValue(const char * name, std::vector<molecule *>&_T);
    171172  template<typename T> void queryCurrentValue(const char * name, T &_T)
    172173  {
     
    179180      throw IllegalTypeException(__FILE__,__LINE__);
    180181  }
     182  template<typename T> void queryCurrentValue(const char * name, std::vector<T> &_T)
     183  {
     184    T temp;
     185    if (typeid( std::vector<T> ) == *TypeMap[name]) { // constructor of type_info is private, hence can only store by ref or ptr
     186      if (CurrentValue.find(name) == CurrentValue.end())
     187        throw MissingValueException(__FILE__, __LINE__);
     188      std::istringstream stream(CurrentValue[name]);
     189      CurrentValue.erase(name);
     190      while (!stream.fail()) {
     191        stream >> temp >> std::ws;
     192        _T.push_back(temp);
     193      }
     194    } else
     195      throw IllegalTypeException(__FILE__,__LINE__);
     196  }
    181197
    182198  void setCurrentValue(const char * name, class atom * &_T);
     
    185201  void setCurrentValue(const char * name, class Box &_T);
    186202  void setCurrentValue(const char * name, class Vector &_T);
     203  void setCurrentValue(const char * name, std::vector<atom *>&_T);
    187204  void setCurrentValue(const char * name, std::vector<element *>&_T);
    188   void setCurrentValue(const char * name, std::vector<std::string>&_T);
     205  void setCurrentValue(const char * name, std::vector<molecule *>&_T);
    189206  template<class T> void setCurrentValue(const char * name, T &_T)
    190207  {
     
    192209    if (typeid( T ) == *TypeMap[name]) {  // constructor of type_info is private, hence can only store by ref or ptr
    193210      stream << _T;
     211      CurrentValue[name] = stream.str();
     212    } else
     213      throw IllegalTypeException(__FILE__,__LINE__);
     214  }
     215  template<class T> void setCurrentValue(const char * name, std::vector<T> &_T)
     216  {
     217    std::ostringstream stream;
     218    if (typeid( std::vector<T> ) == *TypeMap[name]) {  // constructor of type_info is private, hence can only store by ref or ptr
     219      std::ostringstream stream;
     220      for (std::vector<std::string>::iterator iter = _T.begin(); iter != _T.end(); ++iter) {
     221        stream << (*iter) << " ";
     222      }
    194223      CurrentValue[name] = stream.str();
    195224    } else
Note: See TracChangeset for help on using the changeset viewer.