00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef INC_SML_HASH_H
00022 #define INC_SML_HASH_H
00023
00024 #ifndef INC_MI32_STDDEFNS_H
00025 #include <mi32/stddefns.h>
00026 #endif
00027
00028 #ifdef RVCSYSDLL
00029 #define RVCSYSLIBEXPORT MI_DLLEXPORT
00030 #define RVCSYSLIBCLASSEXPORT MI_DLLCLASSEXPORT
00031 #else
00032 #define RVCSYSLIBEXPORT MI_DLLIMPORT
00033 #define RVCSYSLIBCLASSEXPORT MI_DLLCLASSIMPORT
00034 #endif
00035
00036 class MISTRING;
00037 class MISTRINGLIST;
00038
00039 namespace SML {
00040
00041 class CLASS;
00042 class CONTEXT;
00043
00044 class RVCSYSLIBCLASSEXPORT HASH {
00045 public:
00046 HASH (
00047 );
00048 virtual ~HASH();
00049
00050 const CLASS* GetClass() const;
00051
00052 int GetNumItems (
00053 ) const;
00054
00055 static void NumIndexToStrIndex (
00056 MISTRING& mistr,
00057 double indx
00058 );
00059
00060 bool Exists (
00061 const MISTRING& key
00062 ) const;
00063
00064 void Delete (
00065 const MISTRING& key
00066 );
00067
00068 void Clear ();
00069
00070 MISTRINGLIST* GetKeyList (
00071 ) const;
00072
00073 private:
00074 virtual const CLASS* v_GetClass() const = 0;
00075 virtual int v_GetNumItems() const = 0;
00076 virtual bool v_Exists(const MISTRING&) const = 0;
00077 virtual void v_Delete(const MISTRING&) = 0;
00078 virtual void v_Clear() = 0;
00079 virtual MISTRINGLIST* v_GetKeyList() const = 0;
00080 };
00081
00082 class RVCSYSLIBCLASSEXPORT NUMHASH : public HASH {
00083 public:
00084 NUMHASH();
00085 virtual ~NUMHASH();
00086 double GetValue(const MISTRING& indx, bool bConstructIfEmpty) const;
00087 void SetValue(const MISTRING& indx, double val);
00088
00094 double* GetArray (
00095 );
00096
00102 INT32 GetArraySize (
00103 ) const;
00104
00107 ERRVALUE ResizeArray (
00108 INT32 numitems,
00109 double fillval,
00110 bool bKeepExisting = true
00111 );
00112
00113 private:
00114 class PRIVDATA;
00115 PRIVDATA* m_priv;
00116 virtual const CLASS* v_GetClass() const;
00117 virtual int v_GetNumItems() const;
00118 virtual bool v_Exists(const MISTRING&) const;
00119 virtual void v_Delete(const MISTRING&);
00120 virtual void v_Clear();
00121 virtual MISTRINGLIST* v_GetKeyList() const;
00122 };
00123
00124
00125 class RVCSYSLIBCLASSEXPORT CLASSHASH : public HASH {
00126 public:
00127 CLASSHASH(CONTEXT* context, const CLASS*);
00128 virtual ~CLASSHASH();
00129 void* GetValue(const MISTRING& indx, bool bConstructIfEmpty) const;
00130 void SetValue(const MISTRING& indx, void* val);
00131 protected:
00132 CONTEXT* GetContext() const;
00133 private:
00134 class PRIVDATA;
00135 PRIVDATA* m_priv;
00136 virtual const CLASS* v_GetClass() const;
00137 virtual int v_GetNumItems() const;
00138 virtual bool v_Exists(const MISTRING&) const;
00139 virtual void v_Delete(const MISTRING&);
00140 virtual void v_Clear();
00141 virtual MISTRINGLIST* v_GetKeyList() const;
00142 };
00143
00144
00145 class RVCSYSLIBCLASSEXPORT STRINGHASH : public CLASSHASH {
00146 public:
00147 STRINGHASH(CONTEXT* context);
00148 virtual ~STRINGHASH();
00149 bool GetValue(const MISTRING& indx, MISTRING& value) const;
00150 void SetValue(const MISTRING& indx, const MISTRING& value);
00151 };
00152
00153 }
00154
00155 typedef SML::HASH SMLHASH;
00156 typedef SML::NUMHASH SMLNUMHASH;
00157 typedef SML::CLASSHASH SMLCLASSHASH;
00158 typedef SML::STRINGHASH SMLSTRINGHASH;
00159
00160
00161 #undef RVCSYSLIBEXPORT
00162 #undef RVCSYSLIBCLASSEXPORT
00163
00164
00165 #endif // INC_SML_HASH_H
00166
00167