diff --git a/src/shared/cplusplus/LiteralTable.h b/src/shared/cplusplus/LiteralTable.h index 5a9a1f878bdd372fee6dd1a604aa40952cc5b632..80ada26e51af901849c881ea349f1431a73ec182 100644 --- a/src/shared/cplusplus/LiteralTable.h +++ b/src/shared/cplusplus/LiteralTable.h @@ -66,9 +66,9 @@ public: public: LiteralTable() : _literals(0), + _buckets(0), _allocatedLiterals(0), _literalCount(-1), - _buckets(0), _allocatedBuckets(0) { } @@ -127,17 +127,13 @@ public: _Literal *literal = new _Literal(chars, size); if (++_literalCount == _allocatedLiterals) { - _allocatedLiterals <<= 1; - - if (! _allocatedLiterals) - _allocatedLiterals = 256; - + _allocatedLiterals += 32; _literals = (_Literal **) std::realloc(_literals, sizeof(_Literal *) * _allocatedLiterals); } _literals[_literalCount] = literal; - if (! _buckets || _literalCount >= _allocatedBuckets * .6) + if (! _buckets || _literalCount * 5 >= _allocatedBuckets * 3) rehash(); else { unsigned h = literal->hashCode() % _allocatedBuckets; @@ -154,11 +150,7 @@ protected: if (_buckets) std::free(_buckets); - _allocatedBuckets <<= 1; - - if (! _allocatedBuckets) - _allocatedBuckets = 256; - + _allocatedBuckets += 32; _buckets = (_Literal **) std::calloc(_allocatedBuckets, sizeof(_Literal *)); _Literal **lastLiteral = _literals + (_literalCount + 1); @@ -174,10 +166,9 @@ protected: protected: _Literal **_literals; + _Literal **_buckets; int _allocatedLiterals; int _literalCount; - - _Literal **_buckets; int _allocatedBuckets; };