00001
00002
00003
00004
00005
00006 #if !defined(AFX_VMSDATAFILE_H__2D3A0382_A38B_44AA_963E_6B7E3B3024DB__INCLUDED_)
00007 #define AFX_VMSDATAFILE_H__2D3A0382_A38B_44AA_963E_6B7E3B3024DB__INCLUDED_
00008
00009 #if _MSC_VER > 1000
00010 #pragma once
00011 #endif
00012
00013 #include "tree.h"
00014 #include "vmsFile.h"
00015
00016 enum vmsVariantValueType
00017 {
00018 VVT_EMPTY,
00019 VVT_INT,
00020 VVT_DOUBLE,
00021 VVT_INT64,
00022 VVT_ASTRING,
00023 VVT_LPBYTE,
00024 };
00025
00026 struct vmsVariantValue
00027 {
00028 protected:
00029 vmsVariantValueType enType;
00030 union {
00031 int iVal;
00032 double fVal;
00033 __int64 i64Val;
00034 LPSTR pszVal;
00035 struct {
00036 LPBYTE pbVal;
00037 UINT nByteBufferSize;
00038 };
00039 };
00040
00041 public:
00042
00043 vmsVariantValue () {enType = VVT_EMPTY;}
00044 vmsVariantValue (const vmsVariantValue& vt) {vmsVariantValue (); *this = vt;}
00045
00046 ~vmsVariantValue () {clear ();}
00047
00048 vmsVariantValueType type () {return enType;};
00049 bool empty () {return type () == VVT_EMPTY;};
00050
00051 operator int () const {ASSERT (enType == VVT_INT); return iVal;}
00052 operator double () const {ASSERT (enType == VVT_DOUBLE); return fVal;}
00053 operator __int64 () const {ASSERT (enType == VVT_INT64); return i64Val;}
00054 operator LPCSTR () const {ASSERT (enType == VVT_ASTRING); return pszVal;}
00055 operator const LPBYTE () const {ASSERT (enType == VVT_LPBYTE); return pbVal;}
00056 operator LPBYTE () {ASSERT (enType == VVT_LPBYTE); return pbVal;}
00057 UINT bytebuffersize () {return nByteBufferSize;}
00058
00059 void set (int i) {clear (); enType = VVT_INT; iVal = i;}
00060 void set (__int64 i) {clear (); enType = VVT_INT64; i64Val = i;}
00061 void set (double f) {clear (); enType = VVT_DOUBLE; fVal = f;}
00062 void set (LPCSTR psz) {
00063 clear (); enType = VVT_ASTRING; pszVal = new char [lstrlen (psz) + 1];
00064 lstrcpy (pszVal, psz);
00065 }
00066 void set (const LPBYTE pb, UINT nSize) {
00067 clear (); enType = VVT_LPBYTE; pbVal = new BYTE [nSize];
00068 CopyMemory (pbVal, pb, nSize);
00069 nByteBufferSize = nSize;
00070 }
00071
00072 int operator = (int i) {set (i); return i;}
00073 __int64 operator = (__int64 i) {set (i); return i;}
00074 double operator = (double f) {set (f); return f;}
00075 LPCSTR operator = (LPCSTR psz) {set (psz); return psz;}
00076
00077 void clear () {
00078 switch (enType)
00079 {
00080 case VVT_EMPTY:
00081 case VVT_INT:
00082 case VVT_DOUBLE:
00083 case VVT_INT64: break;
00084
00085 case VVT_LPBYTE: delete [] pbVal; break;
00086 case VVT_ASTRING: delete [] pszVal; break;
00087
00088 default: ASSERT (false);
00089 }
00090 enType = VVT_EMPTY;
00091 }
00092
00093 vmsVariantValue& operator = (const vmsVariantValue& vt) {
00094 switch (vt.enType)
00095 {
00096 case VVT_EMPTY: clear (); break;
00097 case VVT_INT: set ((int)vt); break;
00098 case VVT_DOUBLE: set ((double)vt); break;
00099 case VVT_INT64: set ((__int64)vt); break;
00100 case VVT_ASTRING: set ((LPCSTR)vt); break;
00101 case VVT_LPBYTE: set ((const LPBYTE)vt, vt.nByteBufferSize); break;
00102 default: ASSERT (false);
00103 }
00104 return *this;
00105 }
00106 };
00107
00108 struct vmsDataFileItem
00109 {
00110 fsString strName;
00111 vmsVariantValue vt;
00112 };
00113
00114 typedef fs::ListTree <vmsDataFileItem> DATAFILETREE, *LPDATAFILETREE;
00115
00116 typedef vmsVariantValue DATAFILEITEM, *LPDATAFILEITEM;
00117
00118 class vmsDataFile
00119 {
00120 public:
00121 void get_Value (LPCSTR pszSection, LPCSTR pszValueName, LPBYTE& pbValue, UINT& nValueSize);
00122 void get_Value (LPCSTR pszSection, LPCSTR pszValueName, LPCSTR& strValue);
00123 void get_Value (LPCSTR pszSection, LPCSTR pszValueName, double& fValue);
00124 void get_Value (LPCSTR pszSection, LPCSTR pszValueName, __int64& i64Value);
00125 void get_Value (LPCSTR pszSection, LPCSTR pszValueName, int& iValue);
00126 void set_Value(LPCSTR pszSection, LPCSTR pszValueName, LPBYTE pbValue, UINT nValueSize);
00127 void set_Value(LPCSTR pszSection, LPCSTR pszValueName, LPCSTR pszValue);
00128 void set_Value(LPCSTR pszSection, LPCSTR pszValueName, double fValue);
00129 void set_Value(LPCSTR pszSection, LPCSTR pszValueName, __int64 i64Value);
00130 void set_Value (LPCSTR pszSection, LPCSTR pszValueName, int iValue);
00131
00132 LPDATAFILEITEM CreateItem(LPCSTR pszSection, LPCSTR pszItemName);
00133 LPDATAFILEITEM CreateItem (LPDATAFILETREE pSection, LPCSTR pszItemName);
00134 LPDATAFILETREE CreateSection (LPCSTR pszSection, LPDATAFILETREE ptRoot = NULL);
00135
00136 void LoadFromFile (HANDLE hFile);
00137 void SaveToFile (HANDLE hFile);
00138
00139 vmsDataFile();
00140 virtual ~vmsDataFile();
00141
00142 protected:
00143 void LoadFromFile(vmsFDM::vmsFile& file, vmsDataFileItem &item);
00144 void LoadFromFile(vmsFDM::vmsFile& file, LPDATAFILETREE ptRoot);
00145 void SaveToFile(vmsFDM::vmsFile& file, vmsDataFileItem& item);
00146 void SaveToFile(vmsFDM::vmsFile& file, LPDATAFILETREE ptRoot);
00147
00148 LPDATAFILETREE FindItem (LPCSTR pszSection, LPCSTR pszValueName, LPDATAFILETREE ptRoot = NULL);
00149
00150 DATAFILETREE m_tData;
00151 };
00152
00153 #endif