Ignore:
Timestamp:
Jul 22, 2010, 5:53:44 PM (14 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:
0c9cc3
Parents:
ba7418
Message:

MapOfActions::TypeMap now contains type_info.

We are going to use the information contained in MapOfActions to split Dialog (information gathering) from the performCall (execution) of the Action.
Therefore, Dialogs will store information as string in MapOfActions' maps and the Actions will retrieve the needed information therefrom.

  • TypeMap now contains pointers to type_info
  • new TypeEnumMap mapping *type_info to enum Options
  • renamed map DefaultValue -> CurrentValue
  • new functions MapOfActions::getCurrentValue(), ...::setCurrentValue() as getter and setter of current value
  • new exception IllegalTypeException derived from CustomException, thrown when getCurrentValue is asked for value from an action/option-name with different type than stored in TypeMap.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/MapOfActions.hpp

    rba7418 rab9a27  
    1414#include <map>
    1515#include <set>
     16#include <typeinfo>
    1617
    1718class MapOfActionsTest;
    1819
     20#include "Exceptions/IllegalTypeException.hpp"
    1921#include "Patterns/Singleton.hpp"
    2022
    2123namespace po = boost::program_options;
     24
     25using boost::lexical_cast;
    2226
    2327/** Central class for adding functionality to the code.
     
    136140  bool hasValue(std::string actionname);
    137141  bool isShortFormPresent(std::string shortform);
    138   enum OptionTypes getValueType(std::string actionname);
     142  std::string getValueType(std::string actionname);
    139143
    140144  std::set<std::string> generic;
     
    150154  void populateActions();
    151155
     156  template<typename T> void queryCurrentValue(const char * name, T &_T)
     157  {
     158    if (typeid( T ) == *TypeMap[name])  // constructor of type_info is private, hence can only store by ref or ptr
     159      _T = lexical_cast<T>(CurrentValue[name].c_str());
     160    else
     161      throw IllegalTypeException(__FILE__,__LINE__);
     162  }
     163
     164  template<class T> void setCurrentValue(const char * name, T &_T)
     165  {
     166    if (typeid( T ) == *TypeMap[name])  // constructor of type_info is private, hence can only store by ref or ptr
     167      CurrentValue[name] = std::string(_T);
     168    else
     169      throw IllegalTypeException(__FILE__,__LINE__);
     170  }
     171
     172
    152173private:
    153174  // private constructor and destructor
     
    159180
    160181  // map of the action names and their description
    161   std::map<std::string, std::string> DefaultValue;
     182  std::map<std::string, std::string> CurrentValue;
    162183  std::map<std::string, std::string> DescriptionMap;
    163184  std::map<std::string, std::string> ShortFormMap;
    164   std::map<std::string, enum OptionTypes > TypeMap;
     185  std::map<std::string, const std::type_info * > TypeMap;
     186  std::map<const std::type_info *, enum OptionTypes > TypeEnumMap;
    165187};
    166188
Note: See TracChangeset for help on using the changeset viewer.