Delete, Dump seem to work.

SOLUTION_MODIFY seems to work, but need to check all features.

EQUILIBRIUM_PHASES_MODIFY fails. Need to use maps to allow update I think. 

git-svn-id: svn://136.177.114.72/svn_GW/phreeqcpp/trunk@3719 1feff8c3-07ed-0310-ac33-dd36852eb9cd
This commit is contained in:
David L Parkhurst 2009-10-23 00:03:23 +00:00
parent 74bb0bc5d0
commit 2fd35ce463
4 changed files with 101 additions and 60 deletions

View File

@ -816,17 +816,34 @@ CParser::get_option(const std::vector < std::string > &opt_list,
} }
else else
{ {
pos_ptr = 0; //pos_ptr = 0;
copy_token(option, pos_ptr); //copy_token(option, pos_ptr);
//if (find_option(option, &opt, opt_list, true) == FT_OK)
//{
// j = opt;
// next_pos = pos_ptr;
//}
//else
//{
// j = OPT_DEFAULT;
// next_pos = 0;
//}
//std::istringstream m_line_iss_copy = m_line_iss;
pos_ptr = m_line_iss.tellg();
m_line_iss >> option;
if (find_option(option, &opt, opt_list, true) == FT_OK) if (find_option(option, &opt, opt_list, true) == FT_OK)
{ {
j = opt; j = opt;
next_pos = pos_ptr; next_pos = m_line_iss.tellg();
} }
else else
{ {
j = OPT_DEFAULT; j = OPT_DEFAULT;
next_pos = 0; m_line_iss.seekg(pos_ptr);
m_line_iss.clear();
next_pos = pos_ptr;
//m_line_iss >> option;
} }
/* /*
if (true) // pr.echo_input == TRUE if (true) // pr.echo_input == TRUE

View File

@ -1105,6 +1105,24 @@ read_solution_modify(void)
* *
*/ */
int return_value; int return_value;
// find solution number
char token[MAX_LENGTH];
char *next;
int l, n_user, n;
next = line;
copy_token(token, &next, &l);
if (copy_token(token, &next, &l) != DIGIT)
{
input_error++;
sprintf(error_string, "Expected solution number following SOLUTION_MODIFY.\n%s\n", line_save);
error_msg(error_string, CONTINUE);
return (ERROR);
}
else
{
sscanf(token,"%d", &n_user);
}
/* /*
* Make parser * Make parser
*/ */
@ -1130,23 +1148,7 @@ read_solution_modify(void)
parser.set_echo_file(CParser::EO_NOKEYWORDS); parser.set_echo_file(CParser::EO_NOKEYWORDS);
} }
// find solution number
char token[MAX_LENGTH];
char *next;
int l, n_user, n;
next = line;
copy_token(token, &next, &l);
if (copy_token(token, &next, &l) != DIGIT)
{
input_error++;
sprintf(error_string, "Expected solution number following SOLUTION_MODIFY.\n%s\n", line_save);
error_msg(error_string, CONTINUE);
return (ERROR);
}
else
{
sscanf(token,"%d", &n_user);
}
if (solution_bsearch(n_user, &n, FALSE) == NULL) if (solution_bsearch(n_user, &n, FALSE) == NULL)
{ {
input_error++; input_error++;
@ -1190,6 +1192,24 @@ read_equilibrium_phases_modify(void)
* *
*/ */
int return_value; int return_value;
// find equilibrium_phases number
char token[MAX_LENGTH];
char *next;
int l, n_user, n;
next = line;
copy_token(token, &next, &l);
if (copy_token(token, &next, &l) != DIGIT)
{
input_error++;
sprintf(error_string, "Expected equilibrium_phases number following EQUILIBRIUM_PHASES_MODIFY.\n%s\n", line_save);
error_msg(error_string, CONTINUE);
return (ERROR);
}
else
{
sscanf(token,"%d", &n_user);
}
/* /*
* Make parser * Make parser
*/ */
@ -1215,23 +1235,6 @@ read_equilibrium_phases_modify(void)
parser.set_echo_file(CParser::EO_NOKEYWORDS); parser.set_echo_file(CParser::EO_NOKEYWORDS);
} }
// find equilibrium_phases number
char token[MAX_LENGTH];
char *next;
int l, n_user, n;
next = line;
copy_token(token, &next, &l);
if (copy_token(token, &next, &l) != DIGIT)
{
input_error++;
sprintf(error_string, "Expected equilibrium_phases number following EQUILIBRIUM_PHASES_MODIFY.\n%s\n", line_save);
error_msg(error_string, CONTINUE);
return (ERROR);
}
else
{
sscanf(token,"%d", &n_user);
}
if (pp_assemblage_bsearch(n_user, &n) == NULL) if (pp_assemblage_bsearch(n_user, &n) == NULL)
{ {
input_error++; input_error++;

View File

@ -243,20 +243,24 @@ bool dumper::Read(CParser & parser)
static std::vector < std::string > vopts; static std::vector < std::string > vopts;
if (vopts.empty()) if (vopts.empty())
{ {
vopts.reserve(15); vopts.reserve(20);
vopts.push_back("solution"); vopts.push_back("solution");
vopts.push_back("solutions");
vopts.push_back("pp_assemblage"); vopts.push_back("pp_assemblage");
vopts.push_back("pp_assemblages");
vopts.push_back("equilibrium_phase");
vopts.push_back("equilibrium_phases"); vopts.push_back("equilibrium_phases");
vopts.push_back("exchange"); vopts.push_back("exchange");
vopts.push_back("surface"); vopts.push_back("surface");
vopts.push_back("s_s_assemblage"); vopts.push_back("s_s_assemblage");
vopts.push_back("solid_solution");
vopts.push_back("solid_solutions");
vopts.push_back("gas_phase"); vopts.push_back("gas_phase");
vopts.push_back("gas_phases");
vopts.push_back("kinetics"); vopts.push_back("kinetics");
vopts.push_back("file"); vopts.push_back("file");
vopts.push_back("append"); vopts.push_back("append");
vopts.push_back("all"); vopts.push_back("all");
vopts.push_back("on");
vopts.push_back("off");
} }
std::istream::pos_type ptr; std::istream::pos_type ptr;
@ -284,44 +288,55 @@ bool dumper::Read(CParser & parser)
} }
// Select StorageBinListItem // Select StorageBinListItem
StorageBinListItem &item(binList.Get_solution()); StorageBinListItem *item;
switch (opt) switch (opt)
{ {
case 0: case 0:
item = this->binList.Get_solution();
break;
case 1: case 1:
item = &(this->binList.Get_solution());
break;
case 2: case 2:
item = this->binList.Get_pp_assemblage();
break;
case 3: case 3:
item = this->binList.Get_exchange();
break;
case 4: case 4:
item = this->binList.Get_surface();
break;
case 5: case 5:
item = this->binList.Get_s_s_assemblage(); item = &(this->binList.Get_pp_assemblage());
break; break;
case 6: case 6:
item = this->binList.Get_gas_phase(); item = &(this->binList.Get_exchange());
break; break;
case 7: case 7:
item = this->binList.Get_kinetics(); item = &(this->binList.Get_surface());
break;
case 8:
case 9:
case 10:
item = &(this->binList.Get_s_s_assemblage());
break;
case 11:
case 12:
item = &(this->binList.Get_gas_phase());
break;
case 13:
item = &(this->binList.Get_kinetics());
break; break;
default: default:
break; break;
} }
// Read dump entity list of numbers or number ranges for line, store in item // Read dump entity list of numbers or number ranges for line, store in item
if (opt >= 0 && opt <= 7) if (opt >= 0 && opt <= 13)
{ {
for (;;) for (;;)
{ {
CParser::TOKEN_TYPE j = parser.copy_token(token, next_char); CParser::TOKEN_TYPE j = parser.copy_token(token, next_char);
if (j == CParser::TT_EMPTY || j == CParser::TT_DIGIT) if (j == CParser::TT_DIGIT)
{ {
item.Augment(token); item->Augment(token);
}
else if (j == CParser::TT_EMPTY)
{
item->Augment(token);
break;
} }
else else
{ {
@ -348,8 +363,14 @@ bool dumper::Read(CParser & parser)
case 5: case 5:
case 6: case 6:
case 7: case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
break; break;
case 8: //file case 14: //file
std::getline(parser.get_iss(), this->file_name); std::getline(parser.get_iss(), this->file_name);
this->file_name = trim(this->file_name, " \t"); this->file_name = trim(this->file_name, " \t");
if (this->file_name.size() == 0) if (this->file_name.size() == 0)
@ -358,7 +379,7 @@ bool dumper::Read(CParser & parser)
} }
break; break;
case 9: //append case 15: //append
{ {
CParser::TOKEN_TYPE j = parser.copy_token(token, next_char); CParser::TOKEN_TYPE j = parser.copy_token(token, next_char);
//if (!(parser.get_iss() >> this->append)) //if (!(parser.get_iss() >> this->append))
@ -369,7 +390,7 @@ bool dumper::Read(CParser & parser)
} }
} }
break; break;
case 10: //all case 16: //all
this->SetAll(true); this->SetAll(true);
break; break;
default: default: