mirror of
https://git.gfz-potsdam.de/naaice/iphreeqc.git
synced 2025-12-15 16:18:22 +01:00
25f24721 fixed compiler warnings except NAN 3f24bf17 moved enum to RMVARS.h 54045123 changed all double precision to real(kind=8) in all files. Compiles and runs test cases. git-subtree-dir: src git-subtree-split: 25f2472130c22c1a63e15f0fa58f1021c83a7b4a
163 lines
2.6 KiB
C++
163 lines
2.6 KiB
C++
#ifndef INC_CVAR_HXX
|
|
#define INC_CVAR_HXX
|
|
|
|
#include "Var.h"
|
|
#include <ostream> // std::ostream
|
|
|
|
class CVar : public VAR
|
|
{
|
|
// Constructors
|
|
public:
|
|
CVar(void) throw()
|
|
{
|
|
::VarInit(this);
|
|
}
|
|
~CVar(void) //throw()
|
|
{
|
|
Clear();
|
|
}
|
|
CVar(const VAR& varSrc)
|
|
{
|
|
this->type = TT_EMPTY;
|
|
InternalCopy(&varSrc);
|
|
}
|
|
CVar(const CVar& varSrc)
|
|
{
|
|
this->type = TT_EMPTY;
|
|
InternalCopy(&varSrc);
|
|
}
|
|
CVar(double dblSrc) throw()
|
|
{
|
|
this->type = TT_DOUBLE;
|
|
this->dVal = dblSrc;
|
|
}
|
|
CVar(const char* pszSrc)
|
|
{
|
|
this->type = TT_EMPTY;
|
|
*this = pszSrc;
|
|
}
|
|
CVar(long nSrc) throw()
|
|
{
|
|
this->type = TT_LONG;
|
|
this->lVal = nSrc;
|
|
}
|
|
|
|
// Assignment Operators
|
|
public:
|
|
CVar& operator=(const CVar& varSrc)
|
|
{
|
|
InternalCopy(&varSrc);
|
|
return *this;
|
|
}
|
|
CVar& operator=(const VAR& varSrc)
|
|
{
|
|
InternalCopy(&varSrc);
|
|
return *this;
|
|
}
|
|
CVar& operator=(double dblSrc) throw()
|
|
{
|
|
if (type != TT_DOUBLE)
|
|
{
|
|
Clear();
|
|
type = TT_DOUBLE;
|
|
}
|
|
this->dVal = dblSrc;
|
|
return *this;
|
|
}
|
|
CVar& operator=(const char* pszSrc)
|
|
{
|
|
Clear();
|
|
this->type = TT_STRING;
|
|
this->sVal = ::VarAllocString(pszSrc);
|
|
|
|
if (this->sVal == NULL && pszSrc != NULL)
|
|
{
|
|
this->type = TT_ERROR;
|
|
this->vresult = VR_OUTOFMEMORY;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
friend std::ostream& operator<< (std::ostream &os, const CVar &a);
|
|
|
|
|
|
// Operations
|
|
public:
|
|
VRESULT Clear(void) { return ::VarClear(this); }
|
|
VRESULT Copy(const VAR* pSrc) { return ::VarCopy(this, const_cast<VAR*>(pSrc)); }
|
|
|
|
// Implementation
|
|
public:
|
|
VRESULT InternalClear()
|
|
{
|
|
VRESULT vr = Clear();
|
|
if (vr != VR_OK)
|
|
{
|
|
this->type = TT_ERROR;
|
|
this->vresult = vr;
|
|
}
|
|
return vr;
|
|
}
|
|
|
|
void InternalCopy(const VAR* pSrc)
|
|
{
|
|
VRESULT vr = Copy(pSrc);
|
|
if (vr != VR_OK)
|
|
{
|
|
this->type = TT_ERROR;
|
|
this->vresult = vr;
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
inline std::ostream& operator<< (std::ostream &os, const CVar &a)
|
|
{
|
|
switch (a.type) {
|
|
case TT_EMPTY:
|
|
os << "(TT_EMPTY)";
|
|
break;
|
|
case TT_ERROR:
|
|
switch (a.vresult) {
|
|
case VR_OK:
|
|
os << "VR_OK";
|
|
break;
|
|
case VR_OUTOFMEMORY:
|
|
os << "VR_OUTOFMEMORY";
|
|
break;
|
|
case VR_BADVARTYPE:
|
|
os << "VR_BADVARTYPE";
|
|
break;
|
|
case VR_INVALIDARG:
|
|
os << "VR_INVALIDARG";
|
|
break;
|
|
case VR_INVALIDROW:
|
|
os << "VR_INVALIDROW";
|
|
break;
|
|
case VR_INVALIDCOL:
|
|
os << "VR_INVALIDCOL";
|
|
break;
|
|
}
|
|
os << "(TT_ERROR)";
|
|
break;
|
|
case TT_LONG:
|
|
os << a.lVal;
|
|
os << "(TT_LONG)";
|
|
break;
|
|
case TT_DOUBLE:
|
|
os << a.dVal;
|
|
os << "(TT_DOUBLE)";
|
|
break;
|
|
case TT_STRING:
|
|
os << "\"" << a.sVal << "\"";
|
|
os << "(TT_STRING)";
|
|
break;
|
|
default:
|
|
os << "(BAD)";
|
|
break;
|
|
}
|
|
return os;
|
|
}
|
|
|
|
#endif // INC_CVAR_HXX
|