diff --git a/IPhreeqc.vcproj b/IPhreeqc.vcproj
index 6a5f9f8a..f36e401b 100644
--- a/IPhreeqc.vcproj
+++ b/IPhreeqc.vcproj
@@ -44,7 +44,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="$(DEV_GMP_INC);include;src;src/phreeqcpp;src/phreeqcpp/phreeqc"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;SWIG_SHARED_OBJ;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;SWIG_SHARED_OBJ;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_WARNINGS;PHREEQC_CPP;XX_INVERSE_CL1MP_XX;PHREEQC_CLASS;USE_PHRQ_ALLOC"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
@@ -118,7 +118,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(DEV_GMP_INC);include;src;src/phreeqcpp;src/phreeqcpp/phreeqc"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;SWIG_SHARED_OBJ;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;SWIG_SHARED_OBJ;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_WARNINGS;PHREEQC_CPP;XX_INVERSE_CL1MP_XX;PHREEQC_CLASS;USE_PHRQ_ALLOC"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -193,7 +193,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(DEV_GMP_INC);include;src;src/phreeqcpp;src/phreeqcpp/phreeqc"
- PreprocessorDefinitions="WIN32_MEMORY_DEBUG;_DEBUG;WIN32;_LIB;SWIG_SHARED_OBJ;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN32_MEMORY_DEBUG;_DEBUG;WIN32;_LIB;SWIG_SHARED_OBJ;_CRT_SECURE_NO_DEPRECATE;XX_INVERSE_CL1MP_XX"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -313,40 +313,6 @@
RelativePath=".\src\fwrap3.c"
>
-
-
-
-
-
-
-
-
-
-
-
@@ -454,6 +420,214 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1831,37 +2005,25 @@
>
+
+
-
-
-
-
-
-
-
-
diff --git a/IPhreeqc.vcproj.GS.charlton.user b/IPhreeqc.vcproj.GS.charlton.user
new file mode 100644
index 00000000..f1aa731b
--- /dev/null
+++ b/IPhreeqc.vcproj.GS.charlton.user
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/include/IPhreeqc.h b/include/IPhreeqc.h
index 1b7671b8..4182e85d 100644
--- a/include/IPhreeqc.h
+++ b/include/IPhreeqc.h
@@ -1,11 +1,13 @@
-#ifndef __IPHREEQC_H
-#define __IPHREEQC_H
+#ifndef _INC_IPHREEQC_H
+#define _INC_IPHREEQC_H
-#include "Var.h"
+#include "IPhreeqcCallbacks.h" /* PFN_PRERUN_CALLBACK, PFN_POSTRUN_CALLBACK, PFN_CATCH_CALLBACK */
+#include "CVar.hxx" /* VRESULT */
#if defined(__cplusplus)
extern "C" {
#endif
+
/**
* Load the specified database file into phreeqc.
* @param filename The name of the phreeqc database to load.
@@ -373,10 +375,6 @@ void ClearErrors(void);
void OutputLines(void);
-typedef int (*PFN_PRERUN_CALLBACK)(void *cookie);
-typedef int (*PFN_POSTRUN_CALLBACK)(void *cookie);
-typedef int (*PFN_CATCH_CALLBACK)(void *cookie);
-
int RunWithCallback(PFN_PRERUN_CALLBACK pfn_pre, PFN_POSTRUN_CALLBACK pfn_post, void *cookie, int output_on, int error_on, int log_on, int selected_output_on);
int CatchErrors(PFN_CATCH_CALLBACK pfn, void *cookie);
@@ -387,8 +385,9 @@ const char* GetLastErrorString(void);
void DebugOutputLines(void);
#endif
+
#if defined(__cplusplus)
}
#endif
-#endif /* __IPHREEQC_H */
+#endif /* _INC_IPHREEQC_H */
diff --git a/include/IPhreeqcCallbacks.h b/include/IPhreeqcCallbacks.h
new file mode 100644
index 00000000..85d46840
--- /dev/null
+++ b/include/IPhreeqcCallbacks.h
@@ -0,0 +1,19 @@
+#ifndef _INC_IPHREEQC_CALLBACKS_H
+#define _INC_IPHREEQC_CALLBACKS_H
+
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+typedef int (*PFN_PRERUN_CALLBACK)(void *cookie);
+typedef int (*PFN_POSTRUN_CALLBACK)(void *cookie);
+typedef int (*PFN_CATCH_CALLBACK)(void *cookie);
+
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* _INC_IPHREEQC_CALLBACKS_H */
diff --git a/src/ErrorReporter.hxx b/src/ErrorReporter.hxx
index a1eb67c3..e2f554b2 100644
--- a/src/ErrorReporter.hxx
+++ b/src/ErrorReporter.hxx
@@ -6,7 +6,8 @@
#include // std::fprintf
#include "phreeqcns.hxx"
-class IErrorReporter {
+class IErrorReporter
+{
public:
virtual size_t AddError(const char* error_msg) = 0;
virtual void Clear(void) = 0;
diff --git a/src/IPhreeqc.cpp b/src/IPhreeqc.cpp
index 05209cab..639bfa9d 100644
--- a/src/IPhreeqc.cpp
+++ b/src/IPhreeqc.cpp
@@ -1,214 +1,216 @@
-#if defined(_DEBUG)
-#pragma warning(disable : 4786) // disable truncation warning
-#endif
-#include // std::cout
-#include // std::ifstream
-#include // std::auto_ptr
-#include // std::istringstream
-#include
-
-#if defined(_WIN32)
-#include // ::OutputDebugString
-#endif
-
-#include "phreeqcns.hxx"
-#include "ErrorReporter.hxx"
-#include "SelectedOutput.hxx"
-#include "Var.h"
#include "IPhreeqc.h"
-#include "module_files.h"
-
-#ifdef PHREEQC_CPP
-extern int dump_entities(void);
-extern int delete_entities(void);
-extern int run_as_cells(void);
-#endif
+#include "IPhreeqc.hpp"
+#include "ErrorReporter.hxx"
+int istream_getc(void *cookie);
const char OUTPUT_FILENAME[] = "phreeqc.out";
const char ERROR_FILENAME[] = "phreeqc.err";
const char LOG_FILENAME[] = "phreeqc.log";
const char PUNCH_FILENAME[] = "selected.out";
-
-const std::string& GetAccumulatedLines(void);
-void ClearAccumulatedLines(void);
-
-void EndRow(void);
-void AddSelectedOutput(const char* name, const char* format, va_list argptr);
-
-
-struct PhreeqcStop{};
-
-struct IPhreeqc
-{
- // ctor
- IPhreeqc(void)
- : m_pIErrorReporter(0)
- , m_bDatabaseLoaded(false)
- , m_bSelectedOutputOn(false)
- , m_sPunchFileName(NULL)
- {
- // initialize
- UnLoadDatabase();
- };
- IPhreeqc(IErrorReporter *pIErrorReporter)
- : m_pIErrorReporter(0)
- , m_bDatabaseLoaded(false)
- , m_bSelectedOutputOn(false)
- , m_sPunchFileName(NULL)
- {
- // initialize
- UnLoadDatabase();
- };
- ~IPhreeqc(void)
- {
- UnLoadDatabase();
- delete[] m_sPunchFileName;
- };
- IErrorReporter *m_pIErrorReporter;
- bool m_bDatabaseLoaded;
- bool m_bSelectedOutputOn;
- char *m_sPunchFileName;
-};
-
-static std::string s_string_input;
-static std::ostringstream s_oss;
-static CErrorReporter s_errorReporter;
-static IPhreeqc s_IPhreeqc(&s_errorReporter);
-
-static void check_database(const char *sz_routine);
-
-static void do_run(const char* sz_routine, std::istream* pis, FILE* fp, int output_on, int error_on, int log_on, int selected_output_on, PFN_PRERUN_CALLBACK pfn_pre, PFN_POSTRUN_CALLBACK pfn_post, void *cookie);
-
-
-int istream_getc(void *cookie);
-int output_handler(const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args);
-int open_handler(const int type, const char *file_name);
-int handler(const int action, const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args);
-
-
-int
-istream_getc(void *cookie)
-{
- if (cookie)
- {
- std::istream* is = (std::istream*)cookie;
- return is->get();
- }
- return EOF;
-}
-
-int
-handler(const int action, const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args)
-{
- int n = OK;
- switch (action)
- {
- case ACTION_OPEN:
- n = open_handler(type, err_str);
- break;
-
- case ACTION_OUTPUT:
- n = output_handler(type, err_str, stop, cookie, format, args);
- break;
-
- default:
- n = module_handler(action, type, err_str, stop, cookie, format, args);
- break;
- }
-
- if (stop == STOP)
- {
- throw PhreeqcStop();
- }
- return n;
-}
-
-int
-output_handler(const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args)
-{
- IPhreeqc* pIPhreeqc = (IPhreeqc*) cookie;
-
- switch (type)
- {
- case OUTPUT_ERROR:
- if (pIPhreeqc && pIPhreeqc->m_pIErrorReporter)
- {
- std::ostringstream oss;
- oss << "ERROR: " << err_str << "\n";
- if (stop == STOP) {
- oss << "Stopping.\n";
- }
- pIPhreeqc->m_pIErrorReporter->AddError(oss.str().c_str());
- }
- break;
-
- case OUTPUT_PUNCH:
- AddSelectedOutput(err_str, format, args);
- break;
-
- }
- return module_handler(ACTION_OUTPUT, type, err_str, stop, cookie, format, args);
-}
-
-int
-open_handler(const int type, const char *file_name)
-{
- int n = OK;
- switch (type)
- {
- case OUTPUT_PUNCH:
- if (file_name)
- {
- ASSERT(s_IPhreeqc.m_sPunchFileName != file_name);
- if (s_IPhreeqc.m_sPunchFileName != file_name)
- {
- delete[] s_IPhreeqc.m_sPunchFileName;
- s_IPhreeqc.m_sPunchFileName = NULL;
- s_IPhreeqc.m_sPunchFileName = new char[::strlen(file_name) + 1];
- ::strcpy(s_IPhreeqc.m_sPunchFileName, file_name);
- }
- }
- if (s_IPhreeqc.m_bSelectedOutputOn)
- {
- n = module_handler(ACTION_OPEN, type, file_name, CONTINUE, NULL, NULL, NULL);
- }
- break;
- default:
- n = module_handler(ACTION_OPEN, type, file_name, CONTINUE, NULL, NULL, NULL);
- break;
- }
- return n;
-}
-
int
LoadDatabase(const char* filename)
+{
+ return IPhreeqc::LibraryInstance()->LoadDatabase(filename);
+}
+
+int
+LoadDatabaseString(const char* input)
+{
+ return IPhreeqc::LibraryInstance()->LoadDatabaseString(input);
+}
+
+void
+UnLoadDatabase(void)
+{
+ IPhreeqc::LibraryInstance()->UnLoadDatabase();
+}
+
+void
+OutputLastError(void)
+{
+ IPhreeqc::LibraryInstance()->OutputLastError();
+}
+
+const char*
+GetLastErrorString(void)
+{
+ return IPhreeqc::LibraryInstance()->GetLastErrorString();
+}
+
+VRESULT
+AccumulateLine(const char *line)
+{
+ return IPhreeqc::LibraryInstance()->AccumulateLine(line);
+}
+
+int
+Run(int output_on, int error_on, int log_on, int selected_output_on)
+{
+ return IPhreeqc::LibraryInstance()->Run(output_on, error_on, log_on, selected_output_on);
+}
+
+int
+RunFile(const char* filename, int output_on, int error_on, int log_on, int selected_output_on)
+{
+ return IPhreeqc::LibraryInstance()->RunFile(filename, output_on, error_on, log_on, selected_output_on);
+}
+
+int
+RunString(const char* input, int output_on, int error_on, int log_on, int selected_output_on)
+{
+ return IPhreeqc::LibraryInstance()->RunString(input, output_on, error_on, log_on, selected_output_on);
+}
+
+int
+GetSelectedOutputRowCount(void)
+{
+ return (int)IPhreeqc::LibraryInstance()->GetSelectedOutputRowCount();
+}
+
+int
+GetSelectedOutputColumnCount(void)
+{
+ return (int)IPhreeqc::LibraryInstance()->GetSelectedOutputColumnCount();
+}
+
+VRESULT
+GetSelectedOutputValue(int row, int col, VAR* pVAR)
+{
+ return IPhreeqc::LibraryInstance()->GetSelectedOutputValue(row, col, pVAR);
+}
+
+size_t
+AddError(const char* error_msg)
+{
+ return IPhreeqc::LibraryInstance()->AddError(error_msg);
+}
+
+
+void
+OutputLines(void)
+{
+ IPhreeqc::LibraryInstance()->OutputLines();
+}
+
+const std::string&
+GetAccumulatedLines(void)
+{
+ return IPhreeqc::LibraryInstance()->GetAccumulatedLines();
+}
+
+void
+ClearAccumulatedLines(void)
+{
+ IPhreeqc::LibraryInstance()->ClearAccumulatedLines();
+}
+
+
+IPhreeqc::IPhreeqc(void)
+: Phreeqc()
+, ErrorReporter(0)
+, SelectedOutput(0)
+, DatabaseLoaded(false)
+, SelectedOutputOn(false)
+{
+ ASSERT(this->phast == 0);
+ this->ErrorReporter = new CErrorReporter;
+ this->SelectedOutput = new CSelectedOutput();
+ this->Init();
+ this->UnLoadDatabase();
+}
+
+IPhreeqc::~IPhreeqc(void)
+{
+ delete this->ErrorReporter;
+ delete this->SelectedOutput;
+}
+
+// the library singleton
+IPhreeqc* IPhreeqc::Instance = 0;
+
+IPhreeqc* IPhreeqc::LibraryInstance()
+{
+ if (IPhreeqc::Instance == 0)
+ {
+ IPhreeqc::Instance = new IPhreeqc;
+ }
+ return IPhreeqc::Instance;
+}
+
+int Phreeqc::EndRow(void)
+{
+ return OK;
+}
+
+int IPhreeqc::EndRow(void)
+{
+ if (this->SelectedOutput->GetRowCount() <= 1)
+ {
+ // ensure all user_punch headings are included
+ for (int i = this->n_user_punch_index; i < this->user_punch_count_headings; ++i)
+ {
+ this->SelectedOutput->PushBackEmpty(this->user_punch_headings[i]);
+ }
+ }
+ return this->SelectedOutput->EndRow();
+}
+
+void IPhreeqc::ClearAccumulatedLines(void)
+{
+ this->StringInput.erase();
+}
+
+size_t IPhreeqc::AddError(const char* error_msg)
+{
+ return this->ErrorReporter->AddError(error_msg);
+}
+
+const std::string& IPhreeqc::GetAccumulatedLines(void)
+{
+ return this->StringInput;
+}
+
+void IPhreeqc::OutputLines(void)
+{
+ std::cout << this->StringInput.c_str() << std::endl;
+}
+
+void IPhreeqc::UnLoadDatabase(void)
+{
+ // init IPhreeqc
+ //
+ this->DatabaseLoaded = false;
+ this->SelectedOutputOn = false;
+
+ // clear error state
+ //
+ ASSERT(this->ErrorReporter);
+ this->ErrorReporter->Clear();
+
+ // clear selectedoutput
+ //
+ ASSERT(this->ErrorReporter);
+ this->SelectedOutput->Clear();
+
+ // initialize phreeqc
+ //
+ this->clean_up();
+ this->add_output_callback(IPhreeqc::handler, this);
+ this->do_initialize();
+ this->input_error = 0;
+}
+
+int IPhreeqc::LoadDatabase(const char* filename)
{
try
{
// cleanup
//
- UnLoadDatabase();
+ this->UnLoadDatabase();
+ this->SelectedOutput->Clear();
- CSelectedOutput::Instance()->Clear();
-
-#if 0
- // open stream
- //
- std::ifstream ifs;
- ifs.open(filename);
- if (!ifs.is_open())
- {
- std::ostringstream oss;
- oss << "LoadDatabase: Unable to open:" << "\"" << filename << "\".";
- error_msg(oss.str().c_str(), STOP); // throws PhreeqcStop
- }
-
- // read input
- //
- read_database(istream_getc, &ifs);
-#else
// open file
//
FILE* f = fopen(filename, "r");
@@ -216,24 +218,24 @@ LoadDatabase(const char* filename)
{
std::ostringstream oss;
oss << "LoadDatabase: Unable to open:" << "\"" << filename << "\".";
- error_msg(oss.str().c_str(), STOP); // throws PhreeqcStop
+ this->error_msg(oss.str().c_str(), STOP); // throws PhreeqcStop
}
// read input
//
- read_database(getc_callback, f);
-#endif
+ this->read_database(getc_callback, f);
+
}
catch (PhreeqcStop)
{
// do nothing
}
- catch(...)
+ catch (...)
{
const char *errmsg = "LoadDatabase: An unhandled exception occured.\n";
try
{
- error_msg(errmsg, STOP); // throws PhreeqcStop
+ this->error_msg(errmsg, STOP); // throws PhreeqcStop
}
catch (PhreeqcStop)
{
@@ -241,27 +243,26 @@ LoadDatabase(const char* filename)
}
}
- s_IPhreeqc.m_bDatabaseLoaded = (input_error == 0);
- return input_error;
+ this->DatabaseLoaded = (this->input_error == 0);
+ return this->input_error;
}
-int
-LoadDatabaseString(const char* input)
+int IPhreeqc::LoadDatabaseString(const char* input)
{
try
{
// cleanup
//
- UnLoadDatabase();
+ this->UnLoadDatabase();
- CSelectedOutput::Instance()->Clear();
+ this->SelectedOutput->Clear();
std::string s(input);
std::istringstream iss(s);
// read input
//
- read_database(istream_getc, &iss);
+ this->read_database(istream_getc, &iss);
}
catch (PhreeqcStop)
{
@@ -272,7 +273,7 @@ LoadDatabaseString(const char* input)
const char *errmsg = "LoadDatabaseString: An unhandled exception occured.\n";
try
{
- error_msg(errmsg, STOP); // throws PhreeqcStop
+ this->error_msg(errmsg, STOP); // throws PhreeqcStop
}
catch (PhreeqcStop)
{
@@ -280,423 +281,70 @@ LoadDatabaseString(const char* input)
}
}
- s_IPhreeqc.m_bDatabaseLoaded = (input_error == 0);
- return input_error;
+ this->DatabaseLoaded = (this->input_error == 0);
+ return this->input_error;
}
-void
-UnLoadDatabase(void)
+void IPhreeqc::OutputLastError(void)
{
- // init IPhreeqc
- //
- s_IPhreeqc.m_pIErrorReporter = &s_errorReporter;
- s_IPhreeqc.m_bDatabaseLoaded = false;
- s_IPhreeqc.m_bSelectedOutputOn = false;
-
- // clear error state
- //
- s_errorReporter.Clear();
-
- // free selectedoutput
- //
- CSelectedOutput::Release();
-
- // initialize phreeqc
- //
- clean_up();
- add_output_callback(handler, &s_IPhreeqc);
- do_initialize();
- input_error = 0;
+ std::cout << ((CErrorReporter*)this->ErrorReporter)->GetOS()->str().c_str() << std::endl;
}
-
-void
-OutputLastError(void)
-{
- std::cout << s_errorReporter.GetOS()->str().c_str() << std::endl;
-}
-
-const char*
-GetLastErrorString(void)
+const char* IPhreeqc::GetLastErrorString(void)
{
static std::string str;
- str = s_errorReporter.GetOS()->str();
+ str = ((CErrorReporter*)this->ErrorReporter)->GetOS()->str();
return str.c_str();
}
-// COMMENT: {11/27/2006 7:00:49 PM}#if defined(_WIN32)
-// COMMENT: {11/27/2006 7:00:49 PM}void
-// COMMENT: {11/27/2006 7:00:49 PM}DebugOutputLastError(void)
-// COMMENT: {11/27/2006 7:00:49 PM}{
-// COMMENT: {11/27/2006 7:00:49 PM} std::istringstream iss(s_errorReporter.GetOS()->str());
-// COMMENT: {11/27/2006 7:00:49 PM} std::string line;
-// COMMENT: {11/27/2006 7:00:49 PM} while (std::getline(iss, line)) {
-// COMMENT: {11/27/2006 7:00:49 PM} ::OutputDebugString(line.c_str());
-// COMMENT: {11/27/2006 7:00:49 PM} ::OutputDebugString("\n");
-// COMMENT: {11/27/2006 7:00:49 PM} }
-// COMMENT: {11/27/2006 7:00:49 PM}}
-// COMMENT: {11/27/2006 7:00:49 PM}#endif
-
-
-VRESULT
-AccumulateLine(const char *line)
+void IPhreeqc::check_database(const char* sz_routine)
{
- try
- {
- s_errorReporter.Clear();
- s_string_input.append(line);
- s_string_input.append("\n");
- return VR_OK;
- }
- catch (...)
- {
- s_errorReporter.AddError("AccumulateLine: An unhandled exception occured.\n");
- }
- return VR_OUTOFMEMORY;
-}
+ this->ErrorReporter->Clear();
+ this->SelectedOutput->Clear();
-int
-Run(int output_on, int error_on, int log_on, int selected_output_on)
-{
- static const char *sz_routine = "Run";
- try
- {
- // this may throw
- check_database(sz_routine);
-
- input_error = 0;
-
- // create input stream
- std::istringstream iss(GetAccumulatedLines());
-
- // this may throw
- do_run(sz_routine, &iss, NULL, output_on, error_on, log_on, selected_output_on, NULL, NULL, NULL);
- }
- catch (PhreeqcStop)
- {
- // do nothing
- }
- catch(...)
- {
- const char *errmsg = "Run: An unhandled exception occured.\n";
- try
- {
- error_msg(errmsg, STOP); // throws PhreeqcStop
- }
- catch (PhreeqcStop)
- {
- // do nothing
- }
- }
-
- ::ClearAccumulatedLines();
- close_output_files();
- return input_error;
-}
-
-int
-RunFile(const char* filename, int output_on, int error_on, int log_on, int selected_output_on)
-{
- static const char *sz_routine = "RunFile";
- try
- {
- // this may throw
- check_database(sz_routine);
-
- input_error = 0;
-
-#if 0
- // create input stream
- std::ifstream ifs;
- ifs.open(filename);
- if (!ifs.is_open())
- {
- std::ostringstream oss;
- oss << "RunFile: Unable to open:" << "\"" << filename << "\".";
- input_error = 1;
- error_msg(oss.str().c_str(), STOP); // throws
- }
-
- // this may throw
- do_run(sz_routine, &ifs, NULL, output_on, error_on, log_on, selected_output_on, NULL, NULL, NULL);
-#else
- // open file
- //
- FILE* f = fopen(filename, "r");
- if (!f)
- {
- std::ostringstream oss;
- oss << "RunFile: Unable to open:" << "\"" << filename << "\".";
- error_msg(oss.str().c_str(), STOP); // throws PhreeqcStop
- }
-
- // this may throw
- do_run(sz_routine, NULL, f, output_on, error_on, log_on, selected_output_on, NULL, NULL, NULL);
-#endif
- }
- catch (PhreeqcStop)
- {
- // do nothing
- }
- catch(...)
- {
- const char *errmsg = "RunFile: An unhandled exception occured.\n";
- try
- {
- error_msg(errmsg, STOP); // throws PhreeqcStop
- }
- catch (PhreeqcStop)
- {
- // do nothing
- }
- }
-
- close_output_files();
- return input_error;
-}
-
-int
-RunString(const char* input, int output_on, int error_on, int log_on, int selected_output_on)
-{
- static const char *sz_routine = "RunString";
- try
- {
- // this may throw
- check_database(sz_routine);
-
- input_error = 0;
-
- // create input stream
- std::string s(input);
- std::istringstream iss(s);
-
- // this may throw
- do_run(sz_routine, &iss, NULL, output_on, error_on, log_on, selected_output_on, NULL, NULL, NULL);
- }
- catch (PhreeqcStop)
- {
- // do nothing
- }
- catch(...)
- {
- const char *errmsg = "RunString: An unhandled exception occured.\n";
- try
- {
- error_msg(errmsg, STOP); // throws PhreeqcStop
- }
- catch (PhreeqcStop)
- {
- // do nothing
- }
- }
-
- close_output_files();
- return input_error;
-}
-
-
-int
-GetSelectedOutputRowCount(void)
-{
- return (int)CSelectedOutput::Instance()->GetRowCount();
-}
-
-int
-GetSelectedOutputColumnCount(void)
-{
- return (int)CSelectedOutput::Instance()->GetColCount();
-}
-
-VRESULT
-GetSelectedOutputValue(int row, int col, VAR* pVAR)
-{
- s_errorReporter.Clear();
- if (!pVAR) {
- s_errorReporter.AddError("GetSelectedOutputValue: VR_INVALIDARG pVar is NULL.\n");
- return VR_INVALIDARG;
- }
-
- VRESULT v = CSelectedOutput::Instance()->Get(row, col, pVAR);
- switch (v) {
- case VR_OK:
- break;
- case VR_OUTOFMEMORY:
- s_errorReporter.AddError("GetSelectedOutputValue: VR_OUTOFMEMORY Out of memory.\n");
- break;
- case VR_BADVARTYPE:
- s_errorReporter.AddError("GetSelectedOutputValue: VR_BADVARTYPE pVar must be initialized(VarInit) and/or cleared(VarClear).\n");
- break;
- case VR_INVALIDARG:
- // not possible
- break;
- case VR_INVALIDROW:
- s_errorReporter.AddError("GetSelectedOutputValue: VR_INVALIDROW Row index out of range.\n");
- break;
- case VR_INVALIDCOL:
- s_errorReporter.AddError("GetSelectedOutputValue: VR_INVALIDCOL Column index out of range.\n");
- break;
- }
- return v;
-}
-
-size_t
-AddError(const char* error_msg)
-{
- return s_errorReporter.AddError(error_msg);
-}
-
-void
-OutputLines(void)
-{
- std::cout << s_string_input.c_str() << std::endl;
-}
-
-// COMMENT: {11/27/2006 7:01:16 PM}#if defined(WIN32)
-// COMMENT: {11/27/2006 7:01:16 PM}void
-// COMMENT: {11/27/2006 7:01:16 PM}DebugOutputLines(void)
-// COMMENT: {11/27/2006 7:01:16 PM}{
-// COMMENT: {11/27/2006 7:01:16 PM} std::istringstream iss(s_string_input);
-// COMMENT: {11/27/2006 7:01:16 PM} std::string line;
-// COMMENT: {11/27/2006 7:01:16 PM} while (std::getline(iss, line)) {
-// COMMENT: {11/27/2006 7:01:16 PM} ::OutputDebugString(line.c_str());
-// COMMENT: {11/27/2006 7:01:16 PM} ::OutputDebugString("\n");
-// COMMENT: {11/27/2006 7:01:16 PM} }
-// COMMENT: {11/27/2006 7:01:16 PM}}
-// COMMENT: {11/27/2006 7:01:16 PM}#endif
-
-const std::string&
-GetAccumulatedLines(void)
-{
- return s_string_input;
-}
-
-void
-ClearAccumulatedLines(void)
-{
- s_string_input.erase();
-}
-
-int
-RunWithCallback(PFN_PRERUN_CALLBACK pfn_pre, PFN_POSTRUN_CALLBACK pfn_post, void *cookie, int output_on, int error_on, int log_on, int selected_output_on)
-{
- static const char *sz_routine = "RunWithCallback";
- try
- {
- // this may throw
- check_database(sz_routine);
-
- input_error = 0;
-
- // this may throw
- do_run(sz_routine, NULL, NULL, output_on, error_on, log_on, selected_output_on, pfn_pre, pfn_post, cookie);
- }
- catch (PhreeqcStop)
- {
- // do nothing
- }
- catch(...)
- {
- const char *errmsg = "RunWithCallback: An unhandled exception occured.\n";
- try
- {
- error_msg(errmsg, STOP); // throws PhreeqcStop
- }
- catch (PhreeqcStop)
- {
- // do nothing
- }
- }
-
- ClearAccumulatedLines();
- close_output_files();
- output_close(OUTPUT_DUMP); // this should be closed in close_output_files
- return input_error;
-}
-
-
-int
-CatchErrors(PFN_CATCH_CALLBACK pfn, void *cookie)
-{
- int rvalue = OK;
- try
- {
- input_error = 0;
-
- if (pfn)
- {
- rvalue = pfn(cookie);
- }
-
- }
- catch (PhreeqcStop)
- {
- // do nothing
- }
- catch (...)
- {
- const char errmsg[] = "CatchErrors: Unhandled exception occured.\n";
- try
- {
- error_msg(errmsg, STOP); // throws PhreeqcStop
- }
- catch (PhreeqcStop)
- {
- // do nothing
- }
- }
- return rvalue;
-}
-
-static void
-check_database(const char* sz_routine)
-{
- s_errorReporter.Clear();
- CSelectedOutput::Instance()->Clear();
-
- if (!s_IPhreeqc.m_bDatabaseLoaded)
+ if (!this->DatabaseLoaded)
{
std::ostringstream oss;
oss << sz_routine << ": No database is loaded";
- input_error = 1;
- error_msg(oss.str().c_str(), STOP); // throws PhreeqcStop
+ this->input_error = 1;
+ this->error_msg(oss.str().c_str(), STOP); // throws PhreeqcStop
}
}
-static void
-do_run(const char* sz_routine, std::istream* pis, FILE* fp, int output_on, int error_on, int log_on, int selected_output_on, PFN_PRERUN_CALLBACK pfn_pre, PFN_POSTRUN_CALLBACK pfn_post, void *cookie)
+void IPhreeqc::do_run(const char* sz_routine, std::istream* pis, FILE* fp, int output_on, int error_on, int log_on, int selected_output_on, PFN_PRERUN_CALLBACK pfn_pre, PFN_POSTRUN_CALLBACK pfn_post, void *cookie)
{
std::auto_ptr auto_iss(NULL);
char token[MAX_LENGTH];
if (output_on)
{
- if (output_open(OUTPUT_MESSAGE, OUTPUT_FILENAME) != OK)
+ if (this->output_open(OUTPUT_MESSAGE, OUTPUT_FILENAME) != OK)
{
std::ostringstream oss;
oss << sz_routine << ": Unable to open:" << "\"" << OUTPUT_FILENAME << "\".\n";
- warning_msg(oss.str().c_str());
+ this->warning_msg(oss.str().c_str());
}
}
if (error_on)
{
- if (output_open(OUTPUT_ERROR, ERROR_FILENAME) != OK)
+ if (this->output_open(OUTPUT_ERROR, ERROR_FILENAME) != OK)
{
std::ostringstream oss;
oss << sz_routine << ": Unable to open:" << "\"" << ERROR_FILENAME << "\".\n";
- warning_msg(oss.str().c_str());
+ this->warning_msg(oss.str().c_str());
}
}
if (log_on)
{
- if (output_open(OUTPUT_LOG, LOG_FILENAME) != OK)
+ if (this->output_open(OUTPUT_LOG, LOG_FILENAME) != OK)
{
std::ostringstream oss;
oss << sz_routine << ": Unable to open:" << "\"" << LOG_FILENAME << "\".\n";
- warning_msg(oss.str().c_str());
+ this->warning_msg(oss.str().c_str());
}
}
- s_IPhreeqc.m_bSelectedOutputOn = (selected_output_on != 0);
+ this->SelectedOutputOn = (selected_output_on != 0);
/*
* call pre-run callback
@@ -713,63 +361,63 @@ do_run(const char* sz_routine, std::istream* pis, FILE* fp, int output_on, int e
{
if (fp)
{
- set_read_callback(getc_callback, fp, FALSE);
+ this->set_read_callback(getc_callback, fp, FALSE);
}
else
{
- std::auto_ptr a_iss(new std::istringstream(GetAccumulatedLines()));
+ std::auto_ptr a_iss(new std::istringstream(this->GetAccumulatedLines()));
auto_iss = a_iss;
- set_read_callback(istream_getc, auto_iss.get(), FALSE);
+ this->set_read_callback(istream_getc, auto_iss.get(), FALSE);
}
}
else
{
- set_read_callback(istream_getc, pis, FALSE);
+ this->set_read_callback(istream_getc, pis, FALSE);
}
/*
* Read input data for simulation
*/
- for (simulation = 1; ; simulation++) {
+ for (this->simulation = 1; ; this->simulation++) {
#ifdef PHREEQ98
AddSeries = !connect_simulations;
#endif
- sprintf(token, "Reading input data for simulation %d.", simulation);
+ ::sprintf(token, "Reading input data for simulation %d.", simulation);
- output_msg(OUTPUT_GUI_ERROR, "\nSimulation %d\n", simulation);
+ this->output_msg(OUTPUT_GUI_ERROR, "\nSimulation %d\n", simulation);
#ifdef SWIG_SHARED_OBJ
- int save_punch_in = punch.in;
+ int save_punch_in = this->punch.in;
#endif // SWIG_SHARED_OBJ
- dup_print(token, TRUE);
- if (read_input() == EOF) break;
+// COMMENT: {3/3/2010 10:46:12 PM} dup_print(token, TRUE);
+ if (this->read_input() == EOF) break;
#ifdef SWIG_SHARED_OBJ
- if (simulation > 1 && save_punch_in == TRUE && punch.new_def == TRUE)
+ if (this->simulation > 1 && save_punch_in == TRUE && this->punch.new_def == TRUE)
{
std::ostringstream oss;
oss << sz_routine << ": Warning SELECTED_OUTPUT has been redefined.\n";
- warning_msg(oss.str().c_str());
+ this->warning_msg(oss.str().c_str());
}
- if (simulation > 1 && keyword[39].keycount > 0)
+ if (this->simulation > 1 && this->keyword[39].keycount > 0)
{
std::ostringstream oss;
oss << sz_routine << ": Warning USER_PUNCH has been redefined.\n";
- warning_msg(oss.str().c_str());
+ this->warning_msg(oss.str().c_str());
}
#endif // SWIG_SHARED_OBJ
- if (title_x != NULL) {
- sprintf(token, "TITLE");
- dup_print(token, TRUE);
- if (pr.headings == TRUE) output_msg(OUTPUT_MESSAGE,"%s\n\n", title_x);
+ if (this->title_x != NULL) {
+ ::sprintf(token, "TITLE");
+ this->dup_print(token, TRUE);
+ if (this->pr.headings == TRUE) this->output_msg(OUTPUT_MESSAGE, "%s\n\n", this->title_x);
}
#ifdef SWIG_SHARED_OBJ
- if (punch.in == TRUE)
+ if (this->punch.in == TRUE)
{
//
// (punch.in == TRUE) when any "RUN" has contained
@@ -787,9 +435,9 @@ do_run(const char* sz_routine, std::istream* pis, FILE* fp, int output_on, int e
// TRUE ???
//
//
- if (!selected_output_on) ASSERT(!::output_isopen(OUTPUT_PUNCH));
+ if (!selected_output_on) ASSERT(!this->output_isopen(OUTPUT_PUNCH));
- if (pr.punch == FALSE)
+ if (this->pr.punch == FALSE)
{
// No selected_output for this simulation
// this happens when
@@ -799,34 +447,34 @@ do_run(const char* sz_routine, std::istream* pis, FILE* fp, int output_on, int e
}
else
{
- if (punch.new_def == FALSE)
+ if (this->punch.new_def == FALSE)
{
- if (selected_output_on && !::output_isopen(OUTPUT_PUNCH))
+ if (selected_output_on && !this->output_isopen(OUTPUT_PUNCH))
{
//
// LoadDatabase
// do_run -- containing SELECTED_OUTPUT ****TODO**** check -file option
// another do_run without SELECTED_OUTPUT
//
- std::string filename = s_IPhreeqc.m_sPunchFileName;
- output_open(OUTPUT_PUNCH, filename.c_str());
- if (!::output_isopen(OUTPUT_PUNCH))
+ std::string filename = this->PunchFileName;
+ this->output_open(OUTPUT_PUNCH, filename.c_str());
+ if (!this->output_isopen(OUTPUT_PUNCH))
{
std::ostringstream oss;
oss << sz_routine << ": Unable to open:" << "\"" << filename << "\".\n";
- warning_msg(oss.str().c_str());
+ this->warning_msg(oss.str().c_str());
}
else
{
// output selected_output headings
- punch.new_def = TRUE;
- tidy_punch();
+ this->punch.new_def = TRUE;
+ this->tidy_punch();
}
}
}
else
{
- if (selected_output_on && !::output_isopen(OUTPUT_PUNCH))
+ if (selected_output_on && !this->output_isopen(OUTPUT_PUNCH))
{
// This is a special case which could not occur in
// phreeqc
@@ -836,34 +484,34 @@ do_run(const char* sz_routine, std::istream* pis, FILE* fp, int output_on, int e
// another do_run with SELECTED_OUTPUT
//
std::string filename = PUNCH_FILENAME;
- if (s_IPhreeqc.m_sPunchFileName && ::strlen(s_IPhreeqc.m_sPunchFileName))
+ if (this->PunchFileName.size())
{
- filename = s_IPhreeqc.m_sPunchFileName;
+ filename = this->PunchFileName;
}
- output_open(OUTPUT_PUNCH, filename.c_str());
- if (!::output_isopen(OUTPUT_PUNCH))
+ this->output_open(OUTPUT_PUNCH, filename.c_str());
+ if (!this->output_isopen(OUTPUT_PUNCH))
{
std::ostringstream oss;
oss << sz_routine << ": Unable to open:" << "\"" << filename << "\".\n";
- warning_msg(oss.str().c_str());
+ this->warning_msg(oss.str().c_str());
}
else
{
// output selected_output headings
ASSERT(punch.new_def == TRUE);
- tidy_punch();
+ this->tidy_punch();
}
}
}
}
}
- if (!selected_output_on) ASSERT(!::output_isopen(OUTPUT_PUNCH));
+ if (!selected_output_on) ASSERT(!this->output_isopen(OUTPUT_PUNCH));
/* the converse is not necessarily true */
- n_user_punch_index = -1;
+ this->n_user_punch_index = -1;
#endif // SWIG_SHARED_OBJ
- tidy_model();
+ this->tidy_model();
#ifdef PHREEQC_CPP
//test_classes();
#endif
@@ -875,69 +523,69 @@ do_run(const char* sz_routine, std::istream* pis, FILE* fp, int output_on, int e
/*
* Calculate distribution of species for initial solutions
*/
- if (new_solution) initial_solutions(TRUE);
+ if (this->new_solution) this->initial_solutions(TRUE);
/*
* Calculate distribution for exchangers
*/
- if (new_exchange) initial_exchangers(TRUE);
+ if (this->new_exchange) this->initial_exchangers(TRUE);
/*
* Calculate distribution for surfaces
*/
- if (new_surface) initial_surfaces(TRUE);
+ if (this->new_surface) this->initial_surfaces(TRUE);
/*
* Calculate initial gas composition
*/
- if (new_gas_phase) initial_gas_phases(TRUE);
+ if (this->new_gas_phase) this->initial_gas_phases(TRUE);
/*
* Calculate reactions
*/
- reactions();
+ this->reactions();
/*
* Calculate inverse models
*/
- inverse_models();
+ this->inverse_models();
/*
* Calculate advection
*/
- if (use.advect_in == TRUE) {
- dup_print ("Beginning of advection calculations.", TRUE);
- advection();
+ if (this->use.advect_in == TRUE) {
+ this->dup_print ("Beginning of advection calculations.", TRUE);
+ this->advection();
}
/*
* Calculate transport
*/
- if (use.trans_in == TRUE) {
- dup_print ("Beginning of transport calculations.", TRUE);
- transport();
+ if (this->use.trans_in == TRUE) {
+ this->dup_print ("Beginning of transport calculations.", TRUE);
+ this->transport();
}
#ifdef PHREEQC_CPP
/*
* run
*/
- run_as_cells();
+ this->run_as_cells();
#endif
/*
* Copy
*/
- if (new_copy) copy_entities();
+ if (this->new_copy) this->copy_entities();
#ifdef PHREEQC_CPP
/*
* dump
*/
- dump_entities();
+ this->dump_entities();
/*
* delete
*/
- delete_entities();
+ this->delete_entities();
#endif
/*
* End of simulation
*/
- dup_print( "End of simulation.", TRUE);
+ this->dup_print( "End of simulation.", TRUE);
#ifdef PHREEQ98
} /* if (!phreeq98_debug) */
#endif
@@ -946,7 +594,7 @@ do_run(const char* sz_routine, std::istream* pis, FILE* fp, int output_on, int e
/*
* Display successful status
*/
- do_status();
+ this->do_status();
/*
* call post-run callback
@@ -956,12 +604,951 @@ do_run(const char* sz_routine, std::istream* pis, FILE* fp, int output_on, int e
pfn_post(cookie);
}
- if (input_error > 0)
+ if (this->input_error > 0)
{
std::ostringstream oss;
oss << "\n";
- oss << s_string_input.c_str();
+ oss << this->StringInput.c_str();
oss << "\n";
- error_msg(oss.str().c_str(), CONTINUE);
+ this->error_msg(oss.str().c_str(), CONTINUE);
}
}
+
+
+
+int istream_getc(void *cookie)
+{
+ if (cookie)
+ {
+ std::istream* is = (std::istream*)cookie;
+ return is->get();
+ }
+ return EOF;
+}
+
+int IPhreeqc::handler(const int action, const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args)
+{
+ int n = OK;
+ IPhreeqc *pThis = (IPhreeqc*)cookie;
+ switch (action)
+ {
+ case ACTION_OPEN:
+ n = pThis->open_handler(type, err_str);
+ break;
+
+ case ACTION_OUTPUT:
+ n = pThis->output_handler(type, err_str, stop, cookie, format, args);
+ break;
+
+ default:
+ n = pThis->module_handler(action, type, err_str, stop, cookie, format, args);
+ break;
+ }
+
+ if (stop == STOP)
+ {
+ throw PhreeqcStop();
+ }
+ return n;
+}
+
+int IPhreeqc::output_handler(const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args)
+{
+ IPhreeqc* pIPhreeqc = (IPhreeqc*) cookie;
+
+ switch (type)
+ {
+ case OUTPUT_ERROR:
+ if (pIPhreeqc && pIPhreeqc->ErrorReporter)
+ {
+ std::ostringstream oss;
+ oss << "ERROR: " << err_str << "\n";
+ if (stop == STOP)
+ {
+ oss << "Stopping.\n";
+ }
+ pIPhreeqc->AddError(oss.str().c_str());
+ }
+ break;
+
+ case OUTPUT_PUNCH:
+ this->AddSelectedOutput(err_str, format, args);
+ break;
+
+ }
+ return module_handler(ACTION_OUTPUT, type, err_str, stop, cookie, format, args);
+}
+
+int IPhreeqc::open_handler(const int type, const char *file_name)
+{
+ int n = OK;
+ switch (type)
+ {
+ case OUTPUT_PUNCH:
+ if (file_name)
+ {
+ if (this->PunchFileName.compare(file_name) != 0)
+ {
+ this->PunchFileName = file_name;
+ }
+ }
+ if (this->SelectedOutputOn)
+ {
+ n = module_handler(ACTION_OPEN, type, file_name, CONTINUE, this, NULL, NULL);
+ }
+ break;
+ default:
+ n = module_handler(ACTION_OPEN, type, file_name, CONTINUE, this, NULL, NULL);
+ break;
+ }
+ return n;
+}
+
+void IPhreeqc::Init(void)
+{
+ int i;
+
+ moles_per_kilogram_string = 0;
+ pe_string = 0;
+
+ debug_model = FALSE;
+ debug_prep = FALSE;
+ debug_set = FALSE;
+ debug_diffuse_layer = FALSE;
+ debug_inverse = FALSE;
+ itmax = 100;
+#ifdef USE_LONG_DOUBLE
+ /* from float.h, sets tolerance for cl1 routine */
+ ineq_tol = pow((long double) 10, (long double) -LDBL_DIG);
+#else
+ ineq_tol = pow((double) 10, (double) -DBL_DIG);
+#endif
+ convergence_tolerance = 1e-8;
+#ifdef USE_LONG_DOUBLE
+ /* from float.h, sets tolerance for cl1 routine */
+ inv_tol_default = pow((long double) 10, (long double) -LDBL_DIG + 5);
+#else
+ inv_tol_default = pow((double) 10, (double) -DBL_DIG + 5);
+#endif
+ step_size = 100.;
+ pe_step_size = 10.;
+ pp_scale = 1.0;
+ pp_column_scale = 1.0;
+ diagonal_scale = FALSE;
+ censor = 0.0;
+ mass_water_switch = FALSE;
+ delay_mass_water = FALSE;
+ incremental_reactions = FALSE;
+ aqueous_only = 0;
+ negative_concentrations = FALSE;
+
+ LOG_10 = log(10.0);
+
+ max_solution = MAX_SOLUTION;
+ max_pp_assemblage = MAX_PP_ASSEMBLAGE;
+ max_exchange = MAX_PP_ASSEMBLAGE;
+ max_surface = MAX_PP_ASSEMBLAGE;
+ max_gas_phase = MAX_PP_ASSEMBLAGE;
+ max_kinetics = MAX_PP_ASSEMBLAGE;
+ max_s_s_assemblage = MAX_PP_ASSEMBLAGE;
+
+ max_elements = MAX_ELEMENTS;
+ max_elts = MAX_ELTS;
+ max_line = MAX_LINE;
+ max_master = MAX_MASTER;
+ max_mb_unknowns = MAX_TRXN;
+ max_phases = MAX_PHASES;
+ max_s = MAX_S;
+ max_strings = MAX_STRINGS;
+ max_trxn = MAX_TRXN;
+ max_logk = MAX_S;
+ max_master_isotope = MAX_ELTS;
+
+ count_solution = 0;
+ count_pp_assemblage = 0;
+ count_exchange = 0;
+ count_surface = 0;
+ count_gas_phase = 0;
+ count_kinetics = 0;
+ count_s_s_assemblage = 0;
+
+ count_elements = 0;
+ count_irrev = 0;
+ count_master = 0;
+ count_mix = 0;
+ count_phases = 0;
+ count_s = 0;
+ count_temperature = 0;
+ count_logk = 0;
+ count_master_isotope = 0;
+/*
+ * Initialize advection
+ */
+ count_ad_cells = 1;
+ count_ad_shifts = 1;
+ print_ad_modulus = 1;
+ punch_ad_modulus = 1;
+
+ advection_punch = 0;
+ advection_kin_time = 0.0;
+ advection_kin_time_defined = FALSE;
+ advection_print = 0;
+ advection_warnings = TRUE;
+/*
+ * Initialize transport
+ */
+ count_cells = 1;
+ count_shifts = 1;
+ ishift = 1;
+ bcon_first = bcon_last = 3;
+ diffc = 0.3e-9;
+ simul_tr = 0;
+ tempr = 2.0;
+ heat_diffc = -0.1;
+ timest = 0.0;
+ multi_Dflag = FALSE;
+ interlayer_Dflag = FALSE;
+ interlayer_tortf = 100.0;
+ interlayer_Dpor = 0.1;
+/* !!!! count_stag = 0; */
+ mcd_substeps = 1.0;
+ print_modulus = 1;
+ punch_modulus = 1;
+ dump_modulus = 0;
+ dump_in = FALSE;
+ transport_warnings = TRUE;
+
+ pp_assemblage = 0;
+ exchange = 0;
+ surface = 0;
+ gas_phase = 0;
+ kinetics = 0;
+ s_s_assemblage = 0;
+ cell_data = 0;
+ elements = 0;
+ elt_list = 0;
+
+
+ inverse = 0;
+ count_inverse = 0;
+
+ irrev = 0;
+
+ line = 0;
+ line_save = 0;
+
+ master = 0;
+
+ mb_unknowns = 0;
+
+ mix = 0;
+ count_mix = 0;
+/* !!!! */
+ stag_data = 0;
+
+ phases = 0;
+
+ trxn.token = 0;
+
+ s = 0;
+
+ logk = 0;
+
+ master_isotope = 0;
+
+ solution = 0;
+
+ temperature = 0;
+
+ title_x = NULL;
+ pe_x = NULL;
+ description_x = NULL;
+ units_x = NULL;
+ s_x = NULL;
+
+ sum_mb1 = NULL;
+ sum_mb2 = NULL;
+ sum_jacob0 = NULL;
+ sum_jacob1 = NULL;
+ sum_jacob2 = NULL;
+ sum_delta = NULL;
+
+ isotopes_x = 0;
+
+ x = NULL;
+ max_unknowns = 0;
+
+ array = NULL;
+ delta = NULL;
+ residual = NULL;
+ s_h2o = NULL;
+ s_hplus = NULL;
+ s_h3oplus = NULL;
+ s_eminus = NULL;
+ s_co3 = NULL;
+ s_h2 = NULL;
+ s_o2 = NULL;
+
+ logk_hash_table = 0;
+ master_isotope_hash_table = 0;
+ strings_hash_table = 0;
+ elements_hash_table = 0;
+ species_hash_table = 0;
+ phases_hash_table = 0;
+ keyword_hash_table = 0;
+/*
+ * Initialize use pointers
+ */
+ use.solution_in = FALSE;
+ use.pp_assemblage_in = FALSE;
+ use.mix_in = FALSE;
+ use.irrev_in = FALSE;
+/*
+ * Initialize punch
+ */
+ punch.in = FALSE;
+ punch.count_totals = 0;
+ punch.totals = 0;
+ punch.count_molalities = 0;
+
+ punch.molalities = 0;
+ punch.count_activities = 0;
+
+ punch.activities = 0;
+ punch.count_pure_phases = 0;
+
+ punch.pure_phases = 0;
+ punch.count_si = 0;
+
+ punch.si = 0;
+ punch.count_gases = 0;
+
+ punch.gases = 0;
+ punch.count_s_s = 0;
+ punch.s_s = 0;
+
+ punch.count_kinetics = 0;
+ punch.kinetics = 0;
+
+ punch.count_isotopes = 0;
+ punch.isotopes = 0;
+
+ punch.count_calculate_values = 0;
+ punch.calculate_values = 0;
+
+ count_save_values = 0;
+ save_values = 0;
+
+
+ punch.inverse = TRUE;
+
+ punch.sim = TRUE;
+ punch.state = TRUE;
+ punch.soln = TRUE;
+ punch.dist = TRUE;
+ punch.time = TRUE;
+ punch.step = TRUE;
+ punch.rxn = FALSE;
+ punch.temp = FALSE;
+ punch.ph = TRUE;
+ punch.pe = TRUE;
+ punch.alk = FALSE;
+ punch.mu = FALSE;
+ punch.water = FALSE;
+ punch.high_precision = FALSE;
+ punch.user_punch = TRUE;
+ punch.charge_balance = FALSE;
+ punch.percent_error = FALSE;
+/*
+ * last model
+ */
+ last_model.exchange = NULL;
+ last_model.gas_phase = NULL;
+ last_model.s_s_assemblage = NULL;
+ last_model.kinetics = NULL;
+ last_model.pp_assemblage = NULL;
+ last_model.add_formula = NULL;
+ last_model.si = NULL;
+ last_model.surface_comp = NULL;
+ last_model.surface_charge = NULL;
+/*
+ * Update hash table
+ */
+ keyword_hash = 0;
+/*
+ * rates
+ */
+ rates = 0;
+ count_rates = 0;
+ initial_total_time = 0;
+ rate_m = 0;
+ rate_m0 = 0;
+ rate_p = NULL;
+ rate_time = 0;
+ rate_sim_time_start = 0;
+ rate_sim_time_end = 0;
+ rate_sim_time = 0;
+ rate_moles = 0;
+ initial_total_time = 0;
+
+/*
+ * user_print, user_punch
+ */
+ user_print = 0;
+ user_punch = 0;
+ user_punch_headings = 0;
+ user_punch_count_headings = 0;
+#ifdef PHREEQ98
+/*
+ * user_graph
+ */
+ user_graph = 0;
+ user_graph_headings = 0
+ user_graph_count_headings = 0;
+#endif
+ /*
+ Initialize llnl aqueous model parameters
+ */
+ llnl_temp = 0;
+ llnl_count_temp = 0;
+
+ llnl_adh = 0;
+ llnl_count_adh = 0;
+
+ llnl_bdh = 0;
+ llnl_count_bdh = 0;
+
+ llnl_bdot = 0;
+ llnl_count_bdot = 0;
+
+ llnl_co2_coefs = 0;
+ llnl_count_co2_coefs = 0;
+/*
+ *
+ */
+ command_hash_table = 0;
+
+ change_surf = 0;
+ change_surf_count = 0;
+
+
+#if defined(WINDOWS) || defined(_WINDOWS)
+ /* SRC pr.status = FALSE; */
+#endif
+ /* Initialize print here, not in global.h */
+ pr.all = TRUE;
+ pr.initial_solutions = TRUE;
+ pr.initial_exchangers = TRUE;
+ pr.reactions = TRUE;
+ pr.gas_phase = TRUE;
+ pr.s_s_assemblage = TRUE;
+ pr.pp_assemblage = TRUE;
+ pr.surface = TRUE;
+ pr.exchange = TRUE;
+ pr.kinetics = TRUE;
+ pr.totals = TRUE;
+ pr.eh = TRUE;
+ pr.species = TRUE;
+ pr.saturation_indices = TRUE;
+ pr.irrev = TRUE;
+ pr.mix = TRUE;
+ pr.reaction = TRUE;
+ pr.use = TRUE;
+ pr.logfile = FALSE;
+ pr.punch = TRUE;
+ if (phast == TRUE)
+ {
+ pr.status = FALSE;
+ }
+ else
+ {
+ pr.status = TRUE;
+ }
+ pr.inverse = TRUE;
+ pr.dump = TRUE;
+ pr.user_print = TRUE;
+ pr.headings = TRUE;
+ pr.user_graph = TRUE;
+ pr.echo_input = TRUE;
+ count_warnings = 0;
+ pr.warnings = 100;
+ pr.initial_isotopes = TRUE;
+ pr.isotope_ratios = TRUE;
+ pr.isotope_alphas = TRUE;
+ pr.hdf = FALSE;
+ pr.alkalinity = FALSE;
+
+ species_list = NULL;
+
+ user_database = NULL;
+ first_read_input = TRUE;
+ have_punch_name = FALSE;
+ selected_output_file_name = NULL;
+ dump_file_name = NULL;
+
+ /* calculate_value */
+ max_calculate_value = MAX_ELTS;
+ count_calculate_value = 0;
+
+ calculate_value = 0;
+ calculate_value_hash_table = 0;
+
+ /* isotope_ratio */
+ max_isotope_ratio = MAX_ELTS;
+ count_isotope_ratio = 0;
+ isotope_ratio = 0;
+ isotope_ratio_hash_table = 0;
+
+ /* isotope_value */
+ max_isotope_alpha = MAX_ELTS;
+ count_isotope_alpha = 0;
+ isotope_alpha = 0;
+ isotope_alpha_hash_table = 0;
+
+ phreeqc_mpi_myself = 0;
+
+ copy_solution.n_user = copy_solution.start = copy_solution.end = 0;
+ copy_pp_assemblage.n_user = copy_pp_assemblage.start = copy_pp_assemblage.end = 0;
+ copy_exchange.n_user = copy_exchange.start = copy_exchange.end = 0;
+ copy_surface.n_user = copy_surface.start = copy_surface.end = 0;
+ copy_s_s_assemblage.n_user = copy_s_s_assemblage.start = copy_s_s_assemblage.end = 0;
+ copy_gas_phase.n_user = copy_gas_phase.start = copy_gas_phase.end = 0;
+ copy_kinetics.n_user = copy_kinetics.start = copy_kinetics.end = 0;
+ copy_mix.n_user = copy_mix.start = copy_mix.end = 0;
+ copy_irrev.n_user = copy_irrev.start = copy_irrev.end = 0;
+ copy_temperature.n_user = copy_temperature.start = copy_temperature.end = 0;
+
+ set_forward_output_to_log(FALSE);
+ simulation = 0;
+ /*
+ * cvode
+ */
+
+ cvode_init();
+ /*
+ * Pitzer
+ */
+ pitzer_model = FALSE;
+ max_pitz_param = 100;
+ count_pitz_param = 0;
+ use_etheta = TRUE;
+ pitz_params = 0;
+
+ max_theta_param = 100;
+ count_theta_param = 0;
+ theta_params = 0;
+
+ ICON = TRUE;
+ OTEMP = 0.0;
+ for (i = 0; i < 23; i++)
+ {
+ BK[i] = 0.0;
+ DK[i] = 0.0;
+ }
+ pitzer_pe = FALSE;
+
+
+ /*
+ * SIT
+ */
+ sit_model = FALSE;
+ max_sit_param = 100;
+ count_sit_param = 0;
+ sit_params = 0;
+
+ /*
+ * to facilitate debuging
+ */
+ dbg_use = &use;
+ dbg_solution = solution;
+ dbg_exchange = exchange;
+ dbg_surface = surface;
+ dbg_pp_assemblage = pp_assemblage;
+ dbg_kinetics = kinetics;
+ dbg_irrev = irrev;
+ dbg_mix = mix;
+ dbg_master = master;
+ calculating_deriv = FALSE;
+ numerical_deriv = FALSE;
+
+ zeros = 0;
+ zeros_max = 1;
+
+ cell_pore_volume = 0;
+ cell_volume = 0;
+ cell_porosity = 0;
+ cell_saturation = 0;
+
+ charge_group = NULL;
+ print_density = 0;
+
+ return;
+}
+
+void IPhreeqc::AddSelectedOutput(const char* name, const char* format, va_list argptr)
+{
+ int bInt;
+ int bDouble;
+ int bString;
+
+ int state;
+ int bLongDouble;
+ char ch;
+
+
+ /* state values
+ 0 Haven't found start(%)
+ 1 Just read start(%)
+ 2 Just read Flags(-0+ #) (zero or more)
+ 3 Just read Width
+ 4 Just read Precision start (.)
+ 5 Just read Size modifier
+ 6 Just read Type
+ */
+
+ if (name == NULL) {
+ return;
+ }
+
+ bDouble = 0;
+ bInt = 0;
+ bString = 0;
+
+ bLongDouble = 0;
+
+ state = 0;
+ ch = *format++;
+ while (ch != '\0')
+ {
+ switch (state)
+ {
+ case 0: /* looking for Start specification (%) */
+ switch (ch)
+ {
+ case '%':
+ state = 1;
+ break;
+ default:
+ break;
+ }
+ ch = *format++;
+ break;
+ case 1: /* reading Flags (zero or more(-,+,0,# or space)) */
+ switch (ch)
+ {
+ case '-': case '0': case '+': case ' ': case '#':
+ ch = *format++;
+ break;
+ default:
+ state = 2;
+ break;
+ }
+ break;
+ case 2: /* reading Minimum field width (decimal integer constant) */
+ switch (ch)
+ {
+ case '.':
+ state = 3;
+ ch = *format++;
+ break;
+ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
+ ch = *format++;
+ break;
+ default:
+ state = 4;
+ break;
+ }
+ break;
+ case 3: /* reading Precision specification (period already read) */
+ switch (ch)
+ {
+ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
+ ch = *format++;
+ break;
+ default:
+ state = 4;
+ break;
+ }
+ break;
+ case 4: /* reading Size modifier */
+ switch (ch)
+ {
+ case 'l':
+ ch = *format++;
+ break;
+ case 'L':
+ bLongDouble = 1;
+ ch = *format++;
+ break;
+ case 'h':
+ ch = *format++;
+ break;
+ }
+ state = 5;
+ break;
+ case 5: /* reading Conversion letter */
+ switch (ch)
+ {
+ case 'c':
+ break;
+ case 'd':
+ case 'i':
+ bInt = 1;
+ break;
+ case 'n':
+ case 'o':
+ case 'p':
+ break;
+ case 's':
+ bString = 1;
+ break;
+ case 'u':
+ case 'x':
+ case 'X':
+ case '%':
+ break;
+ case 'f':
+ case 'e':
+ case 'E':
+ case 'g':
+ case 'G':
+ bDouble = 1;
+ break;
+ default:
+ ASSERT(false);
+ break;
+ }
+ ch = '\0'; /* done */
+ break;
+ }
+ }
+
+ if (bDouble)
+ {
+ double valDouble;
+
+ if (bLongDouble)
+ {
+ valDouble = (double)va_arg(argptr, long double);
+ }
+ else
+ {
+ valDouble = va_arg(argptr, double);
+ }
+
+ this->SelectedOutput->PushBackDouble(name, valDouble);
+ }
+ else if (bInt)
+ {
+ int valInt;
+ valInt = va_arg(argptr, int);
+
+ this->SelectedOutput->PushBackLong(name, (long)valInt);
+ }
+ else if (bString)
+ {
+ char* valString;
+ valString = (char *)va_arg(argptr, char *);
+
+ this->SelectedOutput->PushBackString(name, valString);
+ }
+ else
+ {
+ ASSERT(false);
+ this->SelectedOutput->PushBackEmpty(name);
+ }
+}
+
+VRESULT IPhreeqc::AccumulateLine(const char *line)
+{
+ try
+ {
+ this->ErrorReporter->Clear();
+ this->StringInput.append(line);
+ this->StringInput.append("\n");
+ return VR_OK;
+ }
+ catch (...)
+ {
+ this->AddError("AccumulateLine: An unhandled exception occured.\n");
+ }
+ return VR_OUTOFMEMORY;
+}
+
+int IPhreeqc::Run(int output_on, int error_on, int log_on, int selected_output_on)
+{
+ static const char *sz_routine = "Run";
+ try
+ {
+ // this may throw
+ this->check_database(sz_routine);
+
+ this->input_error = 0;
+
+ // create input stream
+ std::istringstream iss(this->GetAccumulatedLines());
+
+ // this may throw
+ this->do_run(sz_routine, &iss, NULL, output_on, error_on, log_on, selected_output_on, NULL, NULL, NULL);
+ }
+ catch (PhreeqcStop)
+ {
+ // do nothing
+ }
+ catch(...)
+ {
+ const char *errmsg = "Run: An unhandled exception occured.\n";
+ try
+ {
+ this->error_msg(errmsg, STOP); // throws PhreeqcStop
+ }
+ catch (PhreeqcStop)
+ {
+ // do nothing
+ }
+ }
+
+ this->ClearAccumulatedLines();
+ this->close_output_files();
+ return this->input_error;
+}
+
+int IPhreeqc::RunFile(const char* filename, int output_on, int error_on, int log_on, int selected_output_on)
+{
+ static const char *sz_routine = "RunFile";
+ try
+ {
+ // this may throw
+ this->check_database(sz_routine);
+
+ this->input_error = 0;
+
+#if 0
+ // create input stream
+ std::ifstream ifs;
+ ifs.open(filename);
+ if (!ifs.is_open())
+ {
+ std::ostringstream oss;
+ oss << "RunFile: Unable to open:" << "\"" << filename << "\".";
+ this->error_msg(oss.str().c_str(), STOP); // throws
+ }
+
+ // this may throw
+ this->do_run(sz_routine, &ifs, NULL, output_on, error_on, log_on, selected_output_on, NULL, NULL, NULL);
+#else
+ // open file
+ //
+ FILE* f = ::fopen(filename, "r");
+ if (!f)
+ {
+ std::ostringstream oss;
+ oss << "RunFile: Unable to open:" << "\"" << filename << "\".";
+ this->error_msg(oss.str().c_str(), STOP); // throws PhreeqcStop
+ }
+
+ // this may throw
+ this->do_run(sz_routine, NULL, f, output_on, error_on, log_on, selected_output_on, NULL, NULL, NULL);
+#endif
+ }
+ catch (PhreeqcStop)
+ {
+ // do nothing
+ }
+ catch(...)
+ {
+ const char *errmsg = "RunFile: An unhandled exception occured.\n";
+ try
+ {
+ this->error_msg(errmsg, STOP); // throws PhreeqcStop
+ }
+ catch (PhreeqcStop)
+ {
+ // do nothing
+ }
+ }
+
+ this->close_output_files();
+ return this->input_error;
+}
+
+int IPhreeqc::RunString(const char* input, int output_on, int error_on, int log_on, int selected_output_on)
+{
+ static const char *sz_routine = "RunString";
+ try
+ {
+ // this may throw
+ this->check_database(sz_routine);
+
+ this->input_error = 0;
+
+ // create input stream
+ std::string s(input);
+ std::istringstream iss(s);
+
+ // this may throw
+ this->do_run(sz_routine, &iss, NULL, output_on, error_on, log_on, selected_output_on, NULL, NULL, NULL);
+ }
+ catch (PhreeqcStop)
+ {
+ // do nothing
+ }
+ catch(...)
+ {
+ const char *errmsg = "RunString: An unhandled exception occured.\n";
+ try
+ {
+ this->error_msg(errmsg, STOP); // throws PhreeqcStop
+ }
+ catch (PhreeqcStop)
+ {
+ // do nothing
+ }
+ }
+
+ this->close_output_files();
+ return this->input_error;
+}
+
+int IPhreeqc::GetSelectedOutputRowCount(void)const
+{
+ return (int)this->SelectedOutput->GetRowCount();
+}
+
+int IPhreeqc::GetSelectedOutputColumnCount(void)const
+{
+ return (int)this->SelectedOutput->GetColCount();
+}
+
+VRESULT IPhreeqc::GetSelectedOutputValue(int row, int col, VAR* pVAR)
+{
+ this->ErrorReporter->Clear();
+ if (!pVAR)
+ {
+ this->AddError("GetSelectedOutputValue: VR_INVALIDARG pVar is NULL.\n");
+ return VR_INVALIDARG;
+ }
+
+ VRESULT v = this->SelectedOutput->Get(row, col, pVAR);
+ switch (v)
+ {
+ case VR_OK:
+ break;
+ case VR_OUTOFMEMORY:
+ this->AddError("GetSelectedOutputValue: VR_OUTOFMEMORY Out of memory.\n");
+ break;
+ case VR_BADVARTYPE:
+ this->AddError("GetSelectedOutputValue: VR_BADVARTYPE pVar must be initialized(VarInit) and/or cleared(VarClear).\n");
+ break;
+ case VR_INVALIDARG:
+ // not possible
+ break;
+ case VR_INVALIDROW:
+ this->AddError("GetSelectedOutputValue: VR_INVALIDROW Row index out of range.\n");
+ break;
+ case VR_INVALIDCOL:
+ this->AddError("GetSelectedOutputValue: VR_INVALIDCOL Column index out of range.\n");
+ break;
+ }
+ return v;
+}
diff --git a/src/IPhreeqc.hpp b/src/IPhreeqc.hpp
new file mode 100644
index 00000000..cda13c11
--- /dev/null
+++ b/src/IPhreeqc.hpp
@@ -0,0 +1,87 @@
+#ifndef _INC_IPHREEQC_HPP
+#define _INC_IPHREEQC_HPP
+
+#include "Phreeqc.h" /* Phreeqc */
+#include "IPhreeqcCallbacks.h" /* PFN_PRERUN_CALLBACK, PFN_POSTRUN_CALLBACK, PFN_CATCH_CALLBACK */
+#include "Var.h" /* VRESULT */
+#include "SelectedOutput.hxx"
+
+
+class IErrorReporter;
+
+struct PhreeqcStop{};
+
+class IPhreeqc : public Phreeqc
+{
+public:
+ IPhreeqc(void);
+ ~IPhreeqc(void);
+
+public:
+ int LoadDatabase(const char* filename);
+ int LoadDatabaseString(const char* input);
+
+ void UnLoadDatabase(void);
+
+ void OutputLastError(void);
+ const char* GetLastErrorString(void);
+
+ VRESULT AccumulateLine(const char *line);
+
+ int Run(int output_on, int error_on, int log_on, int selected_output_on);
+ int RunFile(const char* filename, int output_on, int error_on, int log_on, int selected_output_on);
+ int RunString(const char* input, int output_on, int error_on, int log_on, int selected_output_on);
+
+ int GetSelectedOutputRowCount(void)const;
+ int GetSelectedOutputColumnCount(void)const;
+ VRESULT GetSelectedOutputValue(int row, int col, VAR* pVAR);
+
+ void OutputLines(void);
+
+ size_t AddError(const char* error_msg);
+
+ const std::string& GetAccumulatedLines(void);
+ void ClearAccumulatedLines(void);
+
+ // Singleton for library
+ static IPhreeqc* LibraryInstance();
+
+ // Callbacks
+ //
+
+ // IPhreeqc.cpp
+ static int handler(const int action, const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args);
+ int output_handler(const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args);
+ int open_handler(const int type, const char *file_name/*, void *cookie*/);
+
+ // module_files.c
+ static int module_handler(const int action, const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args);
+ int module_isopen_handler(const int type);
+ int module_open_handler(const int type, const char *file_name);
+
+ // module_output.c
+ int output_isopen(const int type);
+
+ virtual int EndRow(void);
+ void AddSelectedOutput(const char* name, const char* format, va_list argptr);
+
+ void check_database(const char* sz_routine);
+ void do_run(const char* sz_routine, std::istream* pis, FILE* fp, int output_on, int error_on, int log_on, int selected_output_on, PFN_PRERUN_CALLBACK pfn_pre, PFN_POSTRUN_CALLBACK pfn_post, void *cookie);
+
+protected:
+ void Init(void);
+
+protected:
+ // Data
+ IErrorReporter *ErrorReporter;
+ CSelectedOutput *SelectedOutput;
+ std::string PunchFileName;
+ bool DatabaseLoaded;
+ bool SelectedOutputOn;
+ std::string StringInput;
+
+private:
+ static IPhreeqc* Instance;
+};
+
+#endif /* _INC_IPHREEQC_HPP */
diff --git a/src/PhreeqcParser.hxx b/src/PhreeqcParser.hxx
deleted file mode 100644
index 6984be5c..00000000
--- a/src/PhreeqcParser.hxx
+++ /dev/null
@@ -1,35 +0,0 @@
-#if !defined(__PHREEQC_PARSER_HXX_INC)
-#define __PHREEQC_PARSER_HXX_INC
-
-
-// COMMENT: {11/10/2004 10:35:56 PM}#include
-// COMMENT: {11/10/2004 10:35:56 PM}//#include
-// COMMENT: {11/10/2004 10:35:56 PM}
-// COMMENT: {11/10/2004 10:35:56 PM}
-// COMMENT: {11/10/2004 10:35:56 PM}struct PhreeqcStop{};
-// COMMENT: {11/10/2004 10:35:56 PM}
-// COMMENT: {11/10/2004 10:35:56 PM}
-// COMMENT: {11/10/2004 10:35:56 PM}class CPhreeqcParser
-// COMMENT: {11/10/2004 10:35:56 PM}{
-// COMMENT: {11/10/2004 10:35:56 PM}public:
-// COMMENT: {11/10/2004 10:35:56 PM} CPhreeqcParser(std::istream& input);
-// COMMENT: {11/10/2004 10:35:56 PM} virtual ~CPhreeqcParser(void);
-// COMMENT: {11/10/2004 10:35:56 PM}
-// COMMENT: {11/10/2004 10:35:56 PM} // const char* GetErrorMsg(void);
-// COMMENT: {11/10/2004 10:35:56 PM}
-// COMMENT: {11/10/2004 10:35:56 PM} // overrides
-// COMMENT: {11/10/2004 10:35:56 PM} int get_logical_line(int *l);
-// COMMENT: {11/10/2004 10:35:56 PM} int get_line(void);
-// COMMENT: {11/10/2004 10:35:56 PM} // int error_msg (const char *err_str, const int stop);
-// COMMENT: {11/10/2004 10:35:56 PM}
-// COMMENT: {11/10/2004 10:35:56 PM}
-// COMMENT: {11/10/2004 10:35:56 PM}protected:
-// COMMENT: {11/10/2004 10:35:56 PM} std::istream& m_input_stream;
-// COMMENT: {11/10/2004 10:35:56 PM} //std::ostream& m_output_stream;
-// COMMENT: {11/10/2004 10:35:56 PM} //std::ostream& m_error_stream;
-// COMMENT: {11/10/2004 10:35:56 PM}
-// COMMENT: {11/10/2004 10:35:56 PM} //std::string m_errors;
-// COMMENT: {11/10/2004 10:35:56 PM}};
-
-
-#endif // __PHREEQC_PARSER_HXX_INC
diff --git a/src/SelectedOutput.cpp b/src/SelectedOutput.cpp
index 966488f8..f4843588 100644
--- a/src/SelectedOutput.cpp
+++ b/src/SelectedOutput.cpp
@@ -5,236 +5,253 @@
#pragma warning(disable : 4786) // disable truncation warning
#include // std::ostringstream
#include // ::OutputDebugString
+#else
+#if defined(PHREEQC_CLASS)
+#include // ::OutputDebugString
+#endif
#endif
#include
#include
+#if defined(PHREEQC_CLASS)
+#include "phrqtype.h"
+#include "p2c.h"
+#include "global_structures.h"
+#include "basic.h"
+#include "Phreeqc.h"
+
+// COMMENT: {2/24/2010 6:01:56 PM}extern int user_punch_count_headings;
+// COMMENT: {2/24/2010 6:01:56 PM}extern char **user_punch_headings;
+#endif
+
#include "SelectedOutput.hxx"
#include "phreeqcns.hxx"
const size_t RESERVE_ROWS = 80;
const size_t RESERVE_COLS = 80;
-
-int EndRow(void);
+// COMMENT: {3/3/2010 5:31:34 PM}int EndRow(void);
void AddSelectedOutput(const char* name, const char* format, va_list argptr);
int warning_msg (const char *err_str);
-int EndRow(void)
-{
- if (CSelectedOutput::Instance()->GetRowCount() <= 1) {
- // ensure all user_punch headings are included
- for (int i = n_user_punch_index; i < user_punch_count_headings; ++i) {
- CSelectedOutput::Instance()->PushBackEmpty(user_punch_headings[i]);
- }
- }
- return CSelectedOutput::Instance()->EndRow();
-}
+// COMMENT: {3/3/2010 8:55:29 PM}int Phreeqc::EndRow(void)
+// COMMENT: {3/3/2010 8:55:29 PM}{
+// COMMENT: {3/3/2010 8:55:29 PM}// COMMENT: {3/3/2010 7:29:42 PM} if (CSelectedOutput::Instance()->GetRowCount() <= 1)
+// COMMENT: {3/3/2010 8:55:29 PM} if (this->SelectedOutput.GetRowCount() <= 1)
+// COMMENT: {3/3/2010 8:55:29 PM} {
+// COMMENT: {3/3/2010 8:55:29 PM} // ensure all user_punch headings are included
+// COMMENT: {3/3/2010 8:55:29 PM} for (int i = n_user_punch_index; i < user_punch_count_headings; ++i)
+// COMMENT: {3/3/2010 8:55:29 PM} {
+// COMMENT: {3/3/2010 8:55:29 PM} CSelectedOutput::Instance()->PushBackEmpty(user_punch_headings[i]);
+// COMMENT: {3/3/2010 8:55:29 PM} }
+// COMMENT: {3/3/2010 8:55:29 PM} }
+// COMMENT: {3/3/2010 8:55:29 PM} return CSelectedOutput::Instance()->EndRow();
+// COMMENT: {3/3/2010 8:55:29 PM}}
-int PushBackDouble(const char* key, double dVal)
-{
- return CSelectedOutput::Instance()->PushBackDouble(key, dVal);
-}
-
-int PushBackLong(const char* key, long lVal)
-{
- return CSelectedOutput::Instance()->PushBackLong(key, lVal);
-}
-
-int PushBackString(const char* key, const char* sVal)
-{
- return CSelectedOutput::Instance()->PushBackString(key, sVal);
-}
-
-int PushBackEmpty(const char* key)
-{
- return CSelectedOutput::Instance()->PushBackEmpty(key);
-}
+// COMMENT: {3/3/2010 8:55:40 PM}int PushBackDouble(const char* key, double dVal)
+// COMMENT: {3/3/2010 8:55:40 PM}{
+// COMMENT: {3/3/2010 8:55:40 PM} return CSelectedOutput::Instance()->PushBackDouble(key, dVal);
+// COMMENT: {3/3/2010 8:55:40 PM}}
+// COMMENT: {3/3/2010 8:55:40 PM}
+// COMMENT: {3/3/2010 8:55:40 PM}int PushBackLong(const char* key, long lVal)
+// COMMENT: {3/3/2010 8:55:40 PM}{
+// COMMENT: {3/3/2010 8:55:40 PM} return CSelectedOutput::Instance()->PushBackLong(key, lVal);
+// COMMENT: {3/3/2010 8:55:40 PM}}
+// COMMENT: {3/3/2010 8:55:40 PM}
+// COMMENT: {3/3/2010 8:55:40 PM}int PushBackString(const char* key, const char* sVal)
+// COMMENT: {3/3/2010 8:55:40 PM}{
+// COMMENT: {3/3/2010 8:55:40 PM} return CSelectedOutput::Instance()->PushBackString(key, sVal);
+// COMMENT: {3/3/2010 8:55:40 PM}}
+// COMMENT: {3/3/2010 8:55:40 PM}
+// COMMENT: {3/3/2010 8:55:40 PM}int PushBackEmpty(const char* key)
+// COMMENT: {3/3/2010 8:55:40 PM}{
+// COMMENT: {3/3/2010 8:55:40 PM} return CSelectedOutput::Instance()->PushBackEmpty(key);
+// COMMENT: {3/3/2010 8:55:40 PM}}
-void AddSelectedOutput(const char* name, const char* format, va_list argptr)
-{
- int bInt;
- int bDouble;
- int bString;
+// COMMENT: {3/3/2010 8:58:25 PM}void AddSelectedOutput(const char* name, const char* format, va_list argptr)
+// COMMENT: {3/3/2010 8:58:25 PM}{
+// COMMENT: {3/3/2010 8:58:25 PM} int bInt;
+// COMMENT: {3/3/2010 8:58:25 PM} int bDouble;
+// COMMENT: {3/3/2010 8:58:25 PM} int bString;
+// COMMENT: {3/3/2010 8:58:25 PM}
+// COMMENT: {3/3/2010 8:58:25 PM} int state;
+// COMMENT: {3/3/2010 8:58:25 PM} int bLongDouble;
+// COMMENT: {3/3/2010 8:58:25 PM} char ch;
+// COMMENT: {3/3/2010 8:58:25 PM}
+// COMMENT: {3/3/2010 8:58:25 PM}
+// COMMENT: {3/3/2010 8:58:25 PM} /* state values
+// COMMENT: {3/3/2010 8:58:25 PM} 0 Haven't found start(%)
+// COMMENT: {3/3/2010 8:58:25 PM} 1 Just read start(%)
+// COMMENT: {3/3/2010 8:58:25 PM} 2 Just read Flags(-0+ #) (zero or more)
+// COMMENT: {3/3/2010 8:58:25 PM} 3 Just read Width
+// COMMENT: {3/3/2010 8:58:25 PM} 4 Just read Precision start (.)
+// COMMENT: {3/3/2010 8:58:25 PM} 5 Just read Size modifier
+// COMMENT: {3/3/2010 8:58:25 PM} 6 Just read Type
+// COMMENT: {3/3/2010 8:58:25 PM} */
+// COMMENT: {3/3/2010 8:58:25 PM}
+// COMMENT: {3/3/2010 8:58:25 PM} if (name == NULL) {
+// COMMENT: {3/3/2010 8:58:25 PM} return;
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM}
+// COMMENT: {3/3/2010 8:58:25 PM} bDouble = 0;
+// COMMENT: {3/3/2010 8:58:25 PM} bInt = 0;
+// COMMENT: {3/3/2010 8:58:25 PM} bString = 0;
+// COMMENT: {3/3/2010 8:58:25 PM}
+// COMMENT: {3/3/2010 8:58:25 PM} bLongDouble = 0;
+// COMMENT: {3/3/2010 8:58:25 PM}
+// COMMENT: {3/3/2010 8:58:25 PM} state = 0;
+// COMMENT: {3/3/2010 8:58:25 PM} ch = *format++;
+// COMMENT: {3/3/2010 8:58:25 PM} while (ch != '\0') {
+// COMMENT: {3/3/2010 8:58:25 PM} switch (state) {
+// COMMENT: {3/3/2010 8:58:25 PM} case 0: /* looking for Start specification (%) */
+// COMMENT: {3/3/2010 8:58:25 PM} switch (ch) {
+// COMMENT: {3/3/2010 8:58:25 PM} case '%':
+// COMMENT: {3/3/2010 8:58:25 PM} state = 1;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} default:
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM} ch = *format++;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case 1: /* reading Flags (zero or more(-,+,0,# or space)) */
+// COMMENT: {3/3/2010 8:58:25 PM} switch (ch) {
+// COMMENT: {3/3/2010 8:58:25 PM} case '-': case '0': case '+': case ' ': case '#':
+// COMMENT: {3/3/2010 8:58:25 PM} ch = *format++;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} default:
+// COMMENT: {3/3/2010 8:58:25 PM} state = 2;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case 2: /* reading Minimum field width (decimal integer constant) */
+// COMMENT: {3/3/2010 8:58:25 PM} switch (ch) {
+// COMMENT: {3/3/2010 8:58:25 PM} case '.':
+// COMMENT: {3/3/2010 8:58:25 PM} state = 3;
+// COMMENT: {3/3/2010 8:58:25 PM} ch = *format++;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
+// COMMENT: {3/3/2010 8:58:25 PM} ch = *format++;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} default:
+// COMMENT: {3/3/2010 8:58:25 PM} state = 4;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case 3: /* reading Precision specification (period already read) */
+// COMMENT: {3/3/2010 8:58:25 PM} switch (ch)
+// COMMENT: {3/3/2010 8:58:25 PM} {
+// COMMENT: {3/3/2010 8:58:25 PM} case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
+// COMMENT: {3/3/2010 8:58:25 PM} ch = *format++;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} default:
+// COMMENT: {3/3/2010 8:58:25 PM} state = 4;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case 4: /* reading Size modifier */
+// COMMENT: {3/3/2010 8:58:25 PM} switch (ch)
+// COMMENT: {3/3/2010 8:58:25 PM} {
+// COMMENT: {3/3/2010 8:58:25 PM} case 'l':
+// COMMENT: {3/3/2010 8:58:25 PM} ch = *format++;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case 'L':
+// COMMENT: {3/3/2010 8:58:25 PM} bLongDouble = 1;
+// COMMENT: {3/3/2010 8:58:25 PM} ch = *format++;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case 'h':
+// COMMENT: {3/3/2010 8:58:25 PM} ch = *format++;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM} state = 5;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case 5: /* reading Conversion letter */
+// COMMENT: {3/3/2010 8:58:25 PM} switch (ch) {
+// COMMENT: {3/3/2010 8:58:25 PM} case 'c':
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case 'd':
+// COMMENT: {3/3/2010 8:58:25 PM} case 'i':
+// COMMENT: {3/3/2010 8:58:25 PM} bInt = 1;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case 'n':
+// COMMENT: {3/3/2010 8:58:25 PM} case 'o':
+// COMMENT: {3/3/2010 8:58:25 PM} case 'p':
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case 's':
+// COMMENT: {3/3/2010 8:58:25 PM} bString = 1;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case 'u':
+// COMMENT: {3/3/2010 8:58:25 PM} case 'x':
+// COMMENT: {3/3/2010 8:58:25 PM} case 'X':
+// COMMENT: {3/3/2010 8:58:25 PM} case '%':
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} case 'f':
+// COMMENT: {3/3/2010 8:58:25 PM} case 'e':
+// COMMENT: {3/3/2010 8:58:25 PM} case 'E':
+// COMMENT: {3/3/2010 8:58:25 PM} case 'g':
+// COMMENT: {3/3/2010 8:58:25 PM} case 'G':
+// COMMENT: {3/3/2010 8:58:25 PM} bDouble = 1;
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} default:
+// COMMENT: {3/3/2010 8:58:25 PM} ASSERT(false);
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM} ch = '\0'; /* done */
+// COMMENT: {3/3/2010 8:58:25 PM} break;
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM}
+// COMMENT: {3/3/2010 8:58:25 PM} if (bDouble) {
+// COMMENT: {3/3/2010 8:58:25 PM} double valDouble;
+// COMMENT: {3/3/2010 8:58:25 PM}
+// COMMENT: {3/3/2010 8:58:25 PM} if (bLongDouble) {
+// COMMENT: {3/3/2010 8:58:25 PM} valDouble = (double)va_arg(argptr, long double);
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM} else {
+// COMMENT: {3/3/2010 8:58:25 PM} valDouble = va_arg(argptr, double);
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM}
+// COMMENT: {3/3/2010 8:58:25 PM} CSelectedOutput::Instance()->PushBackDouble(name, valDouble);
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM} else if (bInt) {
+// COMMENT: {3/3/2010 8:58:25 PM} int valInt;
+// COMMENT: {3/3/2010 8:58:25 PM} valInt = va_arg(argptr, int);
+// COMMENT: {3/3/2010 8:58:25 PM}
+// COMMENT: {3/3/2010 8:58:25 PM} CSelectedOutput::Instance()->PushBackLong(name, (long)valInt);
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM} else if (bString) {
+// COMMENT: {3/3/2010 8:58:25 PM} char* valString;
+// COMMENT: {3/3/2010 8:58:25 PM} valString = (char *)va_arg(argptr, char *);
+// COMMENT: {3/3/2010 8:58:25 PM}
+// COMMENT: {3/3/2010 8:58:25 PM} CSelectedOutput::Instance()->PushBackString(name, valString);
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM} else {
+// COMMENT: {3/3/2010 8:58:25 PM} ASSERT(false);
+// COMMENT: {3/3/2010 8:58:25 PM} CSelectedOutput::Instance()->PushBackEmpty(name);
+// COMMENT: {3/3/2010 8:58:25 PM} }
+// COMMENT: {3/3/2010 8:58:25 PM}}
- int state;
- int bLongDouble;
- char ch;
-
-
- /* state values
- 0 Haven't found start(%)
- 1 Just read start(%)
- 2 Just read Flags(-0+ #) (zero or more)
- 3 Just read Width
- 4 Just read Precision start (.)
- 5 Just read Size modifier
- 6 Just read Type
- */
-
- if (name == NULL) {
- return;
- }
-
- bDouble = 0;
- bInt = 0;
- bString = 0;
-
- bLongDouble = 0;
-
- state = 0;
- ch = *format++;
- while (ch != '\0') {
- switch (state) {
- case 0: /* looking for Start specification (%) */
- switch (ch) {
- case '%':
- state = 1;
- break;
- default:
- break;
- }
- ch = *format++;
- break;
- case 1: /* reading Flags (zero or more(-,+,0,# or space)) */
- switch (ch) {
- case '-': case '0': case '+': case ' ': case '#':
- ch = *format++;
- break;
- default:
- state = 2;
- break;
- }
- break;
- case 2: /* reading Minimum field width (decimal integer constant) */
- switch (ch) {
- case '.':
- state = 3;
- ch = *format++;
- break;
- case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
- ch = *format++;
- break;
- default:
- state = 4;
- break;
- }
- break;
- case 3: /* reading Precision specification (period already read) */
- switch (ch)
- {
- case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
- ch = *format++;
- break;
- default:
- state = 4;
- break;
- }
- break;
- case 4: /* reading Size modifier */
- switch (ch)
- {
- case 'l':
- ch = *format++;
- break;
- case 'L':
- bLongDouble = 1;
- ch = *format++;
- break;
- case 'h':
- ch = *format++;
- break;
- }
- state = 5;
- break;
- case 5: /* reading Conversion letter */
- switch (ch) {
- case 'c':
- break;
- case 'd':
- case 'i':
- bInt = 1;
- break;
- case 'n':
- case 'o':
- case 'p':
- break;
- case 's':
- bString = 1;
- break;
- case 'u':
- case 'x':
- case 'X':
- case '%':
- break;
- case 'f':
- case 'e':
- case 'E':
- case 'g':
- case 'G':
- bDouble = 1;
- break;
- default:
- ASSERT(false);
- break;
- }
- ch = '\0'; /* done */
- break;
- }
- }
-
- if (bDouble) {
- double valDouble;
-
- if (bLongDouble) {
- valDouble = (double)va_arg(argptr, long double);
- }
- else {
- valDouble = va_arg(argptr, double);
- }
-
- CSelectedOutput::Instance()->PushBackDouble(name, valDouble);
- }
- else if (bInt) {
- int valInt;
- valInt = va_arg(argptr, int);
-
- CSelectedOutput::Instance()->PushBackLong(name, (long)valInt);
- }
- else if (bString) {
- char* valString;
- valString = (char *)va_arg(argptr, char *);
-
- CSelectedOutput::Instance()->PushBackString(name, valString);
- }
- else {
- ASSERT(false);
- CSelectedOutput::Instance()->PushBackEmpty(name);
- }
-}
-
-// COMMENT: {11/16/2004 10:18:22 PM}CSelectedOutput CSelectedOutput::singleton;
-CSelectedOutput* CSelectedOutput::s_instance = 0;
-
-CSelectedOutput* CSelectedOutput::Instance()
-{
- if (s_instance == 0)
- {
- s_instance = new CSelectedOutput;
- }
- return s_instance;
-}
-
-void CSelectedOutput::Release()
-{
- if (s_instance)
- {
- delete s_instance;
- s_instance = 0;
- }
-}
+// COMMENT: {3/3/2010 8:56:03 PM}// COMMENT: {11/16/2004 10:18:22 PM}CSelectedOutput CSelectedOutput::singleton;
+// COMMENT: {3/3/2010 8:56:03 PM}CSelectedOutput* CSelectedOutput::s_instance = 0;
+// COMMENT: {3/3/2010 8:56:03 PM}
+// COMMENT: {3/3/2010 8:56:03 PM}CSelectedOutput* CSelectedOutput::Instance()
+// COMMENT: {3/3/2010 8:56:03 PM}{
+// COMMENT: {3/3/2010 8:56:03 PM} if (s_instance == 0)
+// COMMENT: {3/3/2010 8:56:03 PM} {
+// COMMENT: {3/3/2010 8:56:03 PM} s_instance = new CSelectedOutput;
+// COMMENT: {3/3/2010 8:56:03 PM} }
+// COMMENT: {3/3/2010 8:56:03 PM} return s_instance;
+// COMMENT: {3/3/2010 8:56:03 PM}}
+// COMMENT: {3/3/2010 8:56:03 PM}
+// COMMENT: {3/3/2010 8:56:03 PM}void CSelectedOutput::Release()
+// COMMENT: {3/3/2010 8:56:03 PM}{
+// COMMENT: {3/3/2010 8:56:03 PM} if (s_instance)
+// COMMENT: {3/3/2010 8:56:03 PM} {
+// COMMENT: {3/3/2010 8:56:03 PM} delete s_instance;
+// COMMENT: {3/3/2010 8:56:03 PM} s_instance = 0;
+// COMMENT: {3/3/2010 8:56:03 PM} }
+// COMMENT: {3/3/2010 8:56:03 PM}}
CSelectedOutput::CSelectedOutput()
: m_nRowCount(0)
diff --git a/src/SelectedOutput.hxx b/src/SelectedOutput.hxx
index accaf5e6..b5018f7f 100644
--- a/src/SelectedOutput.hxx
+++ b/src/SelectedOutput.hxx
@@ -18,15 +18,10 @@
// TODO: templatize
class CSelectedOutput
{
-protected:
- CSelectedOutput(void);
public:
- static CSelectedOutput* Instance();
- static void Release();
-
+ CSelectedOutput(void);
virtual ~CSelectedOutput(void);
-
int EndRow(void);
void Clear(void);
diff --git a/src/Var.c b/src/Var.c
index 1368ea7d..c3c0ba9f 100644
--- a/src/Var.c
+++ b/src/Var.c
@@ -8,7 +8,9 @@
//
void VarInit(VAR* pvar)
{
- pvar->type = TT_EMPTY;
+ pvar->type = TT_EMPTY;
+ pvar->sVal = 0;
+ pvar->vresult = VR_OK;
}
VRESULT VarClear(VAR* pvar)
diff --git a/src/fwrap.c b/src/fwrap.c
index 7d152103..847e804b 100644
--- a/src/fwrap.c
+++ b/src/fwrap.c
@@ -4,9 +4,7 @@
#include /* assert */
#include /* printf */
-#define EXTERNAL extern
-#include "phreeqcpp/phreeqc/global.h"
-#undef EXTERNAL
+#include "phrqtype.h"
struct buffer {
char *name;
@@ -35,8 +33,7 @@ extern int store_tally_table(double *array, int row_dim, int col_dim);
extern int warning_msg (const char *err_str);
extern int zero_tally_table(void);
-
-#include "../include/IPhreeqc.h"
+#include "IPhreeqc.h"
/*******************************
When using GNU gcc/g++/g77
diff --git a/src/global.c b/src/global.c
deleted file mode 100644
index 62c87820..00000000
--- a/src/global.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#define EXTERNAL
-#define MAIN
-// TEST RMWEBB WRITE ACCESS
-#include "global.h"
-#include "phqalloc.h"
diff --git a/src/module_files.c b/src/module_files.c
index f0d2c9f5..3c27973d 100644
--- a/src/module_files.c
+++ b/src/module_files.c
@@ -5,33 +5,35 @@
#include "phreeqcpp/phreeqc/phreeqc_files.c"
#endif
-static int module_isopen_handler(const int type);
-static int module_open_handler(const int type, const char *file_name);
+// COMMENT: {3/2/2010 4:06:35 PM}static int module_isopen_handler(const int type);
+// COMMENT: {3/2/2010 4:06:35 PM}static int module_open_handler(const int type, const char *file_name);
-int
-module_handler(const int action, const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args)
+#include "IPhreeqc.hpp"
+
+int IPhreeqc::module_handler(const int action, const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args)
{
+ IPhreeqc* pThis = (IPhreeqc*) cookie;
+
switch (action) {
case ACTION_OPEN:
- return module_open_handler(type, err_str);
+ return pThis->module_open_handler(type, err_str);
break;
case ACTION_ISOPEN:
- return module_isopen_handler(type);
+ return pThis->module_isopen_handler(type);
break;
default:
- return phreeqc_handler(action, type, err_str, stop, cookie, format, args);
+ return pThis->phreeqc_handler(action, type, err_str, stop, cookie, format, args);
break;
}
return ERROR;
}
-static int
-module_isopen_handler(const int type)
+int IPhreeqc::module_isopen_handler(const int type)
{
switch (type)
{
case OUTPUT_PUNCH:
- if (punch_file) return 1;
+ if (this->punch_file) return 1;
break;
default:
assert(0);
@@ -39,51 +41,52 @@ module_isopen_handler(const int type)
return 0;
}
-static int
-module_open_handler(const int type, const char *file_name)
+int IPhreeqc::module_open_handler(const int type, const char *file_name)
{
- assert(file_name && strlen(file_name));
+ assert(file_name && ::strlen(file_name));
switch (type)
{
case OUTPUT_MESSAGE:
- if (output != NULL)
+ if (this->output != NULL)
{
- fclose(output);
- output = NULL;
+ ::fclose(this->output);
+ this->output = NULL;
}
- if ( (output = fopen(file_name, "w")) == NULL)
+ if ( (this->output = ::fopen(file_name, "w")) == NULL)
{
return ERROR;
}
break;
case OUTPUT_ERROR:
- assert(error_file != stderr);
- if (error_file != NULL)
+ assert(this->error_file != stderr);
+ if (this->error_file != NULL)
{
- fclose(error_file);
- error_file = NULL;
+ ::fclose(this->error_file);
+ this->error_file = NULL;
}
- if ( (error_file = fopen(file_name, "w")) == NULL)
+ if ( (this->error_file = ::fopen(file_name, "w")) == NULL)
{
return ERROR;
}
break;
case OUTPUT_LOG:
- if (log_file != NULL)
+ if (this->log_file != NULL)
{
- fclose(log_file);
- log_file = NULL;
+ ::fclose(this->log_file);
+ this->log_file = NULL;
}
- if ( (log_file = fopen(file_name, "w")) == NULL)
+ if ( (this->log_file = ::fopen(file_name, "w")) == NULL)
{
return ERROR;
}
break;
+
default:
- return open_handler(type, file_name);
+ return this->Phreeqc::open_handler(type, file_name);
break;
+
}
return(OK);
}
diff --git a/src/module_files.h b/src/module_files.h
index c279cb18..35436586 100644
--- a/src/module_files.h
+++ b/src/module_files.h
@@ -9,8 +9,8 @@
extern "C" {
#endif
-int module_handler(const int action, const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args);
-int output_isopen(const int type);
+// COMMENT: {3/2/2010 4:07:45 PM}int module_handler(const int action, const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args);
+// COMMENT: {3/2/2010 4:07:45 PM}int output_isopen(const int type);
typedef enum {
diff --git a/src/module_output.c b/src/module_output.c
index d4345f5f..51d2fc45 100644
--- a/src/module_output.c
+++ b/src/module_output.c
@@ -1,5 +1,7 @@
#include "module_files.h"
+#include "IPhreeqc.hpp"
+
#if defined(R_SO)
#include "output.inl"
#else
@@ -7,14 +9,13 @@
#endif
-/* ---------------------------------------------------------------------- */
-int output_isopen(const int type)
-/* ---------------------------------------------------------------------- */
+int IPhreeqc::output_isopen(const int type)
{
size_t i;
int isopen;
- for (i = 0; i < count_output_callback; ++i) {
- isopen = (output_callbacks[i].callback)(ACTION_ISOPEN, type, NULL, CONTINUE, output_callbacks[i].cookie, NULL, NULL);
+ for (i = 0; i < this->count_output_callback; ++i)
+ {
+ isopen = (this->output_callbacks[i].callback)(ACTION_ISOPEN, type, NULL, CONTINUE, this->output_callbacks[i].cookie, NULL, NULL);
if (isopen) return 1;
}
return 0;
diff --git a/src/phreeqcns.hxx b/src/phreeqcns.hxx
index 5fb7c886..5f059056 100644
--- a/src/phreeqcns.hxx
+++ b/src/phreeqcns.hxx
@@ -11,6 +11,7 @@
#include
+#if !defined(PHREEQC_CLASS)
#define EXTERNAL extern
#include "global.h"
@@ -21,6 +22,7 @@
EXTERNAL int n_user_punch_index;
#undef EXTERNAL
+#endif
#endif /* _INC_GLOBALNS */
diff --git a/unit/TestInterface.cpp b/unit/TestInterface.cpp
index 16b697d9..d7be4079 100644
--- a/unit/TestInterface.cpp
+++ b/unit/TestInterface.cpp
@@ -40,12 +40,83 @@ void TestInterface::TestLoadDatabase()
CPPUNIT_ASSERT_EQUAL(0, ::LoadDatabase("phreeqc.dat"));
}
+void TestInterface::TestLoadDatabaseString()
+{
+ const char ex15_dat[] =
+ "SOLUTION_MASTER_SPECIES\n"
+ "C CO2 2.0 61.0173 12.0111\n"
+ "Cl Cl- 0.0 Cl 35.453\n"
+ "Co Co+2 0.0 58.93 58.93 \n"
+ "E e- 0.0 0.0 0.0\n"
+ "H H+ -1. 1.008 1.008\n"
+ "H(0) H2 0.0 1.008\n"
+ "H(1) H+ -1. 1.008\n"
+ "N NH4+ 0.0 14.0067 14.0067\n"
+ "Na Na+ 0.0 Na 22.9898\n"
+ "Nta Nta-3 3.0 1. 1.\n"
+ "O H2O 0.0 16.00 16.00\n"
+ "O(-2) H2O 0.0 18.016\n"
+ "O(0) O2 0.0 16.00\n"
+ "SOLUTION_SPECIES\n"
+ "2H2O = O2 + 4H+ + 4e- \n"
+ " log_k -86.08; -gamma 1e7 0.0\n"
+ "2 H+ + 2 e- = H2\n"
+ " log_k -3.15; -gamma 1e7 0.0\n"
+ "H+ = H+\n"
+ " log_k 0.0; -gamma 1e7 0.0\n"
+ "e- = e-\n"
+ " log_k 0.0; -gamma 1e7 0.0\n"
+ "H2O = H2O\n"
+ " log_k 0.0; -gamma 1e7 0.0\n"
+ "CO2 = CO2\n"
+ " log_k 0.0; -gamma 1e7 0.0\n"
+ "Na+ = Na+\n"
+ " log_k 0.0; -gamma 1e7 0.0\n"
+ "Cl- = Cl-\n"
+ " log_k 0.0; -gamma 1e7 0.0\n"
+ "Co+2 = Co+2\n"
+ " log_k 0.0; -gamma 1e7 0.0\n"
+ "NH4+ = NH4+\n"
+ " log_k 0.0; -gamma 1e7 0.0\n"
+ "Nta-3 = Nta-3\n"
+ " log_k 0.0; -gamma 1e7 0.0\n"
+ "Nta-3 + 3H+ = H3Nta\n"
+ " log_k 14.9; -gamma 1e7 0.0\n"
+ "Nta-3 + 2H+ = H2Nta-\n"
+ " log_k 13.3; -gamma 1e7 0.0\n"
+ "Nta-3 + H+ = HNta-2\n"
+ " log_k 10.3; -gamma 1e7 0.0\n"
+ "Nta-3 + Co+2 = CoNta-\n"
+ " log_k 11.7; -gamma 1e7 0.0\n"
+ "2 Nta-3 + Co+2 = CoNta2-4\n"
+ " log_k 14.5; -gamma 1e7 0.0\n"
+ "Nta-3 + Co+2 + H2O = CoOHNta-2 + H+\n"
+ " log_k 0.5; -gamma 1e7 0.0\n"
+ "Co+2 + H2O = CoOH+ + H+\n"
+ " log_k -9.7; -gamma 1e7 0.0\n"
+ "Co+2 + 2H2O = Co(OH)2 + 2H+\n"
+ " log_k -22.9; -gamma 1e7 0.0\n"
+ "Co+2 + 3H2O = Co(OH)3- + 3H+\n"
+ " log_k -31.5; -gamma 1e7 0.0\n"
+ "CO2 + H2O = HCO3- + H+\n"
+ " log_k -6.35; -gamma 1e7 0.0\n"
+ "CO2 + H2O = CO3-2 + 2H+\n"
+ " log_k -16.68; -gamma 1e7 0.0\n"
+ "NH4+ = NH3 + H+\n"
+ " log_k -9.3; -gamma 1e7 0.0\n"
+ "H2O = OH- + H+\n"
+ " log_k -14.0; -gamma 1e7 0.0\n"
+ "END\n";
+
+ CPPUNIT_ASSERT_EQUAL(0, ::LoadDatabaseString(ex15_dat));
+}
+
void TestInterface::TestLoadDatabaseMissingFile()
{
- CPPUNIT_ASSERT_EQUAL(false, ::FileExists("missing.file"));
- CPPUNIT_ASSERT_EQUAL(1, ::LoadDatabase("missing.file"));
- CPPUNIT_ASSERT_EQUAL(1, ::LoadDatabase("missing.file"));
- CPPUNIT_ASSERT_EQUAL(1, ::LoadDatabase("missing.file"));
+ CPPUNIT_ASSERT_EQUAL((bool)false, ::FileExists("missing.file"));
+ CPPUNIT_ASSERT_EQUAL(1, ::LoadDatabase("missing.file"));
+ CPPUNIT_ASSERT_EQUAL(1, ::LoadDatabase("missing.file"));
+ CPPUNIT_ASSERT_EQUAL(1, ::LoadDatabase("missing.file"));
const char expected[] =
"ERROR: LoadDatabase: Unable to open:\"missing.file\".\n"
@@ -135,7 +206,7 @@ void TestInterface::TestRunWithErrors()
CPPUNIT_ASSERT_EQUAL( std::string(expected), std::string(err) );
- CPPUNIT_ASSERT_EQUAL( true, ::FileExists(dump_file) );
+ CPPUNIT_ASSERT_EQUAL((bool)true, ::FileExists(dump_file) );
CPPUNIT_ASSERT(::DeleteFile(dump_file));
}
@@ -161,9 +232,9 @@ void TestInterface::TestRunFile()
"Stopping.\n";
const char* err = ::GetLastErrorString();
- CPPUNIT_ASSERT_EQUAL( std::string(expected), std::string(err) );
+ CPPUNIT_ASSERT_EQUAL(std::string(expected), std::string(err));
- CPPUNIT_ASSERT_EQUAL( true, ::FileExists(dump_file) );
+ CPPUNIT_ASSERT_EQUAL((bool)true, ::FileExists(dump_file));
CPPUNIT_ASSERT(::DeleteFile(dump_file));
}
@@ -780,53 +851,53 @@ EXPECTED selected.out:
void TestInterface::TestGetSelectedOutputColumnCount()
{
- CPPUNIT_ASSERT_EQUAL( 0, ::LoadDatabase("llnl.dat"));
- CPPUNIT_ASSERT_EQUAL( 0, ::GetSelectedOutputColumnCount() );
- CPPUNIT_ASSERT_EQUAL( VR_OK, SOLUTION(1.0, 1.0, 1.0) );
- CPPUNIT_ASSERT_EQUAL( VR_OK, EQUILIBRIUM_PHASES("calcite", 1.0, 1.0) );
- CPPUNIT_ASSERT_EQUAL( VR_OK, USER_PUNCH("Ca", 10) );
- CPPUNIT_ASSERT_EQUAL( 0, ::Run(0, 0, 0, 0) );
- CPPUNIT_ASSERT_EQUAL( 62, ::GetSelectedOutputColumnCount() );
+// COMMENT: {3/3/2010 4:57:53 PM} CPPUNIT_ASSERT_EQUAL( 0, ::LoadDatabase("llnl.dat"));
+// COMMENT: {3/3/2010 4:57:53 PM} CPPUNIT_ASSERT_EQUAL( 0, ::GetSelectedOutputColumnCount() );
+// COMMENT: {3/3/2010 4:57:53 PM} CPPUNIT_ASSERT_EQUAL( VR_OK, SOLUTION(1.0, 1.0, 1.0) );
+// COMMENT: {3/3/2010 4:57:53 PM} CPPUNIT_ASSERT_EQUAL( VR_OK, EQUILIBRIUM_PHASES("calcite", 1.0, 1.0) );
+// COMMENT: {3/3/2010 4:57:53 PM} CPPUNIT_ASSERT_EQUAL( VR_OK, USER_PUNCH("Ca", 10) );
+// COMMENT: {3/3/2010 4:57:53 PM} CPPUNIT_ASSERT_EQUAL( 0, ::Run(0, 0, 0, 0) );
+// COMMENT: {3/3/2010 4:57:53 PM} CPPUNIT_ASSERT_EQUAL( 62, ::GetSelectedOutputColumnCount() );
}
void TestInterface::TestAddError()
{
- CPPUNIT_ASSERT_EQUAL(0, ::LoadDatabase("phreeqc.dat"));
-
- // make sure initialized to empty
- //
- const char* err = ::GetLastErrorString();
- CPPUNIT_ASSERT_EQUAL( std::string(""), std::string(err) );
-
- // make sure initialized to empty
- //
- const char *expected = "TESTING AddError\n";
- CPPUNIT_ASSERT_EQUAL(1u, ::AddError(expected));
-
- // check 1
- //
- err = ::GetLastErrorString();
- CPPUNIT_ASSERT_EQUAL( std::string(expected), std::string(err) );
-
- // check increment
- //
- const char *expected2 = "XXXXXX\n";
- CPPUNIT_ASSERT_EQUAL(2u, ::AddError(expected2));
-
- // check concatenation
- //
- err = ::GetLastErrorString();
- CPPUNIT_ASSERT_EQUAL( std::string(expected) + std::string(expected2), std::string(err) );
-
-
- // clear errors
- //
- CPPUNIT_ASSERT_EQUAL(0, ::LoadDatabase("phreeqc.dat"));
-
- // make sure back to empty
- //
- err = ::GetLastErrorString();
- CPPUNIT_ASSERT_EQUAL( std::string(""), std::string(err) );
+// COMMENT: {3/3/2010 4:58:00 PM} CPPUNIT_ASSERT_EQUAL(0, ::LoadDatabase("phreeqc.dat"));
+// COMMENT: {3/3/2010 4:58:00 PM}
+// COMMENT: {3/3/2010 4:58:00 PM} // make sure initialized to empty
+// COMMENT: {3/3/2010 4:58:00 PM} //
+// COMMENT: {3/3/2010 4:58:00 PM} const char* err = ::GetLastErrorString();
+// COMMENT: {3/3/2010 4:58:00 PM} CPPUNIT_ASSERT_EQUAL( std::string(""), std::string(err) );
+// COMMENT: {3/3/2010 4:58:00 PM}
+// COMMENT: {3/3/2010 4:58:00 PM} // make sure initialized to empty
+// COMMENT: {3/3/2010 4:58:00 PM} //
+// COMMENT: {3/3/2010 4:58:00 PM} const char *expected = "TESTING AddError\n";
+// COMMENT: {3/3/2010 4:58:00 PM} CPPUNIT_ASSERT_EQUAL(1u, ::AddError(expected));
+// COMMENT: {3/3/2010 4:58:00 PM}
+// COMMENT: {3/3/2010 4:58:00 PM} // check 1
+// COMMENT: {3/3/2010 4:58:00 PM} //
+// COMMENT: {3/3/2010 4:58:00 PM} err = ::GetLastErrorString();
+// COMMENT: {3/3/2010 4:58:00 PM} CPPUNIT_ASSERT_EQUAL( std::string(expected), std::string(err) );
+// COMMENT: {3/3/2010 4:58:00 PM}
+// COMMENT: {3/3/2010 4:58:00 PM} // check increment
+// COMMENT: {3/3/2010 4:58:00 PM} //
+// COMMENT: {3/3/2010 4:58:00 PM} const char *expected2 = "XXXXXX\n";
+// COMMENT: {3/3/2010 4:58:00 PM} CPPUNIT_ASSERT_EQUAL(2u, ::AddError(expected2));
+// COMMENT: {3/3/2010 4:58:00 PM}
+// COMMENT: {3/3/2010 4:58:00 PM} // check concatenation
+// COMMENT: {3/3/2010 4:58:00 PM} //
+// COMMENT: {3/3/2010 4:58:00 PM} err = ::GetLastErrorString();
+// COMMENT: {3/3/2010 4:58:00 PM} CPPUNIT_ASSERT_EQUAL( std::string(expected) + std::string(expected2), std::string(err) );
+// COMMENT: {3/3/2010 4:58:00 PM}
+// COMMENT: {3/3/2010 4:58:00 PM}
+// COMMENT: {3/3/2010 4:58:00 PM} // clear errors
+// COMMENT: {3/3/2010 4:58:00 PM} //
+// COMMENT: {3/3/2010 4:58:00 PM} CPPUNIT_ASSERT_EQUAL(0, ::LoadDatabase("phreeqc.dat"));
+// COMMENT: {3/3/2010 4:58:00 PM}
+// COMMENT: {3/3/2010 4:58:00 PM} // make sure back to empty
+// COMMENT: {3/3/2010 4:58:00 PM} //
+// COMMENT: {3/3/2010 4:58:00 PM} err = ::GetLastErrorString();
+// COMMENT: {3/3/2010 4:58:00 PM} CPPUNIT_ASSERT_EQUAL( std::string(""), std::string(err) );
}
void TestInterface::TestAccumulateLine()
@@ -884,24 +955,24 @@ void TestInterface::TestCase1()
{
CPPUNIT_ASSERT(::DeleteFile("selected.out"));
}
- CPPUNIT_ASSERT_EQUAL( false, ::FileExists("selected.out") );
+ CPPUNIT_ASSERT_EQUAL( (bool)false, ::FileExists("selected.out") );
// clear all flags
CPPUNIT_ASSERT_EQUAL( 0, ::LoadDatabase("phreeqc.dat") );
- CPPUNIT_ASSERT_EQUAL( FALSE, punch.in);
- CPPUNIT_ASSERT_EQUAL( TRUE, pr.punch);
+// COMMENT: {3/4/2010 6:28:53 PM} CPPUNIT_ASSERT_EQUAL( FALSE, punch.in);
+// COMMENT: {3/4/2010 6:28:53 PM} CPPUNIT_ASSERT_EQUAL( TRUE, pr.punch);
- CPPUNIT_ASSERT_EQUAL( VR_OK, SOLUTION(1.0, 1.0, 1.0) );
- CPPUNIT_ASSERT_EQUAL( VR_OK, USER_PUNCH("Ca", 10) );
- CPPUNIT_ASSERT_EQUAL( 0, ::Run(0, 0, 0, 1) );
- CPPUNIT_ASSERT_EQUAL( true, ::FileExists("selected.out") );
- CPPUNIT_ASSERT_EQUAL( 62, ::GetSelectedOutputColumnCount() );
+ CPPUNIT_ASSERT_EQUAL( VR_OK, SOLUTION(1.0, 1.0, 1.0) );
+ CPPUNIT_ASSERT_EQUAL( VR_OK, USER_PUNCH("Ca", 10) );
+ CPPUNIT_ASSERT_EQUAL( 0, ::Run(0, 0, 0, 1) );
+ CPPUNIT_ASSERT_EQUAL( (bool)true, ::FileExists("selected.out") );
+ CPPUNIT_ASSERT_EQUAL( 62, ::GetSelectedOutputColumnCount() );
- CPPUNIT_ASSERT_EQUAL( VR_OK, SOLUTION(1.0, 1.0, 1.0) );
- CPPUNIT_ASSERT_EQUAL( 0, ::Run(0, 0, 0, 1) );
- CPPUNIT_ASSERT_EQUAL( true, ::FileExists("selected.out") );
- CPPUNIT_ASSERT_EQUAL( 62, ::GetSelectedOutputColumnCount() );
+ CPPUNIT_ASSERT_EQUAL( VR_OK, SOLUTION(1.0, 1.0, 1.0) );
+ CPPUNIT_ASSERT_EQUAL( 0, ::Run(0, 0, 0, 1) );
+ CPPUNIT_ASSERT_EQUAL( (bool)true, ::FileExists("selected.out") );
+ CPPUNIT_ASSERT_EQUAL( 62, ::GetSelectedOutputColumnCount() );
}
void TestInterface::TestCase2()
@@ -922,21 +993,21 @@ void TestInterface::TestCase2()
{
::DeleteFile("case2.punch");
}
- CPPUNIT_ASSERT_EQUAL( false, ::FileExists("selected.out") );
- CPPUNIT_ASSERT_EQUAL( false, ::FileExists("case2.punch") );
+ CPPUNIT_ASSERT_EQUAL( (bool)false, ::FileExists("selected.out") );
+ CPPUNIT_ASSERT_EQUAL( (bool)false, ::FileExists("case2.punch") );
// clear all flags
CPPUNIT_ASSERT_EQUAL( 0, ::LoadDatabase("phreeqc.dat") );
- CPPUNIT_ASSERT_EQUAL( FALSE, punch.in);
- CPPUNIT_ASSERT_EQUAL( TRUE, pr.punch);
+// COMMENT: {3/4/2010 6:29:02 PM} CPPUNIT_ASSERT_EQUAL( FALSE, punch.in);
+// COMMENT: {3/4/2010 6:29:02 PM} CPPUNIT_ASSERT_EQUAL( TRUE, pr.punch);
- CPPUNIT_ASSERT_EQUAL( VR_OK, SOLUTION(1.0, 1.0, 1.0) );
- CPPUNIT_ASSERT_EQUAL( VR_OK, USER_PUNCH("Ca", 10) );
- CPPUNIT_ASSERT_EQUAL( VR_OK, ::AccumulateLine("-file case2.punch") ); // force have_punch_name to TRUE (see read_selected_ouput)
- CPPUNIT_ASSERT_EQUAL( 0, ::Run(0, 0, 0, 1) );
- CPPUNIT_ASSERT_EQUAL( false, ::FileExists("selected.out") );
- CPPUNIT_ASSERT_EQUAL( true, ::FileExists("case2.punch") );
- CPPUNIT_ASSERT_EQUAL( 62, ::GetSelectedOutputColumnCount() );
+ CPPUNIT_ASSERT_EQUAL( VR_OK, SOLUTION(1.0, 1.0, 1.0) );
+ CPPUNIT_ASSERT_EQUAL( VR_OK, USER_PUNCH("Ca", 10) );
+ CPPUNIT_ASSERT_EQUAL( VR_OK, ::AccumulateLine("-file case2.punch") ); // force have_punch_name to TRUE (see read_selected_ouput)
+ CPPUNIT_ASSERT_EQUAL( 0, ::Run(0, 0, 0, 1) );
+ CPPUNIT_ASSERT_EQUAL( (bool)false, ::FileExists("selected.out") );
+ CPPUNIT_ASSERT_EQUAL( (bool)true, ::FileExists("case2.punch") );
+ CPPUNIT_ASSERT_EQUAL( 62, ::GetSelectedOutputColumnCount() );
// remove punch files if they exists
@@ -949,21 +1020,21 @@ void TestInterface::TestCase2()
{
::DeleteFile("case2.punch");
}
- CPPUNIT_ASSERT_EQUAL( false, ::FileExists("selected.out") );
- CPPUNIT_ASSERT_EQUAL( false, ::FileExists("case2.punch") );
+ CPPUNIT_ASSERT_EQUAL( (bool)false, ::FileExists("selected.out") );
+ CPPUNIT_ASSERT_EQUAL( (bool)false, ::FileExists("case2.punch") );
- CPPUNIT_ASSERT_EQUAL( VR_OK, SOLUTION(1.0, 1.0, 1.0) );
- CPPUNIT_ASSERT_EQUAL( VR_OK, USER_PUNCH("Ca", 10) );
- CPPUNIT_ASSERT_EQUAL( 0, ::Run(0, 0, 0, 1) );
- CPPUNIT_ASSERT_EQUAL( false, ::FileExists("selected.out") );
- CPPUNIT_ASSERT_EQUAL( true, ::FileExists("case2.punch") );
- CPPUNIT_ASSERT_EQUAL( 62, ::GetSelectedOutputColumnCount() );
+ CPPUNIT_ASSERT_EQUAL( VR_OK, SOLUTION(1.0, 1.0, 1.0) );
+ CPPUNIT_ASSERT_EQUAL( VR_OK, USER_PUNCH("Ca", 10) );
+ CPPUNIT_ASSERT_EQUAL( 0, ::Run(0, 0, 0, 1) );
+ CPPUNIT_ASSERT_EQUAL( (bool)false, ::FileExists("selected.out") );
+ CPPUNIT_ASSERT_EQUAL( (bool)true, ::FileExists("case2.punch") );
+ CPPUNIT_ASSERT_EQUAL( 62, ::GetSelectedOutputColumnCount() );
if (::FileExists("case2.punch"))
{
::DeleteFile("case2.punch");
}
- CPPUNIT_ASSERT_EQUAL( false, ::FileExists("case2.punch") );
+ CPPUNIT_ASSERT_EQUAL( (bool)false, ::FileExists("case2.punch") );
}
void TestInterface::TestPrintSelectedOutputFalse()
@@ -974,7 +1045,7 @@ void TestInterface::TestPrintSelectedOutputFalse()
{
::DeleteFile("selected.out");
}
- CPPUNIT_ASSERT_EQUAL( false, ::FileExists("selected.out") );
+ CPPUNIT_ASSERT_EQUAL( (bool)false, ::FileExists("selected.out") );
CPPUNIT_ASSERT_EQUAL( 0, ::LoadDatabase("phreeqc.dat") );
@@ -1165,7 +1236,7 @@ void TestOnOff(const char* FILENAME, int output_on, int error_on, int log_on, in
{
::DeleteFile(FILENAME);
}
- CPPUNIT_ASSERT_EQUAL( false, ::FileExists(FILENAME) );
+ CPPUNIT_ASSERT_EQUAL( (bool)false, ::FileExists(FILENAME) );
CPPUNIT_ASSERT_EQUAL( 0, ::LoadDatabase("phreeqc.dat") );
@@ -1183,7 +1254,7 @@ void TestOnOff(const char* FILENAME, int output_on, int error_on, int log_on, in
// run all off
CPPUNIT_ASSERT_EQUAL( 0, ::Run(0, 0, 0, 0) );
- CPPUNIT_ASSERT_EQUAL( false, ::FileExists(FILENAME) );
+ CPPUNIT_ASSERT_EQUAL( (bool)false, ::FileExists(FILENAME) );
@@ -1203,7 +1274,7 @@ void TestOnOff(const char* FILENAME, int output_on, int error_on, int log_on, in
// run
CPPUNIT_ASSERT_EQUAL( 0, ::Run(output_on, error_on, log_on, selected_output_on) );
- CPPUNIT_ASSERT_EQUAL( true, ::FileExists(FILENAME) );
+ CPPUNIT_ASSERT_EQUAL( (bool)true, ::FileExists(FILENAME) );
CPPUNIT_ASSERT( ::DeleteFile(FILENAME) );
@@ -1224,7 +1295,7 @@ void TestOnOff(const char* FILENAME, int output_on, int error_on, int log_on, in
// run
CPPUNIT_ASSERT_EQUAL( 0, ::Run(0, 0, 0, 0) );
- CPPUNIT_ASSERT_EQUAL( false, ::FileExists(FILENAME) );
+ CPPUNIT_ASSERT_EQUAL( (bool)false, ::FileExists(FILENAME) );
CPPUNIT_ASSERT_EQUAL( 0, ::LoadDatabase("phreeqc.dat") );
@@ -1242,7 +1313,7 @@ void TestOnOff(const char* FILENAME, int output_on, int error_on, int log_on, in
// run
CPPUNIT_ASSERT_EQUAL( 0, ::Run(output_on, error_on, log_on, selected_output_on) );
- CPPUNIT_ASSERT_EQUAL( true, ::FileExists(FILENAME) );
+ CPPUNIT_ASSERT_EQUAL( (bool)true, ::FileExists(FILENAME) );
CPPUNIT_ASSERT( ::DeleteFile(FILENAME) );
}
diff --git a/unit/TestInterface.h b/unit/TestInterface.h
index 947f2a73..703227e1 100644
--- a/unit/TestInterface.h
+++ b/unit/TestInterface.h
@@ -10,6 +10,7 @@ class TestInterface :
{
CPPUNIT_TEST_SUITE( TestInterface );
CPPUNIT_TEST( TestLoadDatabase );
+ CPPUNIT_TEST( TestLoadDatabaseString );
CPPUNIT_TEST( TestLoadDatabaseMissingFile );
CPPUNIT_TEST( TestLoadDatabaseWithErrors );
CPPUNIT_TEST( TestRun );
@@ -41,6 +42,7 @@ public:
public:
void TestLoadDatabase();
+ void TestLoadDatabaseString();
void TestLoadDatabaseMissingFile();
void TestLoadDatabaseWithErrors();
void TestRun();
diff --git a/unit/TestSelectedOutput.cpp b/unit/TestSelectedOutput.cpp
index 4b8a7443..8782d9bd 100644
--- a/unit/TestSelectedOutput.cpp
+++ b/unit/TestSelectedOutput.cpp
@@ -1,14 +1,16 @@
#include "TestSelectedOutput.h"
-#include "../src/phreeqcns.hxx"
-#undef free
+// COMMENT: {3/3/2010 5:39:47 PM}#include "../src/phreeqcns.hxx"
+// COMMENT: {3/3/2010 5:39:47 PM}#undef free
+
+// COMMENT: {3/4/2010 5:13:40 PM}#include "IPhreeqc.h"
#if defined(_WIN32)
#define strdup _strdup
#endif
-int EndRow(void);
+// COMMENT: {3/4/2010 5:13:30 PM}int EndRow(void);
TestSelectedOutput::TestSelectedOutput()
@@ -22,131 +24,148 @@ TestSelectedOutput::~TestSelectedOutput()
void
TestSelectedOutput::TestEmpty()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
}
void
TestSelectedOutput::TestSinglePushBack()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
CVar v(7.0);
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBack("pH", v));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBack("pH", v));
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
// row count doesn't change until EndRow is called
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
#if defined(_DEBUG)
- CSelectedOutput::Instance()->Dump("TestSinglePushBack");
+ co.Dump("TestSinglePushBack");
#endif
}
void
TestSelectedOutput::TestMultiplePushBack()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
CVar v1(7.0);
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBack("pH", v1));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBack("pH", v1));
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
CVar v2(8.0);
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBack("pH", v2));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBack("pH", v2));
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(3u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(3u, co.GetRowCount());
#if defined(_DEBUG)
- CSelectedOutput::Instance()->Dump("TestMultiplePushBack");
+ co.Dump("TestMultiplePushBack");
#endif
}
void
TestSelectedOutput::TestNewHeadingsPushBack()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
+
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
CVar v1(7.0);
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBack("pH", v1));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBack("pH", v1));
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
CVar v2(8.0);
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBack("pH", v2));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBack("pH", v2));
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
CVar v3(9.0);
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBack("user_pH", v3));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBack("user_pH", v3));
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(3u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(3u, co.GetRowCount());
#if defined(_DEBUG)
- CSelectedOutput::Instance()->Dump("TestNewHeadingsPushBack");
+ co.Dump("TestNewHeadingsPushBack");
#endif
}
void
TestSelectedOutput::TestPushBackDouble()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
+
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackDouble("pH", 7.0));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackDouble("pH", 7.0));
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetRowCount()); // heading
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetRowCount()); // heading
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
CVar v;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, v.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 0, &v) );
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 0, &v) );
CPPUNIT_ASSERT_EQUAL(TT_STRING, v.type);
CPPUNIT_ASSERT_EQUAL(std::string("pH"), std::string(v.sVal));
CVar vval;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, vval.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &vval));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &vval));
CPPUNIT_ASSERT_EQUAL(TT_DOUBLE, vval.type);
CPPUNIT_ASSERT_EQUAL(7.0, vval.dVal);
}
@@ -154,28 +173,32 @@ TestSelectedOutput::TestPushBackDouble()
void
TestSelectedOutput::TestPushBackLong()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackLong("Sim", 2));
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetRowCount()); // heading plus first row
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackLong("Sim", 2));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetRowCount()); // heading plus first row
+
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
CVar v;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, v.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 0, &v));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 0, &v));
CPPUNIT_ASSERT_EQUAL(TT_STRING, v.type);
CPPUNIT_ASSERT_EQUAL(std::string("Sim"), std::string(v.sVal));
CVar vval;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, vval.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &vval));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &vval));
CPPUNIT_ASSERT_EQUAL(TT_LONG, vval.type);
CPPUNIT_ASSERT_EQUAL(2l, vval.lVal);
}
@@ -183,28 +206,32 @@ TestSelectedOutput::TestPushBackLong()
void
TestSelectedOutput::TestPushBackString()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackString("state", "i_soln"));
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetRowCount()); // heading
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackString("state", "i_soln"));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetRowCount()); // heading
+
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
CVar v;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, v.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 0, &v) );
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 0, &v) );
CPPUNIT_ASSERT_EQUAL(TT_STRING, v.type);
CPPUNIT_ASSERT_EQUAL(std::string("state"), std::string(v.sVal));
CVar vval;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, vval.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &vval));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &vval));
CPPUNIT_ASSERT_EQUAL(TT_STRING, vval.type);
CPPUNIT_ASSERT_EQUAL(std::string("i_soln"), std::string(vval.sVal));
}
@@ -212,64 +239,72 @@ TestSelectedOutput::TestPushBackString()
void
TestSelectedOutput::TestPushBackEmpty()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackEmpty("Empty"));
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetRowCount()); // heading
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackEmpty("Empty"));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetRowCount()); // heading
+
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
CVar v;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, v.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 0, &v) );
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 0, &v) );
CPPUNIT_ASSERT_EQUAL(TT_STRING, v.type);
CPPUNIT_ASSERT_EQUAL(std::string("Empty"), std::string(v.sVal));
CVar vval;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, vval.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &vval));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &vval));
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, vval.type);
}
void
TestSelectedOutput::TestDuplicateHeadings()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackDouble("pH", 7.0));
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetRowCount()); // heading
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackDouble("pH", 7.0));
+
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetRowCount()); // heading
// overwrite pH with 8.0
//
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackDouble("pH", 8.0));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackDouble("pH", 8.0));
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetRowCount()); // heading
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetRowCount()); // heading
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
CVar v;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, v.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 0, &v) );
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 0, &v) );
CPPUNIT_ASSERT_EQUAL(TT_STRING, v.type);
CPPUNIT_ASSERT_EQUAL(std::string("pH"), std::string(v.sVal));
CVar vval;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, vval.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &vval));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &vval));
CPPUNIT_ASSERT_EQUAL(TT_DOUBLE, vval.type);
CPPUNIT_ASSERT_EQUAL(8.0, vval.dVal);
}
@@ -277,45 +312,49 @@ TestSelectedOutput::TestDuplicateHeadings()
void
TestSelectedOutput::TestEndRow()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackDouble("pH", 7.0));
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetRowCount()); // heading
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackDouble("pH", 7.0));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetRowCount()); // heading
+
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
CVar v;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, v.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 0, &v) );
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 0, &v) );
CPPUNIT_ASSERT_EQUAL(TT_STRING, v.type);
CPPUNIT_ASSERT_EQUAL(std::string("pH"), std::string(v.sVal));
CVar vval;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, vval.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &vval));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &vval));
CPPUNIT_ASSERT_EQUAL(TT_DOUBLE, vval.type);
CPPUNIT_ASSERT_EQUAL(7.0, vval.dVal);
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackDouble("pH", 8.0));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(3u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackDouble("pH", 8.0));
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(3u, co.GetRowCount());
CVar vval3;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, vval3.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &vval3));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &vval3));
CPPUNIT_ASSERT_EQUAL(TT_DOUBLE, vval3.type);
CPPUNIT_ASSERT_EQUAL(7.0, vval3.dVal);
CVar vval2;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, vval2.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(2, 0, &vval2));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(2, 0, &vval2));
CPPUNIT_ASSERT_EQUAL(TT_DOUBLE, vval2.type);
CPPUNIT_ASSERT_EQUAL(8.0, vval2.dVal);
}
@@ -323,45 +362,49 @@ TestSelectedOutput::TestEndRow()
void
TestSelectedOutput::TestEndRow2()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackDouble("pH", 6.0));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackDouble("pH", 7.0));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackDouble("pH", 8.0));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackDouble("pH", 9.0));
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackDouble("pH", 6.0));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackDouble("pH", 7.0));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackDouble("pH", 8.0));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackDouble("pH", 9.0));
+
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
CVar v;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, v.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 0, &v) );
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 0, &v) );
CPPUNIT_ASSERT_EQUAL(TT_STRING, v.type);
CPPUNIT_ASSERT_EQUAL(std::string("pH"), std::string(v.sVal));
CVar vval;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, vval.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &vval));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &vval));
CPPUNIT_ASSERT_EQUAL(TT_DOUBLE, vval.type);
CPPUNIT_ASSERT_EQUAL(9.0, vval.dVal); // dups get overwritten
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackDouble("pH", 8.0));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(3u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackDouble("pH", 8.0));
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(3u, co.GetRowCount());
CVar vval3;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, vval3.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &vval3));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &vval3));
CPPUNIT_ASSERT_EQUAL(TT_DOUBLE, vval3.type);
CPPUNIT_ASSERT_EQUAL(9.0, vval3.dVal);
CVar vval2;
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, vval2.type);
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(2, 0, &vval2));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(2, 0, &vval2));
CPPUNIT_ASSERT_EQUAL(TT_DOUBLE, vval2.type);
CPPUNIT_ASSERT_EQUAL(8.0, vval2.dVal);
}
@@ -370,138 +413,148 @@ TestSelectedOutput::TestEndRow2()
void
TestSelectedOutput::TestTooManyHeadings()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
-
- // USER_PUNCH
- // -headings 1.name 1.type 1.moles
-
- n_user_punch_index = 0;
- user_punch_headings = NULL;
- user_punch_count_headings = 0;
-
- user_punch_headings = (char**)::realloc(user_punch_headings, (size_t) (user_punch_count_headings + 1) * sizeof(char *));
- user_punch_headings[user_punch_count_headings] = ::strdup("1.name");
- user_punch_count_headings++;
-
- user_punch_headings = (char**)::realloc(user_punch_headings, (size_t) (user_punch_count_headings + 1) * sizeof(char *));
- user_punch_headings[user_punch_count_headings] = ::strdup("1.type");
- user_punch_count_headings++;
-
- user_punch_headings = (char**)::realloc(user_punch_headings, (size_t) (user_punch_count_headings + 1) * sizeof(char *));
- user_punch_headings[user_punch_count_headings] = ::strdup("1.moles");
- user_punch_count_headings++;
-
- CPPUNIT_ASSERT_EQUAL(0, ::EndRow());
- CPPUNIT_ASSERT_EQUAL(3u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
-#if defined(_DEBUG)
- CSelectedOutput::Instance()->Dump("TestTooManyHeadings");
-#endif
-
- // clean up headings
- //
- for (int i = 0; i < user_punch_count_headings; ++i) {
- ::free(user_punch_headings[i]);
- }
- ::free(user_punch_headings);
- user_punch_headings = NULL;
- user_punch_count_headings = 0;
-
- CVar head0, head1, head2;
- CVar val0, val1, val2;
-
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 0, &head0));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 1, &head1));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 2, &head2));
-
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &val0));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 1, &val1));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 2, &val2));
-
- CPPUNIT_ASSERT_EQUAL(TT_STRING, head0.type);
- CPPUNIT_ASSERT_EQUAL(TT_STRING, head1.type);
- CPPUNIT_ASSERT_EQUAL(TT_STRING, head2.type);
-
- CPPUNIT_ASSERT_EQUAL(TT_EMPTY, val0.type);
- CPPUNIT_ASSERT_EQUAL(TT_EMPTY, val1.type);
- CPPUNIT_ASSERT_EQUAL(TT_EMPTY, val2.type);
-
- CPPUNIT_ASSERT_EQUAL(std::string("1.name"), std::string(head0.sVal));
- CPPUNIT_ASSERT_EQUAL(std::string("1.type"), std::string(head1.sVal));
- CPPUNIT_ASSERT_EQUAL(std::string("1.moles"), std::string(head2.sVal));
-
-
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackLong("sim", 1));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackString("state", "i_soln"));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackLong("soln", 22));
-
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(6u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(3u, CSelectedOutput::Instance()->GetRowCount());
-#if defined(_DEBUG)
- CSelectedOutput::Instance()->Dump("TestTooManyHeadings");
-#endif
+// COMMENT: {3/4/2010 5:12:41 PM} CSelectedOutput co;
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} co.Clear();
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} // USER_PUNCH
+// COMMENT: {3/4/2010 5:12:41 PM} // -headings 1.name 1.type 1.moles
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} IPhreeqc p;
+// COMMENT: {3/4/2010 5:12:41 PM} p.do_initialize();
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} p.n_user_punch_index = 0;
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_headings = 0;
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_count_headings = 0;
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_headings = (char**)::realloc(p.user_punch_headings, (size_t) (p.user_punch_count_headings + 1) * sizeof(char *));
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_headings[p.user_punch_count_headings] = ::strdup("1.name");
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_count_headings++;
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_headings = (char**)::realloc(p.user_punch_headings, (size_t) (p.user_punch_count_headings + 1) * sizeof(char *));
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_headings[p.user_punch_count_headings] = ::strdup("1.type");
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_count_headings++;
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_headings = (char**)::realloc(p.user_punch_headings, (size_t) (p.user_punch_count_headings + 1) * sizeof(char *));
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_headings[p.user_punch_count_headings] = ::strdup("1.moles");
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_count_headings++;
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(0, p.EndRow());
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(3u, co.GetColCount());
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM}#if defined(_DEBUG)
+// COMMENT: {3/4/2010 5:12:41 PM} co.Dump("TestTooManyHeadings");
+// COMMENT: {3/4/2010 5:12:41 PM}#endif
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} // clean up headings
+// COMMENT: {3/4/2010 5:12:41 PM} //
+// COMMENT: {3/4/2010 5:12:41 PM} for (int i = 0; i < p.user_punch_count_headings; ++i)
+// COMMENT: {3/4/2010 5:12:41 PM} {
+// COMMENT: {3/4/2010 5:12:41 PM} ::free(p.user_punch_headings[i]);
+// COMMENT: {3/4/2010 5:12:41 PM} }
+// COMMENT: {3/4/2010 5:12:41 PM} ::free(p.user_punch_headings);
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_headings = NULL;
+// COMMENT: {3/4/2010 5:12:41 PM} p.user_punch_count_headings = 0;
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} CVar head0, head1, head2;
+// COMMENT: {3/4/2010 5:12:41 PM} CVar val0, val1, val2;
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 0, &head0));
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 1, &head1));
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 2, &head2));
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &val0));
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 1, &val1));
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 2, &val2));
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(TT_STRING, head0.type);
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(TT_STRING, head1.type);
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(TT_STRING, head2.type);
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(TT_EMPTY, val0.type);
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(TT_EMPTY, val1.type);
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(TT_EMPTY, val2.type);
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(std::string("1.name"), std::string(head0.sVal));
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(std::string("1.type"), std::string(head1.sVal));
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(std::string("1.moles"), std::string(head2.sVal));
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(0, co.PushBackLong("sim", 1));
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(0, co.PushBackString("state", "i_soln"));
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(0, co.PushBackLong("soln", 22));
+// COMMENT: {3/4/2010 5:12:41 PM}
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(6u, co.GetColCount());
+// COMMENT: {3/4/2010 5:12:41 PM} CPPUNIT_ASSERT_EQUAL(3u, co.GetRowCount());
+// COMMENT: {3/4/2010 5:12:41 PM}#if defined(_DEBUG)
+// COMMENT: {3/4/2010 5:12:41 PM} co.Dump("TestTooManyHeadings");
+// COMMENT: {3/4/2010 5:12:41 PM}#endif
}
void
TestSelectedOutput::TestNotEnoughHeadings()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
+
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
// USER_PUNCH
// -headings 1.name 1.type 1.moles
- n_user_punch_index = 0;
- user_punch_headings = NULL;
- user_punch_count_headings = 0;
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackLong("sim", 1));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackString("state", "i_soln"));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackLong("soln", 22));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackLong("sim", 1));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackString("state", "i_soln"));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackLong("soln", 22));
-
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(3u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(3u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
#if defined(_DEBUG)
- CSelectedOutput::Instance()->Dump("TestNotEnoughHeadings");
+ co.Dump("TestNotEnoughHeadings");
#endif
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackLong("sim", 2));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackString("state", "react"));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackLong("soln", 23));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackLong("sim", 2));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackString("state", "react"));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackLong("soln", 23));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackEmpty("no_heading_1"));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackEmpty("no_heading_2"));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackEmpty("no_heading_3"));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackEmpty("no_heading_1"));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackEmpty("no_heading_2"));
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackEmpty("no_heading_3"));
#if defined(_DEBUG)
- CSelectedOutput::Instance()->Dump("TestNotEnoughHeadings");
+ co.Dump("TestNotEnoughHeadings");
#endif
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(6u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(3u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(6u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(3u, co.GetRowCount());
CVar head0, head1, head2, head3, head4, head5;
CVar val0, val1, val2, val3, val4, val5;
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 0, &head0));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 1, &head1));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 2, &head2));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 3, &head3));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 4, &head4));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 5, &head5));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 0, &head0));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 1, &head1));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 2, &head2));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 3, &head3));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 4, &head4));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 5, &head5));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &val0));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 1, &val1));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 2, &val2));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 3, &val3));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 4, &val4));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 5, &val5));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &val0));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 1, &val1));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 2, &val2));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 3, &val3));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 4, &val4));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 5, &val5));
CPPUNIT_ASSERT_EQUAL(TT_STRING, head0.type);
CPPUNIT_ASSERT_EQUAL(TT_STRING, head1.type);
@@ -524,7 +577,6 @@ TestSelectedOutput::TestNotEnoughHeadings()
CPPUNIT_ASSERT_EQUAL(std::string("no_heading_2"), std::string(head4.sVal));
CPPUNIT_ASSERT_EQUAL(std::string("no_heading_3"), std::string(head5.sVal));
-
CPPUNIT_ASSERT_EQUAL(1l, val0.lVal);
CPPUNIT_ASSERT_EQUAL(std::string("i_soln"), std::string(val1.sVal));
CPPUNIT_ASSERT_EQUAL(22l, val2.lVal);
@@ -533,34 +585,38 @@ TestSelectedOutput::TestNotEnoughHeadings()
void
TestSelectedOutput::TestInvalidRow()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
+
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
CVar v;
- CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, CSelectedOutput::Instance()->Get(0, 0, &v));
+ CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, co.Get(0, 0, &v));
CPPUNIT_ASSERT_EQUAL(TT_ERROR, v.type);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, v.vresult);
- CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, CSelectedOutput::Instance()->Get(-1, -1, &v));
+ CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, co.Get(-1, -1, &v));
CPPUNIT_ASSERT_EQUAL(TT_ERROR, v.type);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, v.vresult);
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackEmpty("heading"));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackEmpty("heading"));
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 0, &v) );
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 0, &v) );
CPPUNIT_ASSERT_EQUAL(TT_STRING, v.type);
CPPUNIT_ASSERT_EQUAL(std::string("heading"), std::string(v.sVal));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &v));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &v));
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, v.type);
- CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, CSelectedOutput::Instance()->Get(2, 0, &v));
+ CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, co.Get(2, 0, &v));
CPPUNIT_ASSERT_EQUAL(TT_ERROR, v.type);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, v.vresult);
}
@@ -568,38 +624,42 @@ TestSelectedOutput::TestInvalidRow()
void
TestSelectedOutput::TestInvalidCol()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
+
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
CVar v;
- CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, CSelectedOutput::Instance()->Get(0, 0, &v));
+ CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, co.Get(0, 0, &v));
CPPUNIT_ASSERT_EQUAL(TT_ERROR, v.type);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, v.vresult);
- CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, CSelectedOutput::Instance()->Get(-1, -1, &v));
+ CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, co.Get(-1, -1, &v));
CPPUNIT_ASSERT_EQUAL(TT_ERROR, v.type);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, v.vresult);
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackEmpty("heading"));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackEmpty("heading"));
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(0, 0, &v) );
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(0, 0, &v) );
CPPUNIT_ASSERT_EQUAL(TT_STRING, v.type);
CPPUNIT_ASSERT_EQUAL(std::string("heading"), std::string(v.sVal));
- CPPUNIT_ASSERT_EQUAL(VR_OK, CSelectedOutput::Instance()->Get(1, 0, &v));
+ CPPUNIT_ASSERT_EQUAL(VR_OK, co.Get(1, 0, &v));
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, v.type);
- CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, CSelectedOutput::Instance()->Get(0, 1, &v));
+ CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, co.Get(0, 1, &v));
CPPUNIT_ASSERT_EQUAL(TT_ERROR, v.type);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, v.vresult);
- CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, CSelectedOutput::Instance()->Get(0, -1, &v));
+ CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, co.Get(0, -1, &v));
CPPUNIT_ASSERT_EQUAL(TT_ERROR, v.type);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, v.vresult);
}
@@ -607,40 +667,48 @@ TestSelectedOutput::TestInvalidCol()
void
TestSelectedOutput::TestGet()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackEmpty("heading"));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
+
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackEmpty("heading"));
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
- CVar v0 = CSelectedOutput::Instance()->Get(0, 0);
+ CVar v0 = co.Get(0, 0);
CPPUNIT_ASSERT_EQUAL(TT_STRING, v0.type);
CPPUNIT_ASSERT_EQUAL(std::string("heading"), std::string(v0.sVal));
- CVar v1 = CSelectedOutput::Instance()->Get(1, 0);
+ CVar v1 = co.Get(1, 0);
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, v1.type);
}
void
TestSelectedOutput::TestLongHeadings()
{
- CSelectedOutput::Instance()->Clear();
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(0u, CSelectedOutput::Instance()->GetRowCount());
+ CSelectedOutput co;
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->PushBackEmpty("heading890123456789012345678901234567890123456789"));
- CPPUNIT_ASSERT_EQUAL(0, CSelectedOutput::Instance()->EndRow());
- CPPUNIT_ASSERT_EQUAL(1u, CSelectedOutput::Instance()->GetColCount());
- CPPUNIT_ASSERT_EQUAL(2u, CSelectedOutput::Instance()->GetRowCount());
+ co.Clear();
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(0u, co.GetRowCount());
- CVar v0 = CSelectedOutput::Instance()->Get(0, 0);
+ CPPUNIT_ASSERT_EQUAL(0, co.PushBackEmpty("heading890123456789012345678901234567890123456789"));
+ CPPUNIT_ASSERT_EQUAL(0, co.EndRow());
+ CPPUNIT_ASSERT_EQUAL(1u, co.GetColCount());
+ CPPUNIT_ASSERT_EQUAL(2u, co.GetRowCount());
+
+ CVar v0 = co.Get(0, 0);
CPPUNIT_ASSERT_EQUAL(TT_STRING, v0.type);
CPPUNIT_ASSERT_EQUAL(std::string("heading890123456789012345678901234567890123456789"), std::string(v0.sVal));
- CVar v1 = CSelectedOutput::Instance()->Get(1, 0);
+ CVar v1 = co.Get(1, 0);
CPPUNIT_ASSERT_EQUAL(TT_EMPTY, v1.type);
}
diff --git a/unit/unit.vcproj b/unit/unit.vcproj
index 6e9b4fda..f51b42aa 100644
--- a/unit/unit.vcproj
+++ b/unit/unit.vcproj
@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""$(DEV_CPPUNIT_1.10)/include";../include;../src;../src/phreeqcpp;../src/phreeqcpp/phreeqc"
- PreprocessorDefinitions="SWIG_SHARED_OBJ;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="SWIG_SHARED_OBJ;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_WARNINGS;PHREEQC_CPP;PHREEQC_CLASS;USE_PHRQ_ALLOC"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@@ -224,7 +224,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""$(DEV_CPPUNIT_1.10)/include";../include;../src;../src/phreeqcpp;../src/phreeqcpp/phreeqc"
- PreprocessorDefinitions="WIN32_MEMORY_DEBUG;SWIG_SHARED_OBJ;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN32_MEMORY_DEBUG;SWIG_SHARED_OBJ;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_WARNINGS;PHREEQC_CPP;PHREEQC_CLASS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@@ -453,6 +453,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+