diff --git a/src/common/types.cpp b/src/common/types.cpp index cb71ca6e6..e25fb2fa1 100644 --- a/src/common/types.cpp +++ b/src/common/types.cpp @@ -28,17 +28,18 @@ namespace love static std::unordered_map 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; diff --git a/src/common/types.h b/src/common/types.h index 43d112d08..7c20071fd 100644 --- a/src/common/types.h +++ b/src/common/types.h @@ -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;