--- trunk/src/io/SectionParserManager.cpp 2005/04/15 22:04:00 507 +++ trunk/src/io/SectionParserManager.cpp 2010/01/06 21:06:59 1401 @@ -6,19 +6,10 @@ * redistribute this software in source and binary code form, provided * that the following conditions are met: * - * 1. Acknowledgement of the program authors must be made in any - * publication of scientific results based in part on use of the - * program. An acceptable form of acknowledgement is citation of - * the article in which the program was described (Matthew - * A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher - * J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented - * Parallel Simulation Engine for Molecular Dynamics," - * J. Comput. Chem. 26, pp. 252-271 (2005)) - * - * 2. Redistributions of source code must retain the above copyright + * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - * 3. Redistributions in binary form must reproduce the above copyright + * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. @@ -37,14 +28,24 @@ * arising out of the use of or inability to use software, even if the * University of Notre Dame has been advised of the possibility of * such damages. + * + * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your + * research, please cite the appropriate papers when you publish your + * work. Good starting points are: + * + * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). + * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). + * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). + * [4] Vardeman & Gezelter, in progress (2009). */ #include #include +#include #include "io/SectionParserManager.hpp" #include "utils/Trim.hpp" #include "utils/simError.h" -namespace oopse { +namespace OpenMD { SectionParserManager::~SectionParserManager() { SectionParserManager::iterator i; @@ -72,7 +73,8 @@ namespace oopse { std::string line = trimLeftCopy(buffer); //a line begins with "//" is a comment line - if ( line.empty() || (line.size() >= 2 && line[0] == '/' && line[1] == '/')) { + if ( line.empty() || (line.size() >= 2 && line[0] == '/' + && line[1] == '/') ) { continue; } else { StringTokenizer tokenizer(line); @@ -84,23 +86,27 @@ namespace oopse { if (keyword == "begin") { std::string section = tokenizer.nextToken(); sectionNameStack.push(section); - - i = std::find_if(sectionParsers_.begin(), sectionParsers_.end(), SameSectionParserFunctor(section)); + + i = std::find_if(sectionParsers_.begin(), sectionParsers_.end(), + SameSectionParserFunctor(section)); if (i == sectionParsers_.end()){ - sprintf(painCave.errMsg, "SectionParserManager Error: Can not find corresponding section parser for %s\n", - section.c_str()); + sprintf(painCave.errMsg, + "SectionParserManager Error: Can not find corresponding " + "section parser for %s\n", + section.c_str()); painCave.isFatal = 1; simError(); } else { if (i->isActive) { - sprintf(painCave.errMsg, "SectionParserManager Error:find multiple %s section\n", - section.c_str()); - painCave.isFatal = 1; - simError(); + sprintf(painCave.errMsg, "SectionParserManager Error:find multiple %s " + "section\n", + section.c_str()); + painCave.isFatal = 1; + simError(); } else { - i->isActive = true; - i->lineNo = lineNo; - i->offset = input.tellg(); + i->isActive = true; + i->lineNo = lineNo; + i->offset = input.tellg(); } } } else if (keyword == "end") { @@ -109,43 +115,45 @@ namespace oopse { sectionNameStack.pop(); } else { sprintf(painCave.errMsg, "SectionParserManager Error: begin %s and end %s does not match at line %d\n", - sectionNameStack.top().c_str(), section.c_str(), lineNo); + sectionNameStack.top().c_str(), section.c_str(), lineNo); painCave.isFatal = 1; simError(); } - + } else { continue; } } } - + } - + if (!sectionNameStack.empty()) { sprintf(painCave.errMsg, "SectionParserManager Error: stack is not empty\n"); painCave.isFatal = 1; simError(); } - + //invoke parser for (i = sectionParsers_.begin(); i != sectionParsers_.end(); ++i) { if (i->isActive) { - //C++ standard does not guarantee seekg reset EOF, in that case, seekg will fail - //It is always a good idea to call clear() before seek - input.clear(); - input.seekg(i->offset); - (i->sectionParser)->parse(input, ff, i->lineNo); + //C++ standard does not guarantee seekg reset EOF, in that case, seekg will fail + //It is always a good idea to call clear() before seek + input.clear(); + input.seekg(i->offset); + (i->sectionParser)->parse(input, ff, i->lineNo); + (i->sectionParser)->validateSection(); } } } - + void SectionParserManager::push_front(SectionParser* sp) { SectionParserManager::iterator i; i = findSectionParser(sp->getSectionName()); if (i != sectionParsers_.end()) { - std::cerr << sp->getSectionName() << " section parser is alway existed" << std::endl; + std::cerr << sp->getSectionName() << " section parser already exists" + << std::endl; return; } @@ -156,7 +164,7 @@ namespace oopse { } else { context.priority = sectionParsers_.front().priority - priorityDifference_; } - + context.sectionParser = sp; context.lineNo = 0; context.offset = 0; @@ -169,7 +177,8 @@ namespace oopse { SectionParserManager::iterator i; i = findSectionParser(sp->getSectionName()); if (i != sectionParsers_.end()) { - std::cerr << sp->getSectionName() << " section parser is alway existed" << std::endl; + std::cerr << sp->getSectionName() << " section parser already exists" + << std::endl; return; } @@ -193,7 +202,8 @@ namespace oopse { SectionParserManager::iterator i; i = findSectionParser(sp->getSectionName()); if (i != sectionParsers_.end()) { - std::cerr << sp->getSectionName() << " section parser is alway existed" << std::endl; + std::cerr << sp->getSectionName() << " section parser already exists" + << std::endl; } SectionParserContext context; @@ -226,7 +236,7 @@ namespace oopse { SectionParserManager::iterator i; for (i = sectionParsers_.begin(); i != sectionParsers_.end(); ++i) { if (i->sectionParser->getSectionName() == sectionName) { - break; + break; } }