mirror of
https://github.com/love2d/love.git
synced 2026-08-17 19:23:38 +02:00
Minor performance tweaks for love::Type
On my system these tweaks restore performance to "enum" levels --HG-- branch : dynamiccore2
This commit is contained in:
+3
-16
@@ -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
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user