X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fe8604accea93f016df337a19afa7f957626dcf1..e8739575c52136bc19336b6e676f5c237a203a98:/include/wx/hashmap.h?ds=sidebyside diff --git a/include/wx/hashmap.h b/include/wx/hashmap.h index adf8035092..b1d2f06314 100644 --- a/include/wx/hashmap.h +++ b/include/wx/hashmap.h @@ -101,6 +101,10 @@ protected: { return (void **)calloc(sz, sizeof(void*)); } + static void FreeTable(void *table) + { + free(table); + } }; #define _WX_DECLARE_HASHTABLE( VALUE_T, KEY_T, HASH_T, KEY_EX_T, KEY_EQ_T, CLASSNAME, CLASSEXP, SHOULD_GROW, SHOULD_SHRINK ) \ @@ -143,8 +147,8 @@ public: \ value_type m_value; \ }; \ \ - struct Iterator; \ - friend struct Iterator; \ + CLASSEXP Iterator; \ + friend CLASSEXP Iterator; \ protected: \ static void DeleteNode( _wxHashTable_NodeBase* node ) \ { \ @@ -154,8 +158,9 @@ public: \ /* */ \ /* forward iterator */ \ /* */ \ - struct Iterator \ + CLASSEXP Iterator \ { \ + public: \ Node* m_node; \ Self* m_ht; \ \ @@ -186,8 +191,9 @@ public: \ }; \ \ public: \ - struct iterator:public Iterator \ + CLASSEXP iterator : public Iterator \ { \ + public: \ iterator() : Iterator() {} \ iterator( Node* node, Self* ht ) : Iterator( node, ht ) {} \ iterator& operator++() { PlusPlus(); return *this; } \ @@ -196,8 +202,9 @@ public: \ pointer operator ->() const { return &(m_node->m_value); } \ }; \ \ - struct const_iterator:public Iterator \ + CLASSEXP const_iterator : public Iterator \ { \ + public: \ const_iterator() : Iterator() {} \ const_iterator( Node* node, const Self* ht ) \ : Iterator( node, (Self*)ht ) {} \ @@ -245,7 +252,7 @@ public: \ { \ clear(); \ \ - free(m_table); \ + FreeTable(m_table); \ } \ \ hasher hash_funct() { return m_hasher; } \ @@ -334,7 +341,7 @@ protected: \ /* returns NULL if not found */ \ Node** GetNodePtr( const const_key_type& key ) const \ { \ - unsigned long hash = m_hasher( key ); \ + unsigned long hash = wx_static_cast(unsigned long, m_hasher( key )); \ Node** node = &m_table[hash % m_tableBuckets]; \ \ while( *node ) \ @@ -351,7 +358,7 @@ protected: \ /* expressing it in terms of GetNodePtr is 5-8% slower :-( */ \ Node* GetNode( const const_key_type& key ) const \ { \ - unsigned long hash = m_hasher( key ); \ + unsigned long hash = wx_static_cast(unsigned long, m_hasher( key )); \ Node* node = m_table[hash % m_tableBuckets]; \ \ while( node ) \ @@ -376,7 +383,7 @@ protected: \ this, (_wxHashTable_NodeBase**)m_table, \ (BucketFromNode)GetBucketForNode,\ (ProcessNode)&DummyProcessNode ); \ - free(srcTable); \ + FreeTable(srcTable); \ } \ \ /* this must be called _after_ m_table has been cleaned */ \ @@ -430,8 +437,8 @@ public: \ }; // grow/shrink predicates -inline bool never_grow( size_t, size_t ) { return FALSE; } -inline bool never_shrink( size_t, size_t ) { return FALSE; } +inline bool never_grow( size_t, size_t ) { return false; } +inline bool never_shrink( size_t, size_t ) { return false; } inline bool grow_lf70( size_t buckets, size_t items ) { return float(items)/float(buckets) >= 0.85; @@ -509,12 +516,10 @@ class WXDLLIMPEXP_BASE wxPointerHash public: wxPointerHash() { } - // TODO: this might not work well on architectures with 64 bit pointers but - // 32 bit longs, we should use % ULONG_MAX there #if wxUSE_STL && defined(HAVE_STL_HASH_MAP) size_t operator()( const void* k ) const { return (size_t)k; } #else - unsigned long operator()( const void* k ) const { return (unsigned long)wxPtrToULong(k); } + wxUIntPtr operator()( const void* k ) const { return wxPtrToUInt(k); } #endif wxPointerHash& operator=(const wxPointerHash&) { return *this; }