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; static std::unordered_map<std::string, Type*> types;
uint32 love::Type::nextId = 1;
Type::Type(const char *name, Type *parent) Type::Type(const char *name, Type *parent)
: name(name) : name(name)
, parent(parent) , parent(parent)
, id(0)
, inited(false) , inited(false)
{ {
} }
void Type::init() void Type::init()
{ {
static uint32 nextId = 1;
// Make sure we don't init twice, that would be bad // Make sure we don't init twice, that would be bad
if (inited) if (inited)
return; return;
@@ -63,20 +64,6 @@ uint32 Type::getId()
return id; 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 const char *Type::getName() const
{ {
return name; return name;
+21 -8
View File
@@ -38,17 +38,30 @@ public:
Type(const char *name, Type *parent); Type(const char *name, Type *parent);
Type(const Type&) = delete; 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); static Type *byName(const char *name);
private: void init();
static uint32 nextId; 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; const char * const name;
Type * const parent; Type * const parent;
uint32 id; uint32 id;