alphabetized src/IPhreeqcLib.cpp; added ClearAccumulatedLines routines

git-svn-id: svn://136.177.114.72/svn_GW/IPhreeqc/trunk@4408 1feff8c3-07ed-0310-ac33-dd36852eb9cd
This commit is contained in:
Scott R Charlton 2010-05-17 21:59:43 +00:00
parent 502ee6ba6a
commit 93926c9b29
11 changed files with 390 additions and 253 deletions

View File

@ -85,7 +85,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="mkdir lib &gt; NUL&#x0D;&#x0A;copy &quot;$(TargetDir)$(TargetName).lib&quot; &quot;lib\$(TargetName).lib&quot;"
CommandLine="mkdir lib &gt; NUL&#x0D;&#x0A;copy &quot;$(TargetDir)$(TargetName).lib&quot; &quot;lib\$(TargetName).lib&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@ -157,7 +157,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="mkdir libx64 &gt; NUL&#x0D;&#x0A;copy &quot;$(TargetDir)$(TargetName).lib&quot; &quot;libx64\$(TargetName).lib&quot;"
CommandLine="mkdir libx64 &gt; NUL&#x0D;&#x0A;copy &quot;$(TargetDir)$(TargetName).lib&quot; &quot;libx64\$(TargetName).lib&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@ -229,7 +229,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="mkdir lib &gt; NUL&#x0D;&#x0A;copy &quot;$(TargetDir)$(TargetName).lib&quot; &quot;lib\$(TargetName).lib&quot;"
CommandLine="mkdir lib &gt; NUL&#x0D;&#x0A;copy &quot;$(TargetDir)$(TargetName).lib&quot; &quot;lib\$(TargetName).lib&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@ -802,6 +802,42 @@
RelativePath=".\src\IPhreeqc.cpp"
>
</File>
<File
RelativePath=".\src\IPhreeqcF.f"
>
<FileConfiguration
Name="Release|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCustomBuildTool"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCustomBuildTool"
/>
</FileConfiguration>
<FileConfiguration
Name="ReleaseDll|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCustomBuildTool"
/>
</FileConfiguration>
<FileConfiguration
Name="DebugDll|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCustomBuildTool"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\IPhreeqcLib.cpp"
>

View File

@ -72,6 +72,15 @@ extern "C" {
DLL_EXPORT int AddError(int id, const char* error_msg);
/**
* Clears the accumulated input buffer. Input buffer is accumulated from calls to \ref AccumulateLine.
* @retval IPQ_OK Success.
* @retval IPQ_BADINSTANCE The given id is invalid.
* @see AccumulateLine, OutputLines, RunAccumulated
*/
DLL_EXPORT IPQ_RESULT ClearAccumulatedLines(int id);
/**
* Create a new IPhreeqc instance.
* @return A non-negative value if successful; otherwise a negative value indicates an error occured (see \ref IPQ_RESULT).

View File

@ -80,7 +80,7 @@ public:
/**
* Clears the accumulated input buffer. Input buffer is accumulated from calls to \ref AccumulateLine.
* @see AccumulateLine, GetAccumulatedLines, RunAccumulated
* @see AccumulateLine, GetAccumulatedLines, OutputLines, RunAccumulated
*/
void ClearAccumulatedLines(void);

View File

@ -7,6 +7,14 @@
INTEGER(KIND=4) :: AccumulateLineF
AccumulateLine = AccumulateLineF(ID,LINE)
END FUNCTION AccumulateLine
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
FUNCTION ClearAccumulatedLines(ID)
IMPLICIT NONE
INTEGER(KIND=4) :: ID
INTEGER(KIND=4) :: ClearAccumulatedLines
INTEGER(KIND=4) :: ClearAccumulatedLinesF
ClearAccumulatedLines = ClearAccumulatedLinesF(ID)
END FUNCTION ClearAccumulatedLines
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
FUNCTION CreateIPhreeqc()
IMPLICIT NONE

View File

@ -17,147 +17,63 @@ private:
static size_t InstancesIndex;
};
IPQ_RESULT
AccumulateLine(int id, const char *line)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
switch (IPhreeqcPtr->AccumulateLine(line))
{
case VR_OK:
return IPQ_OK;
case VR_OUTOFMEMORY:
return IPQ_OUTOFMEMORY;
default:
assert(false);
}
}
return IPQ_BADINSTANCE;
}
int
AddError(int id, const char* error_msg)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return (int)IPhreeqcPtr->AddError(error_msg);
}
return IPQ_BADINSTANCE;
}
// TODO AddWarning
int
CreateIPhreeqc(void)
{
return IPhreeqcLib::CreateIPhreeqc();
}
IPQ_RESULT
ClearAccumulatedLines(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->ClearAccumulatedLines();
return IPQ_OK;
}
return IPQ_BADINSTANCE;
}
IPQ_RESULT
DestroyIPhreeqc(int id)
{
return IPhreeqcLib::DestroyIPhreeqc(id);
}
int
LoadDatabase(int id, const char* filename)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->LoadDatabase(filename);
}
return IPQ_BADINSTANCE;
}
int
LoadDatabaseString(int id, const char* input)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->LoadDatabaseString(input);
}
return IPQ_BADINSTANCE;
}
IPQ_RESULT
UnLoadDatabase(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->UnLoadDatabase();
return IPQ_OK;
}
return IPQ_BADINSTANCE;
}
void
OutputError(int id)
{
static const char err_msg[] = "OutputError: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->OutputError();
return;
}
std::cout << err_msg << std::endl;
}
void
OutputWarning(int id)
{
static const char err_msg[] = "OutputWarning: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->OutputWarning();
return;
}
std::cout << err_msg << std::endl;
}
const char*
GetErrorString(int id)
{
static const char err_msg[] = "GetErrorString: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetErrorString();
}
return err_msg;
}
const char*
GetWarningString(int id)
{
static const char err_msg[] = "GetWarningString: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetWarningString();
}
return err_msg;
}
const char*
GetDumpString(int id)
{
static const char empty[] = "";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetDumpString();
}
return empty;
}
int
GetDumpLineCount(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetDumpLineCount();
}
return 0;
}
const char*
GetDumpLine(int id, int n)
{
static const char err_msg[] = "GetDumpLine: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetDumpLine(n);
}
return err_msg;
}
int
GetComponentCount(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return (int)IPhreeqcPtr->ListComponents().size();
}
return IPQ_BADINSTANCE;
}
// TODO Maybe GetAccumulatedLines
const char*
GetComponent(int id, int n)
@ -185,32 +101,47 @@ GetComponent(int id, int n)
return err_msg;
}
IPQ_RESULT
AccumulateLine(int id, const char *line)
int
GetComponentCount(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
switch (IPhreeqcPtr->AccumulateLine(line))
{
case VR_OK:
return IPQ_OK;
case VR_OUTOFMEMORY:
return IPQ_OUTOFMEMORY;
default:
assert(false);
}
return (int)IPhreeqcPtr->ListComponents().size();
}
return IPQ_BADINSTANCE;
}
const char*
GetDumpLine(int id, int n)
{
static const char err_msg[] = "GetDumpLine: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetDumpLine(n);
}
return err_msg;
}
int
GetSelectedOutputOn(int id)
GetDumpLineCount(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
if (IPhreeqcPtr->GetSelectedOutputOn())
return IPhreeqcPtr->GetDumpLineCount();
}
return 0;
}
int
GetDumpOn(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
if (IPhreeqcPtr->GetDumpOn())
{
return 1;
}
@ -222,25 +153,25 @@ GetSelectedOutputOn(int id)
return IPQ_BADINSTANCE;
}
IPQ_RESULT
SetSelectedOutputOn(int id, int value)
const char*
GetDumpString(int id)
{
static const char empty[] = "";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->SetSelectedOutputOn(value != 0);
return IPQ_OK;
return IPhreeqcPtr->GetDumpString();
}
return IPQ_BADINSTANCE;
return empty;
}
int
GetOutputOn(int id)
GetDumpStringOn(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
if (IPhreeqcPtr->GetOutputOn())
if (IPhreeqcPtr->GetDumpStringOn())
{
return 1;
}
@ -252,14 +183,25 @@ GetOutputOn(int id)
return IPQ_BADINSTANCE;
}
IPQ_RESULT
SetOutputOn(int id, int value)
const char*
GetErrorLine(int id, int n)
{
static const char err_msg[] = "GetErrorLine: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetErrorLine(n);
}
return err_msg;
}
int
GetErrorLineCount(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->SetOutputOn(value != 0);
return IPQ_OK;
return (int)IPhreeqcPtr->GetErrorLineCount();
}
return IPQ_BADINSTANCE;
}
@ -282,16 +224,16 @@ GetErrorOn(int id)
return IPQ_BADINSTANCE;
}
IPQ_RESULT
SetErrorOn(int id, int value)
const char*
GetErrorString(int id)
{
static const char err_msg[] = "GetErrorString: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->SetErrorOn(value != 0);
return IPQ_OK;
return IPhreeqcPtr->GetErrorString();
}
return IPQ_BADINSTANCE;
return err_msg;
}
int
@ -312,26 +254,13 @@ GetLogOn(int id)
return IPQ_BADINSTANCE;
}
IPQ_RESULT
SetLogOn(int id, int value)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->SetLogOn(value != 0);
return IPQ_OK;
}
return IPQ_BADINSTANCE;
}
int
GetDumpOn(int id)
GetOutputOn(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
if (IPhreeqcPtr->GetDumpOn())
if (IPhreeqcPtr->GetOutputOn())
{
return 1;
}
@ -343,25 +272,24 @@ GetDumpOn(int id)
return IPQ_BADINSTANCE;
}
IPQ_RESULT
SetDumpOn(int id, int value)
int
GetSelectedOutputColumnCount(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->SetDumpOn(value != 0);
return IPQ_OK;
return IPhreeqcPtr->GetSelectedOutputColumnCount();
}
return IPQ_BADINSTANCE;
}
int
GetDumpStringOn(int id)
GetSelectedOutputOn(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
if (IPhreeqcPtr->GetDumpStringOn())
if (IPhreeqcPtr->GetSelectedOutputOn())
{
return 1;
}
@ -373,18 +301,134 @@ GetDumpStringOn(int id)
return IPQ_BADINSTANCE;
}
IPQ_RESULT
SetDumpStringOn(int id, int value)
int
GetSelectedOutputRowCount(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->SetDumpStringOn(value != 0);
return IPQ_OK;
return IPhreeqcPtr->GetSelectedOutputRowCount();
}
return IPQ_BADINSTANCE;
}
IPQ_RESULT
GetSelectedOutputValue(int id, int row, int col, VAR* pVAR)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
switch(IPhreeqcPtr->GetSelectedOutputValue(row, col, pVAR))
{
case VR_OK: return IPQ_OK;
case VR_OUTOFMEMORY: return IPQ_OUTOFMEMORY;
case VR_BADVARTYPE: return IPQ_BADVARTYPE;
case VR_INVALIDARG: return IPQ_INVALIDARG;
case VR_INVALIDROW: return IPQ_INVALIDROW;
case VR_INVALIDCOL: return IPQ_INVALIDCOL;
default:
assert(false);
}
}
return IPQ_BADINSTANCE;
}
const char*
GetWarningLine(int id, int n)
{
static const char err_msg[] = "GetWarningLine: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetWarningLine(n);
}
return err_msg;
}
int
GetWarningLineCount(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return (int)IPhreeqcPtr->GetWarningLineCount();
}
return IPQ_BADINSTANCE;
}
const char*
GetWarningString(int id)
{
static const char err_msg[] = "GetWarningString: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetWarningString();
}
return err_msg;
}
int
LoadDatabase(int id, const char* filename)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->LoadDatabase(filename);
}
return IPQ_BADINSTANCE;
}
int
LoadDatabaseString(int id, const char* input)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->LoadDatabaseString(input);
}
return IPQ_BADINSTANCE;
}
void
OutputError(int id)
{
static const char err_msg[] = "OutputError: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->OutputError();
return;
}
std::cout << err_msg << std::endl;
}
void
OutputLines(int id)
{
static const char err_msg[] = "OutputLines: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->OutputLines();
return;
}
std::cout << err_msg << std::endl;
}
void
OutputWarning(int id)
{
static const char err_msg[] = "OutputWarning: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->OutputWarning();
return;
}
std::cout << err_msg << std::endl;
}
int
RunAccumulated(int id)
{
@ -418,120 +462,93 @@ RunString(int id, const char* input)
return IPQ_BADINSTANCE;
}
int
GetSelectedOutputRowCount(int id)
IPQ_RESULT
SetDumpOn(int id, int value)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetSelectedOutputRowCount();
IPhreeqcPtr->SetDumpOn(value != 0);
return IPQ_OK;
}
return IPQ_BADINSTANCE;
}
int
GetSelectedOutputColumnCount(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetSelectedOutputColumnCount();
}
return IPQ_BADINSTANCE;
}
IPQ_RESULT
GetSelectedOutputValue(int id, int row, int col, VAR* pVAR)
SetDumpStringOn(int id, int value)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
switch(IPhreeqcPtr->GetSelectedOutputValue(row, col, pVAR))
{
case VR_OK: return IPQ_OK;
case VR_OUTOFMEMORY: return IPQ_OUTOFMEMORY;
case VR_BADVARTYPE: return IPQ_BADVARTYPE;
case VR_INVALIDARG: return IPQ_INVALIDARG;
case VR_INVALIDROW: return IPQ_INVALIDROW;
case VR_INVALIDCOL: return IPQ_INVALIDCOL;
default:
assert(false);
}
IPhreeqcPtr->SetDumpStringOn(value != 0);
return IPQ_OK;
}
return IPQ_BADINSTANCE;
}
int
AddError(int id, const char* error_msg)
IPQ_RESULT
SetErrorOn(int id, int value)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return (int)IPhreeqcPtr->AddError(error_msg);
IPhreeqcPtr->SetErrorOn(value != 0);
return IPQ_OK;
}
return IPQ_BADINSTANCE;
}
void
OutputLines(int id)
{
static const char err_msg[] = "OutputLines: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->OutputLines();
return;
}
std::cout << err_msg << std::endl;
}
int
GetErrorLineCount(int id)
IPQ_RESULT
SetLogOn(int id, int value)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return (int)IPhreeqcPtr->GetErrorLineCount();
IPhreeqcPtr->SetLogOn(value != 0);
return IPQ_OK;
}
return IPQ_BADINSTANCE;
}
const char*
GetErrorLine(int id, int n)
{
static const char err_msg[] = "GetErrorLine: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetErrorLine(n);
}
return err_msg;
}
int
GetWarningLineCount(int id)
IPQ_RESULT
SetOutputOn(int id, int value)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return (int)IPhreeqcPtr->GetWarningLineCount();
IPhreeqcPtr->SetOutputOn(value != 0);
return IPQ_OK;
}
return IPQ_BADINSTANCE;
}
const char*
GetWarningLine(int id, int n)
IPQ_RESULT
SetSelectedOutputOn(int id, int value)
{
static const char err_msg[] = "GetWarningLine: Invalid instance id.\n";
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetWarningLine(n);
IPhreeqcPtr->SetSelectedOutputOn(value != 0);
return IPQ_OK;
}
return err_msg;
return IPQ_BADINSTANCE;
}
IPQ_RESULT
UnLoadDatabase(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
IPhreeqcPtr->UnLoadDatabase();
return IPQ_OK;
}
return IPQ_BADINSTANCE;
}
// helper functions
//
std::map<size_t, IPhreeqc*> IPhreeqcLib::Instances;
size_t IPhreeqcLib::InstancesIndex = 0;

View File

@ -54,6 +54,12 @@ AccumulateLineF(int *id, char *line, unsigned int line_length)
return n;
}
IPQ_RESULT
ClearAccumulatedLinesF(int *id)
{
return ::ClearAccumulatedLines(*id);
}
int
CreateIPhreeqcF(void)
{
@ -357,6 +363,10 @@ DLL_EXPORT int __stdcall ACCUMULATELINE(int *id, char *line, unsigned int len)
{
return AccumulateLineF(id, line, len);
}
DLL_EXPORT int __stdcall CLEARACCUMULATEDLINES(int *id)
{
return ClearAccumulatedLinesF(id);
}
DLL_EXPORT int __stdcall CREATEIPHREEQC(void)
{
return CreateIPhreeqcF();

View File

@ -9,6 +9,7 @@
#if defined(FC_FUNC)
#define AccumulateLineF FC_FUNC (accumulatelinef, ACCUMULATELINEF)
#define ClearAccumulatedLinesF FC_FUNC (clearaccumulatedlinesf, CLEARACCUMULATEDLINESF)
#define CreateIPhreeqcF FC_FUNC (createiphreeqcf, CREATEIPHREEQCF)
#define DestroyIPhreeqcF FC_FUNC (destroyiphreeqcf, DESTROYIPHREEQCF)
#define GetComponentCountF FC_FUNC (getcomponentcountf, GETCOMPONENTCOUNTF)
@ -50,6 +51,7 @@ extern "C" {
#endif
IPQ_RESULT AccumulateLineF(int *id, char *line, unsigned int line_length);
IPQ_RESULT ClearAccumulatedLinesF(int *id);
int CreateIPhreeqcF(void);
int DestroyIPhreeqcF(int *id);
int GetComponentCountF(int *id);

View File

@ -15,6 +15,10 @@ DLL_EXPORT int ACCUMULATELINE(int *id, char *line, unsigned int len)
{
return AccumulateLineF(id, line, len);
}
DLL_EXPORT int CLEARACCUMULATEDLINES(int *id)
{
return ClearAccumulatedLinesF(id);
}
DLL_EXPORT int CREATEIPHREEQC(void)
{
return CreateIPhreeqcF();

View File

@ -14,6 +14,10 @@ DLL_EXPORT int accumulateline_(int *id, char *line, unsigned int len)
{
return AccumulateLineF(id, line, len);
}
DLL_EXPORT int clearaccumulatedlines_(int *id)
{
return ClearAccumulatedLinesF(id);
}
DLL_EXPORT int createiphreeqc_(void)
{
return CreateIPhreeqcF();

View File

@ -2031,3 +2031,48 @@ void TestIPhreeqcLib::TestPitzer(void)
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::DestroyIPhreeqc(id));
}
}
void TestIPhreeqcLib::TestClearAccumulatedLines(void)
{
CPPUNIT_ASSERT_EQUAL(true, ::FileExists("../database/wateq4f.dat"));
int id = ::CreateIPhreeqc();
CPPUNIT_ASSERT(id >= 0);
CPPUNIT_ASSERT_EQUAL(::LoadDatabase(id, "../database/wateq4f.dat"), 0);
CPPUNIT_ASSERT_EQUAL(::AccumulateLine(id, "SOLUTION 1"), IPQ_OK);
CPPUNIT_ASSERT_EQUAL(::AccumulateLine(id, "pH -2"), IPQ_OK);
CPPUNIT_ASSERT_EQUAL(::AccumulateLine(id, "END"), IPQ_OK);
CPPUNIT_ASSERT_EQUAL(::RunAccumulated(id), 1);
CPPUNIT_ASSERT_EQUAL( 3, ::GetErrorLineCount(id) );
CPPUNIT_ASSERT_EQUAL( std::string("ERROR: A(H2O) Activity of water has not converged. Residual: 1.590343e+000"), std::string(::GetErrorLine(id, 0)) );
CPPUNIT_ASSERT_EQUAL( std::string(""), std::string(::GetErrorLine(id, 1)) );
CPPUNIT_ASSERT_EQUAL( std::string("ERROR: Model failed to converge for initial solution."), std::string(::GetErrorLine(id, 2)) );
CPPUNIT_ASSERT_EQUAL(::AccumulateLine(id, "SOLUTION 1"), IPQ_OK);
CPPUNIT_ASSERT_EQUAL(::AccumulateLine(id, "pH 2"), IPQ_OK);
CPPUNIT_ASSERT_EQUAL(::AccumulateLine(id, "END"), IPQ_OK);
CPPUNIT_ASSERT_EQUAL(::RunAccumulated(id), 1);
CPPUNIT_ASSERT_EQUAL( 3, ::GetErrorLineCount(id) );
CPPUNIT_ASSERT_EQUAL( std::string("ERROR: A(H2O) Activity of water has not converged. Residual: 1.590343e+000"), std::string(::GetErrorLine(id, 0)) );
CPPUNIT_ASSERT_EQUAL( std::string(""), std::string(::GetErrorLine(id, 1)) );
CPPUNIT_ASSERT_EQUAL( std::string("ERROR: Model failed to converge for initial solution."), std::string(::GetErrorLine(id, 2)) );
CPPUNIT_ASSERT_EQUAL( IPQ_OK, ::ClearAccumulatedLines(id) );
CPPUNIT_ASSERT_EQUAL(::AccumulateLine(id, "SOLUTION 1"), IPQ_OK);
CPPUNIT_ASSERT_EQUAL(::AccumulateLine(id, "pH 2"), IPQ_OK);
CPPUNIT_ASSERT_EQUAL(::AccumulateLine(id, "END"), IPQ_OK);
CPPUNIT_ASSERT_EQUAL(::RunAccumulated(id), 0);
if (id >= 0)
{
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::DestroyIPhreeqc(id));
}
}

View File

@ -44,6 +44,7 @@ class TestIPhreeqcLib : public CppUnit::TestFixture
CPPUNIT_TEST( TestGetErrorLine );
CPPUNIT_TEST( TestGetWarningLine );
CPPUNIT_TEST( TestPitzer );
CPPUNIT_TEST( TestClearAccumulatedLines );
CPPUNIT_TEST_SUITE_END();
public:
@ -87,6 +88,7 @@ public:
void TestGetErrorLine(void);
void TestGetWarningLine(void);
void TestPitzer(void);
void TestClearAccumulatedLines(void);
protected: