X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/12028905135250524409f1e7b9bfa9c55e5ce16b..b6e2eddeaf7e559589ce41ac41e88f9bd71c5a08:/include/wx/hashmap.h?ds=sidebyside diff --git a/include/wx/hashmap.h b/include/wx/hashmap.h index 5924d71576..0502f6a27a 100644 --- a/include/wx/hashmap.h +++ b/include/wx/hashmap.h @@ -70,6 +70,7 @@ protected: static void CopyHashTable( _wxHashTable_NodeBase** srcTable, size_t srcBuckets, _wxHashTableBase2* dst, _wxHashTable_NodeBase** dstTable, + size_t dstBuckets, BucketFromNode func, ProcessNode proc ); static void** AllocTable( size_t sz ) @@ -297,6 +298,19 @@ protected: \ \ return node; \ } \ + void CreateNodeLast( const value_type& value ) \ + { \ + size_t bucket = m_hasher( m_getKey(value) ) % m_tableBuckets; \ + Node* curr = m_table[bucket], \ + * next = m_table[bucket]; \ + while( next ) { curr = next; next = next->m_next(); } \ + Node** ptr = curr ? (Node**)&curr->m_nxt : &m_table[bucket]; \ + *ptr = new Node( value ); \ + /* must be after the node is inserted */ \ + ++m_items; \ + if( SHOULD_GROW( m_tableBuckets, m_items ) ) \ + ResizeTable( m_tableBuckets ); \ + } \ void CreateNode( const value_type& value ) \ {\ CreateNode(value, m_hasher( m_getKey(value) ) % m_tableBuckets ); \ @@ -344,7 +358,7 @@ protected: \ m_tableBuckets = newSize; \ \ CopyHashTable( (_wxHashTable_NodeBase**)srcTable, srcBuckets, \ - this, (_wxHashTable_NodeBase**)m_table, \ + this, (_wxHashTable_NodeBase**)m_table, newSize, \ (BucketFromNode)GetBucketForNode,\ (ProcessNode)&DummyProcessNode ); \ free(srcTable); \ @@ -356,7 +370,7 @@ protected: \ ResizeTable( ht.size() ); \ CopyHashTable( (_wxHashTable_NodeBase**)ht.m_table, ht.m_tableBuckets,\ (_wxHashTableBase2*)this, \ - (_wxHashTable_NodeBase**)m_table, \ + (_wxHashTable_NodeBase**)m_table, m_tableBuckets, \ (BucketFromNode)GetBucketForNode, \ (ProcessNode)CopyNode ); \ } \