diff options
author | Roberto Raggi <[email protected]> | 2009-09-07 13:39:46 +0200 |
---|---|---|
committer | Roberto Raggi <[email protected]> | 2009-09-23 16:52:41 +0200 |
commit | 6c347a12c66793db50bb180b3a0ad2ea8c38f6f9 (patch) | |
tree | 041e3eff4b52cabc36643f85d59d8cfd3659c878 /src/shared/cplusplus/LiteralTable.h | |
parent | 8848be4caae3e7bbdb3a7cee7949336990a46941 (diff) |
Introduced LiteralTable::findLiteral() and Control::findIdentifier()
Diffstat (limited to 'src/shared/cplusplus/LiteralTable.h')
-rw-r--r-- | src/shared/cplusplus/LiteralTable.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/shared/cplusplus/LiteralTable.h b/src/shared/cplusplus/LiteralTable.h index 67d074eca63..64fd2e1dac5 100644 --- a/src/shared/cplusplus/LiteralTable.h +++ b/src/shared/cplusplus/LiteralTable.h @@ -101,7 +101,21 @@ public: iterator end() const { return _literals + _literalCount + 1; } - _Literal *findOrInsertLiteral(const char *chars, unsigned size) + _Literal *findLiteral(const char *chars, unsigned size) const + { + if (_buckets) { + unsigned h = _Literal::hashCode(chars, size); + _Literal *literal = _buckets[h % _allocatedBuckets]; + for (; literal; literal = static_cast<_Literal *>(literal->_next)) { + if (literal->size() == size && ! std::strncmp(literal->chars(), chars, size)) + return literal; + } + } + + return 0; + } + + _Literal *findOrInsertLiteral(const char *chars, unsigned size) { if (_buckets) { unsigned h = _Literal::hashCode(chars, size); |