IPhreeqc 2.18

Var.h

Go to the documentation of this file.
00001 
00004 // Var.h
00005 
00006 #ifndef __VAR_H_INC
00007 #define __VAR_H_INC
00008 
00009 #if defined(_WINDLL)
00010 #define IPQ_DLL_EXPORT __declspec(dllexport)
00011 #else
00012 #define IPQ_DLL_EXPORT
00013 #endif
00014 
00017 typedef enum {
00018         TT_EMPTY  = 0,  
00019         TT_ERROR  = 1,  
00020         TT_LONG   = 2,  
00021         TT_DOUBLE = 3,  
00022         TT_STRING = 4   
00023 } VAR_TYPE;
00024 
00027 typedef enum {
00028         VR_OK            =  0,  
00029         VR_OUTOFMEMORY   = -1,  
00030         VR_BADVARTYPE    = -2,  
00031         VR_INVALIDARG    = -3,  
00032         VR_INVALIDROW    = -4,  
00033         VR_INVALIDCOL    = -5   
00034 } VRESULT;
00035 
00038 typedef struct {
00039         VAR_TYPE type;         
00040         union {
00041                 long    lVal;      
00042                 double  dVal;      
00043                 char*   sVal;      
00044                 VRESULT vresult;   
00045         };
00046 } VAR;
00047 
00048 
00049 #if defined(__cplusplus)
00050 extern "C" {
00051 #endif
00052 
00057 IPQ_DLL_EXPORT char*   VarAllocString(const char* pSrc);
00058 
00064 IPQ_DLL_EXPORT VRESULT VarClear(VAR* pvar);
00065 
00074 IPQ_DLL_EXPORT VRESULT VarCopy(VAR* pvarDest, const VAR* pvarSrc);
00075 
00079 IPQ_DLL_EXPORT void    VarFreeString(char* pSrc);
00080 
00084 IPQ_DLL_EXPORT void    VarInit(VAR* pvar);
00085 
00086 #if defined(__cplusplus)
00087 }
00088 #endif
00089 
00090 #if defined(__cplusplus)
00091 
00092 #include <ostream> // std::ostream
00093 
00094 inline std::ostream& operator<< (std::ostream &os, const VAR_TYPE& vt)
00095 {
00096         switch(vt)
00097         {
00098         case TT_EMPTY:
00099                 os << "TT_EMPTY";
00100                 break;
00101         case TT_ERROR:
00102                 os << "TT_ERROR";
00103                 break;
00104         case TT_LONG:
00105                 os << "TT_LONG";
00106                 break;
00107         case TT_DOUBLE:
00108                 os << "TT_DOUBLE";
00109                 break;
00110         case TT_STRING:
00111                 os << "TT_STRING";
00112                 break;
00113         default:
00114                 os << (int)vt;
00115                 break;
00116         }
00117         return os;
00118 }
00119 
00120 inline std::ostream& operator<< (std::ostream &os, const VRESULT& vr)
00121 {
00122         switch(vr)
00123         {
00124         case VR_OK:
00125                 os << "VR_OK";
00126                 break;
00127         case VR_OUTOFMEMORY:
00128                 os << "VR_OUTOFMEMORY";
00129                 break;
00130         case VR_BADVARTYPE:
00131                 os << "VR_BADVARTYPE";
00132                 break;
00133         case VR_INVALIDARG:
00134                 os << "VR_INVALIDARG";
00135                 break;
00136         case VR_INVALIDROW:
00137                 os << "VR_INVALIDROW";
00138                 break;
00139         case VR_INVALIDCOL:
00140                 os << "VR_INVALIDCOL";
00141                 break;
00142         default:
00143                 os << (int)vr;
00144                 break;
00145         }
00146         return os;
00147 }
00148 #endif /* __cplusplus */
00149 
00150 #endif /* __VAR_H_INC */