X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..4367345099df9e276e4805147ac40ec3e0349021:/include/wx/hash.h diff --git a/include/wx/hash.h b/include/wx/hash.h index af9cbbce94..5ac029b01e 100644 --- a/include/wx/hash.h +++ b/include/wx/hash.h @@ -12,7 +12,7 @@ #ifndef _WX_HASH_H__ #define _WX_HASH_H__ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "hash.h" #endif @@ -34,7 +34,7 @@ // pointers to objects // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxHashTableBase : public wxObject +class WXDLLIMPEXP_BASE wxHashTableBase : public wxObject { public: wxHashTableBase(); @@ -69,17 +69,20 @@ protected: private: // no copy ctor/assignment operator (yet) - DECLARE_NO_COPY_CLASS(wxHashTableBase); + DECLARE_NO_COPY_CLASS(wxHashTableBase) }; +#if WXWIN_COMPATIBILITY_2_4 + // ---------------------------------------------------------------------------- // a hash table which stores longs // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxHashTableLong : public wxObject +class WXDLLIMPEXP_BASE wxHashTableLong : public wxObject { public: - wxHashTableLong(size_t size = wxHASH_SIZE_DEFAULT) { Init(size); } + wxHashTableLong(size_t size = wxHASH_SIZE_DEFAULT) + { Init(size); } virtual ~wxHashTableLong(); void Create(size_t size = wxHASH_SIZE_DEFAULT); @@ -106,14 +109,49 @@ private: size_t m_count; // not implemented yet - DECLARE_NO_COPY_CLASS(wxHashTableLong); + DECLARE_NO_COPY_CLASS(wxHashTableLong) }; +// ---------------------------------------------------------------------------- +// wxStringHashTable: a hash table which indexes strings with longs +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_BASE wxStringHashTable : public wxObject +{ +public: + wxStringHashTable(size_t sizeTable = wxHASH_SIZE_DEFAULT); + virtual ~wxStringHashTable(); + + // add a string associated with this key to the table + void Put(long key, const wxString& value); + + // get the string from the key: if not found, an empty string is returned + // and the wasFound is set to FALSE if not NULL + wxString Get(long key, bool *wasFound = NULL) const; + + // remove the item, returning TRUE if the item was found and deleted + bool Delete(long key) const; + + // clean up + void Destroy(); + +private: + wxArrayLong **m_keys; + wxArrayString **m_values; + + // the size of array above + size_t m_hashSize; + + DECLARE_NO_COPY_CLASS(wxStringHashTable) +}; + +#endif + // ---------------------------------------------------------------------------- // for compatibility only // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxHashTable : public wxObject +class WXDLLIMPEXP_BASE wxHashTable : public wxObject { public: int n; @@ -128,7 +166,8 @@ public: ~wxHashTable(); // copy ctor and assignment operator - wxHashTable(const wxHashTable& table) { DoCopy(table); } + wxHashTable(const wxHashTable& table) : wxObject() + { DoCopy(table); } wxHashTable& operator=(const wxHashTable& table) { Clear(); DoCopy(table); return *this; } @@ -244,7 +283,7 @@ private: protected: \ void DoPut(long key, long value, eltype *data) \ { \ - size_t slot = (size_t)abs(key % m_hashSize); \ + size_t slot = (size_t)abs((int)(key % (long)m_hashSize)); \ \ if ( !m_hashTable[slot] ) \ { \ @@ -267,5 +306,26 @@ private: #define WX_DECLARE_EXPORTED_HASH(el, list, hash) \ _WX_DECLARE_HASH(el, list, hash, class WXDLLEXPORT) +#define WX_DECLARE_USER_EXPORTED_HASH(el, list, hash, usergoo) \ + _WX_DECLARE_HASH(el, list, hash, class usergoo) + +// delete all hash elements +// +// NB: the class declaration of the hash elements must be visible from the +// place where you use this macro, otherwise the proper destructor may not +// be called (a decent compiler should give a warning about it, but don't +// count on it)! +#define WX_CLEAR_HASH_TABLE(array) \ + { \ + (array).BeginFind(); \ + wxNode* it = (array).Next(); \ + while( it ) \ + { \ + delete it->GetData(); \ + it = (array).Next(); \ + } \ + (array).Clear(); \ + } + #endif // _WX_HASH_H__