diff options
author | smatz <smatz@openttd.org> | 2009-08-07 13:33:55 +0000 |
---|---|---|
committer | smatz <smatz@openttd.org> | 2009-08-07 13:33:55 +0000 |
commit | 135f80f95bc9a3756bd453b93006653bf9eb82b5 (patch) | |
tree | 355dae630c882ddd8b5b532b7844abc1615f3e24 | |
parent | ba4fd897b823fa4dc36ad3fbf0db36b94b95628b (diff) | |
download | openttd-135f80f95bc9a3756bd453b93006653bf9eb82b5.tar.xz |
(svn r17101) -Revert [FS#3065](r16546): large table on stack caused stack overflow on some architectures
-rw-r--r-- | src/misc/hashtable.hpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/misc/hashtable.hpp b/src/misc/hashtable.hpp index 2e524e632..f7b5a84d8 100644 --- a/src/misc/hashtable.hpp +++ b/src/misc/hashtable.hpp @@ -133,16 +133,19 @@ protected: * Titem contains pointer to the next item - GetHashNext(), SetHashNext() */ typedef CHashTableSlotT<Titem_> Slot; - Slot m_slots[Tcapacity]; ///< here we store our data (array of blobs) - int m_num_items; ///< item counter + Slot *m_slots; // here we store our data (array of blobs) + int m_num_items; // item counter public: /* default constructor */ - FORCEINLINE CHashTableT() : - m_num_items(0) - { } + FORCEINLINE CHashTableT() + { + /* construct all slots */ + m_slots = new Slot[Tcapacity]; + m_num_items = 0; + } - FORCEINLINE ~CHashTableT() { } + ~CHashTableT() {delete [] m_slots; m_num_items = 0; m_slots = NULL;} protected: /** static helper - return hash for the given key modulo number of slots */ @@ -165,10 +168,7 @@ public: FORCEINLINE int Count() const {return m_num_items;} /** simple clear - forget all items - used by CSegmentCostCacheT.Flush() */ - FORCEINLINE void Clear() - { - for (size_t i = 0; i < lengthof(m_slots); i++) m_slots[i].Clear(); - } + FORCEINLINE void Clear() const {for (int i = 0; i < Tcapacity; i++) m_slots[i].Clear();} /** const item search */ const Titem_ *Find(const Tkey& key) const |