Changeset e4afb4 for src/Actions/Action_impl_header.hpp
- Timestamp:
- Oct 30, 2010, 8:42:44 PM (15 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:
- 76cec6, c38826
- Parents:
- 23359f
- git-author:
- Frederik Heber <heber@…> (10/30/10 19:55:54)
- git-committer:
- Frederik Heber <heber@…> (10/30/10 20:42:44)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/Action_impl_header.hpp
r23359f re4afb4 20 20 #include <boost/preprocessor/seq/transform.hpp> 21 21 22 #include <iostream> 23 #include <typeinfo> 24 25 #include "Actions/ActionTraits.hpp" 26 #include "Actions/OptionTrait.hpp" 22 27 #include "Actions/ValueStorage.hpp" 23 28 24 // some derived names 29 // some derived names: if CATEGORY is not given, we don't prefix with it 30 #ifdef CATEGORY 25 31 #define ACTION BOOST_PP_CAT(CATEGORY, BOOST_PP_CAT(ACTIONNAME, Action)) 26 32 #define COMMAND BOOST_PP_CAT(CATEGORY, ACTIONNAME) 27 33 #define PARAMS BOOST_PP_CAT(CATEGORY, BOOST_PP_CAT(ACTIONNAME, Parameters)) 28 34 #else 35 #define ACTION BOOST_PP_CAT(ACTIONNAME, Action) 36 #define COMMAND ACTIONNAME 37 #define PARAMS BOOST_PP_CAT(ACTIONNAME, Parameters) 38 #endif 29 39 // check if no lists given 30 40 #ifndef paramtypes … … 35 45 36 46 // check user has given name and category 37 #ifndef CATEGORY38 ERROR: No "CATEGORY" defined in: __FILE__39 #endif40 41 47 #ifndef ACTIONNAME 42 48 ERROR: No "ACTIONNAME" defined in: __FILE__ … … 66 72 ) 67 73 #endif 68 #ifndef TYPEINFO 69 BOOST_PP_ASSERT_MSG(0, \ 70 "ERROR: Type is mandatory for Actions, here for ACTION " \ 74 75 // check if paramdefaults is given, otherwise fill list with NODEFAULT 76 // this does not work: paramdefaults has to be completely defined before 77 // being used within option_print (used as an array there and not as 78 // some function call still to be expanded) 79 //#define paramdefaults (NODEFAULT) 80 //#define tempvalue(z,n,value) 81 // BOOST_PP_CAT(value,(NODEFAULT)) 82 //BOOST_PP_REPEAT(tempvalue, MAXPARAMTYPES, paramdefaults) 83 //#undef tempvalue 84 //#else 85 86 // if present, check if correct number of arguments 87 #ifdef paramdefaults 88 BOOST_PP_ASSERT_MSG(BOOST_PP_EQUAL(MAXPARAMTYPES, BOOST_PP_SEQ_SIZE(paramdefaults)),\ 89 ERROR: There are not the same number of "paramtokens" and "paramdefaults" in: __FILE__ \ 71 90 ) 72 91 #endif … … 84 103 BOOST_PP_SEQ_ELEM(n, VARLIST) 85 104 86 // prints OptionDescription.insert 87 #define optiondescription_print(z,n,unused, unused2) \ 88 OptionDescription. insert (\ 89 pair<std::string, std::string> (\ 90 BOOST_PP_SEQ_ELEM(n, paramtokens), \ 91 BOOST_PP_SEQ_ELEM(n, paramdescriptions) )\ 92 ); 93 105 // prints Options.insert 106 #ifdef paramdefaults 107 #define option_print(z,n,unused, unused2) \ 108 tester = Options. insert (\ 109 std::pair< std::string, OptionTrait *> ( \ 110 BOOST_PP_SEQ_ELEM(n, paramtokens), \ 111 new OptionTrait(\ 112 BOOST_PP_SEQ_ELEM(n, paramtokens), \ 113 &typeid( BOOST_PP_SEQ_ELEM(n, paramtypes) ), \ 114 BOOST_PP_SEQ_ELEM(n, paramdescriptions), \ 115 BOOST_PP_SEQ_ELEM(n, paramdefaults) )\ 116 )\ 117 ); \ 118 ASSERT(tester.second, "ActionTrait<ACTION>::ActionTrait<ACTION>() option token present twice!"); 119 #else 120 #define option_print(z,n,unused, unused2) \ 121 tester = Options. insert (\ 122 std::pair< std::string, OptionTrait *> ( \ 123 BOOST_PP_SEQ_ELEM(n, paramtokens), \ 124 new OptionTrait(\ 125 BOOST_PP_SEQ_ELEM(n, paramtokens), \ 126 &typeid( BOOST_PP_SEQ_ELEM(n, paramtypes) ), \ 127 BOOST_PP_SEQ_ELEM(n, paramdescriptions), \ 128 NODEFAULT )\ 129 )\ 130 ); \ 131 ASSERT(tester.second, "ActionTrait<ACTION>::ActionTrait<ACTION>() option token present twice!"); 132 #endif 94 133 95 134 #if defined paramtypes && defined paramreferences … … 108 147 class ActionTrait<ACTION> : public ActionTraits { 109 148 public: 110 ActionTrait() 149 ActionTrait() : 150 #ifndef SHORTFORM 151 ActionTraits(OptionTrait(TOKEN, &typeid(void), DESCRIPTION, std::string())) 152 #else 153 ActionTraits(OptionTrait(TOKEN, &typeid(void), DESCRIPTION, std::string(), SHORTFORM)) 154 #endif /* SHORTFORM */ 111 155 { 112 #ifdef DEFAULTVALUE 113 CurrentValue = DEFAULTVALUE; 114 #endif 115 #ifdef DESCRIPTION 116 Description = DESCRIPTION; 117 #endif 118 #ifdef paramdescriptions 119 #define BOOST_PP_LOCAL_MACRO(n) optiondescription_print(~, n, ~, ) 156 // initialize remainder of action info 157 #ifdef MENUNAME 158 MenuTitle = MENUNAME; 159 #endif 160 #ifdef MENUPOSITION 161 MenuPosition = MENUPOSITION; 162 #endif 163 164 // initialize action's options 165 std::pair< ActionTraits::options_iterator, bool > tester; 166 #ifdef paramtokens 167 #define BOOST_PP_LOCAL_MACRO(n) option_print(~, n, ~, ) 120 168 #define BOOST_PP_LOCAL_LIMITS (0, MAXPARAMTYPES-1) 121 169 #include BOOST_PP_LOCAL_ITERATE() 122 170 #endif 123 #ifdef MENUNAME 124 MenuTitle = MENUNAME; 125 #endif 126 #ifdef MENUPOSITION 127 MenuPosition = MENUPOSITION; 128 #endif 171 // associate action's short form also with option 129 172 #ifdef SHORTFORM 130 ShortForm = SHORTFORM; 131 #endif 132 #ifdef TYPEINFO 133 InternalType = TYPEINFO; 134 #endif 173 if (Options.find(TOKEN) != Options.end()) 174 Options[TOKEN]->setShortForm(std::string(SHORTFORM)); 175 #endif /* SHORTFORM */ 176 std::cout << "ActionTrait<ACTION>::ActionTrait() with " << getName() << ", type " << getTypeName() << " and description " << getDescription() << std::endl; 135 177 } 136 178 … … 139 181 140 182 class ACTION : public Action { 141 friend142 183 #if defined paramtypes && defined paramreferences 143 void COMMAND(184 friend void COMMAND( 144 185 #define BOOST_PP_LOCAL_MACRO(n) type_list(~, n, paramtypes, paramreferences) 145 186 #define BOOST_PP_LOCAL_LIMITS (0, MAXPARAMTYPES-1) … … 157 198 bool shouldUndo(); 158 199 159 virtual const std::string getName();160 161 200 struct PARAMS : ActionParameters { 162 201 #if defined paramtypes && defined paramreferences … … 167 206 } params; 168 207 169 ActionTrait<ACTION> Traits;170 171 208 protected: 172 209 virtual Dialog * fillDialog(Dialog*); … … 176 213 virtual Action::state_ptr performUndo(Action::state_ptr); 177 214 virtual Action::state_ptr performRedo(Action::state_ptr); 178 179 static const char NAME[];180 215 }; 181 216 … … 183 218 #undef paramtokens 184 219 #undef paramreferences 220 #undef paramdescriptions 221 #undef paramdefaults 185 222 #undef MAXPARAMTYPES 186 223 #undef statetypes … … 195 232 #undef ACTIONNAME 196 233 #undef CATEGORY 234 #undef MENUNAME 235 #undef MENUPOSITION 197 236 #undef TOKEN 237 238 #undef DESCRIPTION 239 #undef SHORTFORM
Note:
See TracChangeset
for help on using the changeset viewer.