Added additional check to LoadDatabase

git-svn-id: svn://136.177.114.72/svn_GW/IPhreeqc/trunk@8399 1feff8c3-07ed-0310-ac33-dd36852eb9cd
This commit is contained in:
Scott R Charlton 2014-01-24 03:46:46 +00:00
parent 90d4f97753
commit 3be1ca8d40
2 changed files with 67 additions and 8 deletions

View File

@ -571,12 +571,8 @@ std::list< std::string > IPhreeqc::ListComponents(void)
return this->Components; return this->Components;
} }
int IPhreeqc::LoadDatabase(const char* filename) int IPhreeqc::load_db(const char* filename)
{ {
bool bSaveOutputOn = this->OutputFileOn;
this->OutputFileOn = false;
bool bSaveLogFileOn = this->LogFileOn;
this->LogFileOn = false;
try try
{ {
// cleanup // cleanup
@ -604,6 +600,7 @@ int IPhreeqc::LoadDatabase(const char* filename)
// read input // read input
// //
ASSERT(this->PhreeqcPtr->phrq_io->get_istream() == NULL);
this->PhreeqcPtr->phrq_io->push_istream(&ifs, false); this->PhreeqcPtr->phrq_io->push_istream(&ifs, false);
this->PhreeqcPtr->read_database(); this->PhreeqcPtr->read_database();
} }
@ -625,12 +622,34 @@ int IPhreeqc::LoadDatabase(const char* filename)
} }
this->PhreeqcPtr->phrq_io->clear_istream(); this->PhreeqcPtr->phrq_io->clear_istream();
this->DatabaseLoaded = (this->PhreeqcPtr->get_input_errors() == 0); this->DatabaseLoaded = (this->PhreeqcPtr->get_input_errors() == 0);
this->OutputFileOn = bSaveOutputOn;
this->LogFileOn = bSaveLogFileOn;
return this->PhreeqcPtr->get_input_errors(); return this->PhreeqcPtr->get_input_errors();
} }
int IPhreeqc::LoadDatabaseString(const char* input) int IPhreeqc::LoadDatabase(const char* filename)
{
// save I/O state
bool bSaveErrorFileOn = this->ErrorFileOn;
bool bSaveOutputOn = this->OutputFileOn;
bool bSaveLogFileOn = this->LogFileOn;
this->ErrorFileOn = false;
this->OutputFileOn = false;
this->LogFileOn = false;
int n = this->load_db(filename);
if (n == 0)
{
n = this->test_db();
}
// restore I/O state
this->ErrorFileOn = bSaveErrorFileOn;
this->OutputFileOn = bSaveOutputOn;
this->LogFileOn = bSaveLogFileOn;
return n;
}
int IPhreeqc::load_db_str(const char* input)
{ {
try try
{ {
@ -676,6 +695,30 @@ int IPhreeqc::LoadDatabaseString(const char* input)
return this->PhreeqcPtr->get_input_errors(); return this->PhreeqcPtr->get_input_errors();
} }
int IPhreeqc::LoadDatabaseString(const char* input)
{
// save I/O state
bool bSaveErrorFileOn = this->ErrorFileOn;
bool bSaveOutputOn = this->OutputFileOn;
bool bSaveLogFileOn = this->LogFileOn;
this->ErrorFileOn = false;
this->OutputFileOn = false;
this->LogFileOn = false;
int n = this->load_db_str(input);
if (n == 0)
{
n = this->test_db();
}
// restore I/O state
this->ErrorFileOn = bSaveErrorFileOn;
this->OutputFileOn = bSaveOutputOn;
this->LogFileOn = bSaveLogFileOn;
return n;
}
void IPhreeqc::OutputAccumulatedLines(void) void IPhreeqc::OutputAccumulatedLines(void)
{ {
std::cout << this->StringInput.c_str() << std::endl; std::cout << this->StringInput.c_str() << std::endl;
@ -943,6 +986,18 @@ void IPhreeqc::SetSelectedOutputStringOn(bool bValue)
this->SelectedOutputStringOn = bValue; this->SelectedOutputStringOn = bValue;
} }
int IPhreeqc::test_db(void)
{
std::ostringstream oss;
int sn = this->PhreeqcPtr->next_user_number(Keywords::KEY_SOLUTION);
oss << "SOLUTION " << sn <<"; DELETE; -solution " << sn;
this->PhreeqcPtr->set_reading_database(TRUE);
int n = this->RunString(oss.str().c_str());
this->PhreeqcPtr->set_reading_database(FALSE);
return n;
}
void IPhreeqc::UnLoadDatabase(void) void IPhreeqc::UnLoadDatabase(void)
{ {
// init IPhreeqc // init IPhreeqc

View File

@ -882,6 +882,10 @@ protected:
void update_errors(void); void update_errors(void);
int load_db(const char* filename);
int load_db_str(const char* filename);
int test_db(void);
bool get_sel_out_file_on(int n)const; bool get_sel_out_file_on(int n)const;
std::string sel_file_name(int n_user); std::string sel_file_name(int n_user);