Changeset 7f570c for src/Parser/FormatParser_Parameters.cpp
- Timestamp:
- Oct 17, 2011, 4:56:37 PM (14 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:
- 032f31
- Parents:
- f758dd
- git-author:
- Frederik Heber <heber@…> (10/06/11 11:12:35)
- git-committer:
- Frederik Heber <heber@…> (10/17/11 16:56:37)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/FormatParser_Parameters.cpp
rf758dd r7f570c 20 20 #include "CodePatterns/MemDebug.hpp" 21 21 22 #include <iostream> 23 #include <boost/algorithm/string.hpp> 24 #include <boost/tokenizer.hpp> 25 #include <sstream> 22 26 #include <string> 27 28 #include "CodePatterns/Assert.hpp" 29 #include "CodePatterns/Log.hpp" 23 30 24 31 #include "Parameters/Parameter.hpp" … … 106 113 return storage->getByName(_name); 107 114 } 115 116 /** Output operator for the contents of FormatParser_Parameters::params. 117 * 118 * @param ost output stream 119 * @param params reference to FormatParser_Parameters containing params. 120 * @return reference to output stream for concatenation 121 */ 122 std::ostream & operator << (std::ostream& ost, const FormatParser_Parameters ¶ms) 123 { 124 // this is ugly, but with boost::any to safeguard const-ness is plain impossible 125 std::ostringstream output; 126 ASSERT(params.storage != NULL, 127 "operator<<(FormatParser_Parameters) - storage is NULL."); 128 for (ParameterStorage::const_iterator iter = params.storage->getBeginIter(); 129 iter != params.storage->getEndIter(); 130 ++iter) 131 output << iter->first 132 << "=" << iter->second->get() << ";"; 133 ost << output.str(); 134 return ost; 135 } 136 137 /** Input operator for a list of parameters to place into \a params. 138 * 139 * @param ist input stream 140 * @param params parameters to parse into 141 * @return input stream for concatenation 142 */ 143 std::istream & operator >> (std::istream& ist, FormatParser_Parameters ¶ms) 144 { 145 typedef boost::tokenizer<boost::char_separator<char> > 146 tokenizer; 147 boost::char_separator<char> semicolonsep(";"); 148 boost::char_separator<char> equalitysep("="); 149 boost::char_separator<char> ticksep("\""); 150 std::string line; 151 std::getline( ist, line ); 152 //DoLog(0) && (Log() << Verbose(0) << "INFO: full line of parameters is '" << line << "'" << std::endl); 153 tokenizer tokens(line, semicolonsep); 154 ASSERT(tokens.begin() != tokens.end(), 155 "operator<< on FormatParser_Parameters - empty string, need at least ';' in line "+line+"!"); 156 for (tokenizer::iterator tok_iter = tokens.begin(); 157 tok_iter != tokens.end(); ++tok_iter) { 158 //LOG(2, "INFO: (key,value) pair is: " << *tok_iter << "."); 159 tokenizer paramtokens(*tok_iter, equalitysep); 160 if (paramtokens.begin() != paramtokens.end()) { 161 tokenizer::iterator tok_paramiter = paramtokens.begin(); 162 tokenizer::iterator tok_valueiter = tok_paramiter; 163 tokenizer::iterator tok_checkiter = ++tok_valueiter; 164 ++tok_checkiter; 165 LOG(3, "INFO: key is '" << *tok_paramiter << "', value is '" << *tok_valueiter << "'."); 166 // TODO: throw exception instead of ASSERT 167 ASSERT(tok_paramiter != paramtokens.end(), 168 "operator<< on FormatParser_Parameters - missing value before ' =' in token "+*tok_iter+"!"); 169 ASSERT(tok_valueiter != paramtokens.end(), 170 "operator<< on FormatParser_Parameters - missing value after ' =' in token "+*tok_iter+"!"); 171 ASSERT(tok_checkiter == paramtokens.end(), 172 "operator<< on FormatParser_Parameters - still more tokens after ' =' in token "+*tok_iter+":" 173 +*tok_checkiter+"!"); 174 std::string key(*tok_paramiter); 175 std::string value(*tok_valueiter); 176 boost::trim(key); 177 boost::trim(value); 178 tokenizer ticklesstokens(value, ticksep); 179 ASSERT(ticklesstokens.begin() != ticklesstokens.end(), 180 "operator<< on FormatParser_Parameters - no tokens present after removing ticks in token "+*tok_valueiter+"!"); 181 std::stringstream valuestream(*(ticklesstokens.begin())); 182 //LOG(2, "INFO: Token pair is " << key << "," << valuestream.str()); 183 184 // TODO: throw exception instead of DoeLog() 185 ASSERT(params.haveParameter(key), 186 "operator >> on FormatParser_Parameters - unknown parameter name '" 187 +key+"' with value "+valuestream.str()+"!"); 188 if (params.haveParameter(key)) { 189 Parameter *instance = params.getParameter(key); 190 instance->set(valuestream.str()); 191 } 192 } else { 193 ist.setstate(std::ios::eofbit); 194 } 195 } 196 return ist; 197 }
Note:
See TracChangeset
for help on using the changeset viewer.