Minor performance tweaks for love::Type

On my system these tweaks restore performance to "enum" levels

--HG--
branch : dynamiccore2
This commit is contained in:
Bart van Strien
2016-11-16 14:45:06 +01:00
parent 9f6aa716fa
commit de29986d38
2 changed files with 24 additions and 24 deletions
+3 -16
View File
@@ -28,17 +28,18 @@ namespace love
static std::unordered_map<std::string, Type*> types;
uint32 love::Type::nextId = 1;
Type::Type(const char *name, Type *parent)
: name(name)
, parent(parent)
, id(0)
, inited(false)
{
}
void Type::init()
{
static uint32 nextId = 1;
// Make sure we don't init twice, that would be bad
if (inited)
return;
@@ -63,20 +64,6 @@ uint32 Type::getId()
return id;
}
bool Type::isa(const uint32 &other)
{
if (!inited)
init();
return bits[other];
}
bool Type::isa(love::Type &other)
{
if (!other.inited)
other.init();
return isa(other.id);
}
const char *Type::getName() const
{
return name;
+21 -8
View File
@@ -38,17 +38,30 @@ public:
Type(const char *name, Type *parent);
Type(const Type&) = delete;
void init();
uint32 getId();
bool isa(const uint32 &other);
bool isa(Type &other);
const char *getName() const;
static Type *byName(const char *name);
private:
static uint32 nextId;
void init();
uint32 getId();
const char *getName() const;
bool isa(const uint32 &other)
{
if (!inited)
init();
return bits[other];
}
bool isa(Type &other)
{
if (!inited)
init();
// Note that if this type implements the other
// calling init above will also have inited
// the other.
return bits[other.id];
}
private:
const char * const name;
Type * const parent;
uint32 id;