#ifndef _COMBOTABLE_INCLUDED #define _COMBOTABLE_INCLUDED #include "CKeytable.h" #include "CHashtable.h" #include "CBaseMap.h" class ComboTable: public CBaseMap { private: Keytable MasterKey; Hashtable MasterHash; public: ComboTable() { } ~ComboTable() { Clear(); } void Remove() { delete this; } Word_t Clear() { return (MasterHash.Clear() + MasterKey.Clear() ); } Word_t MemoryUsed() { return (MasterKey.MemoryUsed() + MasterHash.MemoryUsed() ); } int Delete(char* Key) { return (MasterKey.Delete(Key) + MasterHash.Delete(Key) ); } bool IsFilled(char* Index) { return ( (MasterHash.Get(Index,(PPvoid_t)(NULL), true ) != NULL) ? true : false);} bool IsEmpty(char* Index) { return ( (MasterHash.Get(Index,(PPvoid_t)(NULL), true ) == NULL) ? true : false);} void Set(char* Index, Pvoid_t value, bool disable_check) { MasterKey.Set(Index, value); MasterHash.Set(Index, value); } Pvoid_t Get(char* Index, bool disable_check = false) { return MasterHash.Get(Index, disable_check); } template void Set(char* Index, Type value) { MasterKey.Set(Index, value); MasterHash.Set(Index, value); } template Type Get(char* Index, Type example, bool disable_check = false) { return MasterHash.Get(Index, example, disable_check); } char* First( char* Start = "") { return MasterKey.First(Start);} char* Next( char* Start = "") { return MasterKey.Next(Start);} char* Prev( char* Start = "") { return MasterKey.Prev(Start); } char* Last( char* Start = "") { return MasterKey.Last(Start);} protected: void ThrowIndexError( char* index, bool disable_check = false ) { if(disable_check == true) return; char value[100]; sprintf(value,"Function attempted to read non existant index %s", index ); throw JudyEx(value, true); } }; #endif