Alternative implementation of the indexer. It is a little bit slower, but I'm going to make it faster.

Unfortunately the refactoring of the indexer is kind of necessary. I need to merge the new binding pass.
This commit is contained in:
Roberto Raggi
2009-02-23 12:49:56 +01:00
parent c8bdd0bee4
commit 1c063f6953
3 changed files with 105 additions and 36 deletions

View File

@@ -117,6 +117,13 @@ Macro *Environment::bind(const Macro &__macro)
return m;
}
void Environment::addMacros(const QList<Macro> &macros)
{
foreach (const Macro &macro, macros) {
bind(macro);
}
}
Macro *Environment::remove(const QByteArray &name)
{
Macro macro;
@@ -127,6 +134,23 @@ Macro *Environment::remove(const QByteArray &name)
return bind(macro);
}
void Environment::reset()
{
if (_macros) {
qDeleteAll(firstMacro(), lastMacro());
free(_macros);
}
if (_hash)
free(_hash);
_macros = 0;
_allocated_macros = 0;
_macro_count = -1;
_hash = 0;
_hash_count = 401;
}
bool Environment::isBuiltinMacro(const QByteArray &s) const
{
if (s.length() != 8)

View File

@@ -56,6 +56,7 @@
#include "CPlusPlusForwardDeclarations.h"
#include <QVector>
#include <QList>
#include <QByteArray>
namespace CPlusPlus {
@@ -89,6 +90,9 @@ public:
Macro **lastMacro()
{ return _macros + _macro_count + 1; }
void reset();
void addMacros(const QList<Macro> &macros);
private:
static unsigned hashCode(const QByteArray &s);
void rehash();