From b3b22f3fd53bc295e4b9431b49e2af742b34182f Mon Sep 17 00:00:00 2001 From: David L Parkhurst Date: Mon, 2 Nov 2009 15:25:39 +0000 Subject: [PATCH] New class git-svn-id: svn://136.177.114.72/svn_GW/phreeqcpp/trunk@3735 1feff8c3-07ed-0310-ac33-dd36852eb9cd --- runner.cpp | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++ runner.h | 23 ++++++++++ 2 files changed, 151 insertions(+) create mode 100644 runner.cpp create mode 100644 runner.h diff --git a/runner.cpp b/runner.cpp new file mode 100644 index 00000000..092cb8f3 --- /dev/null +++ b/runner.cpp @@ -0,0 +1,128 @@ +#include "runner.h" + +runner::runner(void) +{ + this->time_step = 0; + this->start_time = 0; +} +runner::runner(CParser & parser) +{ + this->time_step = 0; + this->start_time = 0; + this->Read(parser); +} + +runner::~runner(void) +{ +} +bool runner::Read(CParser & parser) +{ + + bool return_value(true); + static std::vector < std::string > vopts; + if (vopts.empty()) + { + vopts.reserve(20); + vopts.push_back("cell"); + vopts.push_back("cells"); + vopts.push_back("start_time"); + vopts.push_back("time_step"); + } + + std::istream::pos_type ptr; + std::istream::pos_type next_char; + std::string token; + int opt_save; + bool useLastLine(false); + + this->Get_cells().Set_defined(true); + opt_save = CParser::OPT_DEFAULT; + + StorageBinListItem item; + for (;;) + { + int opt; + opt = parser.get_option(vopts, next_char); + if (opt == CParser::OPT_DEFAULT) + { + opt = opt_save; + } + else + { + opt_save = opt; + } + + + + // Read dump entity list of numbers or number ranges for line, store in item + if (opt >= 0 && opt <= 1) + { + + } + + // Process other identifiers + std::set < int >::iterator it; + switch (opt) + { + case CParser::OPT_EOF: + break; + case CParser::OPT_KEYWORD: + break; + + case 0: + case 1: + for (;;) + { + CParser::TOKEN_TYPE j = parser.copy_token(token, next_char); + if (j == CParser::TT_DIGIT) + { + item.Augment(token); + } + else if (j == CParser::TT_EMPTY) + { + item.Augment(token); + break; + } + else + { + parser.error_msg("Expected single number or range of numbers.", + CParser::OT_CONTINUE); + } + } + break; + case 2: //start_time + if (!(parser.get_iss() >> this->start_time)) + { + parser.error_msg("Expected start_time for RUN_CELLS.", + CParser::OT_CONTINUE); + parser.error_msg(parser.line().c_str(), CParser::OT_CONTINUE); + } + break; + case 3: //time_step + if (!(parser.get_iss() >> this->time_step)) + { + parser.error_msg("Expected time_step for RUN_CELLS.", + CParser::OT_CONTINUE); + parser.error_msg(parser.line().c_str(), CParser::OT_CONTINUE); + } + break; + default: + case CParser::OPT_DEFAULT: + case CParser::OPT_ERROR: + opt = CParser::OPT_EOF; + parser.error_msg("Unknown input reading RUN_CELLS definition.", + CParser::OT_CONTINUE); + parser.error_msg(parser.line().c_str(), CParser::OT_CONTINUE); + useLastLine = false; + return_value = false; + break; + } + if (opt == CParser::OPT_EOF || opt == CParser::OPT_KEYWORD) + break; + } + if (item.Get_numbers().size() > 0) + { + this->cells = item; + } + return(return_value); +} diff --git a/runner.h b/runner.h new file mode 100644 index 00000000..0b35a4f7 --- /dev/null +++ b/runner.h @@ -0,0 +1,23 @@ +#if !defined(RUNNER_H_INCLUDED) +#define RUNNER_H_INCLUDED +#include // std::set +#include // std::string +#include "Parser.h" +#include "StorageBinList.h" +class runner +{ +public: + runner(void); + runner(CParser & parser); + virtual ~runner(void); + bool Read(CParser & parser); + StorageBinListItem & Get_cells(void) { return(this->cells); }; + double Get_time_step() { return(this->time_step); }; + double Get_start_time() { return(this->start_time); }; + +protected: + double time_step; + double start_time; + StorageBinListItem cells; +}; +#endif // !defined(RUNNER_H_INCLUDED) \ No newline at end of file