diff --git a/src/common/Module.cpp b/src/common/Module.cpp index a01297da0..6c168df1e 100644 --- a/src/common/Module.cpp +++ b/src/common/Module.cpp @@ -62,9 +62,12 @@ namespace love love::Type Module::type("Module", &Object::type); Module *Module::instances[] = {}; -Module::Module() +Module::Module(Module::ModuleType moduleType, const char *name) + : moduleType(moduleType) + , name(name) { initDeprecation(); + registerInstance(this); } Module::~Module() diff --git a/src/common/Module.h b/src/common/Module.h index 39abaa68e..77e95d565 100644 --- a/src/common/Module.h +++ b/src/common/Module.h @@ -62,13 +62,13 @@ public: M_MAX_ENUM }; - Module(); + Module(ModuleType moduleType, const char *name); virtual ~Module(); /** * Gets the base type of the module. **/ - virtual ModuleType getModuleType() const = 0; + ModuleType getModuleType() const { return moduleType; } /** * Gets the name of the module. This is used in case of errors @@ -76,14 +76,7 @@ public: * * @return The full name of the module, eg. love.graphics.opengl. **/ - virtual const char *getName() const = 0; - - /** - * Add module to internal registry. To be used /only/ in - * runtime.cpp:luax_register_module() - * @param instance The module instance. - */ - static void registerInstance(Module *instance); + const char *getName() const { return name.c_str(); } /** * Retrieve module instance from internal registry. May return NULL @@ -106,6 +99,11 @@ public: private: + static void registerInstance(Module *instance); + + ModuleType moduleType; + std::string name; + static Module *instances[M_MAX_ENUM]; }; // Module diff --git a/src/common/runtime.cpp b/src/common/runtime.cpp index f22c94136..d9f2570dc 100644 --- a/src/common/runtime.cpp +++ b/src/common/runtime.cpp @@ -473,9 +473,6 @@ int luax_register_module(lua_State *L, const WrappedModule &m) lua_setfield(L, -3, m.name); // love.graphics = table lua_remove(L, -2); // love - // Register module instance - Module::registerInstance(m.module); - return 1; } diff --git a/src/modules/audio/Audio.cpp b/src/modules/audio/Audio.cpp index 8666802ef..336e9dff3 100644 --- a/src/modules/audio/Audio.cpp +++ b/src/modules/audio/Audio.cpp @@ -68,6 +68,10 @@ void showRecordingPermissionMissingDialog() #endif } +Audio::Audio(const char *name) + : Module(M_AUDIO, name) +{} + bool Audio::setMixWithSystem(bool mix) { #ifdef LOVE_IOS diff --git a/src/modules/audio/Audio.h b/src/modules/audio/Audio.h index 29df1aa5f..8b6eae670 100644 --- a/src/modules/audio/Audio.h +++ b/src/modules/audio/Audio.h @@ -101,9 +101,6 @@ public: virtual ~Audio() {} - // Implements Module. - virtual ModuleType getModuleType() const { return M_AUDIO; } - virtual Source *newSource(love::sound::Decoder *decoder) = 0; virtual Source *newSource(love::sound::SoundData *soundData) = 0; virtual Source *newSource(int sampleRate, int bitDepth, int channels, int buffers) = 0; @@ -312,6 +309,10 @@ public: */ virtual void setPlaybackDevice(const char *name); +protected: + + Audio(const char *name); + private: static StringMap::Entry distanceModelEntries[]; diff --git a/src/modules/audio/null/Audio.cpp b/src/modules/audio/null/Audio.cpp index eb9afda00..29f814be5 100644 --- a/src/modules/audio/null/Audio.cpp +++ b/src/modules/audio/null/Audio.cpp @@ -28,7 +28,8 @@ namespace null { Audio::Audio() - : distanceModel(DISTANCE_NONE) + : love::audio::Audio("love.audio.null") + , distanceModel(DISTANCE_NONE) { } @@ -36,11 +37,6 @@ Audio::~Audio() { } -const char *Audio::getName() const -{ - return "love.audio.null"; -} - love::audio::Source *Audio::newSource(love::sound::Decoder *) { return new Source(); diff --git a/src/modules/audio/null/Audio.h b/src/modules/audio/null/Audio.h index 5f625e4ba..8d38d4523 100644 --- a/src/modules/audio/null/Audio.h +++ b/src/modules/audio/null/Audio.h @@ -41,9 +41,6 @@ public: Audio(); virtual ~Audio(); - // Implements Module. - const char *getName() const; - // Implements Audio. love::audio::Source *newSource(love::sound::Decoder *decoder); love::audio::Source *newSource(love::sound::SoundData *soundData); diff --git a/src/modules/audio/openal/Audio.cpp b/src/modules/audio/openal/Audio.cpp index 66d8ec6d4..262b60eb2 100644 --- a/src/modules/audio/openal/Audio.cpp +++ b/src/modules/audio/openal/Audio.cpp @@ -106,7 +106,8 @@ static const char *getDeviceSpecifier(ALCdevice *device) } Audio::Audio() - : device(nullptr) + : love::audio::Audio("love.audio.openal") + , device(nullptr) , context(nullptr) , pool(nullptr) , poolThread(nullptr) @@ -256,11 +257,6 @@ Audio::~Audio() alcCloseDevice(device); } -const char *Audio::getName() const -{ - return "love.audio.openal"; -} - love::audio::Source *Audio::newSource(love::sound::Decoder *decoder) { return new Source(pool, decoder); diff --git a/src/modules/audio/openal/Audio.h b/src/modules/audio/openal/Audio.h index a05fe6e54..970d9150a 100644 --- a/src/modules/audio/openal/Audio.h +++ b/src/modules/audio/openal/Audio.h @@ -78,9 +78,6 @@ public: **/ static ALenum getFormat(int bitDepth, int channels); - // Implements Module. - const char *getName() const; - // Implements Audio. love::audio::Source *newSource(love::sound::Decoder *decoder); love::audio::Source *newSource(love::sound::SoundData *soundData); diff --git a/src/modules/data/DataModule.cpp b/src/modules/data/DataModule.cpp index a84378cf9..a3b27ed89 100644 --- a/src/modules/data/DataModule.cpp +++ b/src/modules/data/DataModule.cpp @@ -214,6 +214,7 @@ void hash(HashFunction::Function function, const char *input, uint64_t size, Has } DataModule::DataModule() + : Module(M_DATA, "love.data") { } diff --git a/src/modules/data/DataModule.h b/src/modules/data/DataModule.h index 8ad189547..f255cf07f 100644 --- a/src/modules/data/DataModule.h +++ b/src/modules/data/DataModule.h @@ -117,10 +117,6 @@ public: DataModule(); virtual ~DataModule(); - // Implements Module. - ModuleType getModuleType() const override { return M_DATA; } - const char *getName() const override { return "love.data"; } - DataView *newDataView(Data *data, size_t offset, size_t size); ByteData *newByteData(size_t size); ByteData *newByteData(const void *d, size_t size); diff --git a/src/modules/event/Event.cpp b/src/modules/event/Event.cpp index 4b7b78acf..45b7c2c2b 100644 --- a/src/modules/event/Event.cpp +++ b/src/modules/event/Event.cpp @@ -38,6 +38,11 @@ Message::~Message() { } +Event::Event(const char *name) + : Module(M_EVENT, name) +{ +} + Event::~Event() { } diff --git a/src/modules/event/Event.h b/src/modules/event/Event.h index ccd610dd2..3b3c33d44 100644 --- a/src/modules/event/Event.h +++ b/src/modules/event/Event.h @@ -54,10 +54,8 @@ public: class Event : public Module { public: - virtual ~Event(); - // Implements Module. - virtual ModuleType getModuleType() const { return M_EVENT; } + virtual ~Event(); void push(Message *msg); bool poll(Message *&msg); @@ -67,6 +65,9 @@ public: virtual Message *wait() = 0; protected: + + Event(const char *name); + love::thread::MutexRef mutex; std::queue queue; diff --git a/src/modules/event/sdl/Event.cpp b/src/modules/event/sdl/Event.cpp index aa3321797..bf542bd98 100644 --- a/src/modules/event/sdl/Event.cpp +++ b/src/modules/event/sdl/Event.cpp @@ -105,12 +105,8 @@ static int SDLCALL watchAppEvents(void * /*udata*/, SDL_Event *event) return 1; } -const char *Event::getName() const -{ - return "love.event.sdl"; -} - Event::Event() + : love::event::Event("love.event.sdl") { if (SDL_InitSubSystem(SDL_INIT_EVENTS) < 0) throw love::Exception("Could not initialize SDL events subsystem (%s)", SDL_GetError()); diff --git a/src/modules/event/sdl/Event.h b/src/modules/event/sdl/Event.h index 1e9726c0c..8b9ab9ad7 100644 --- a/src/modules/event/sdl/Event.h +++ b/src/modules/event/sdl/Event.h @@ -42,9 +42,6 @@ class Event : public love::event::Event { public: - // Implements Module. - const char *getName() const; - Event(); virtual ~Event(); diff --git a/src/modules/filesystem/Filesystem.cpp b/src/modules/filesystem/Filesystem.cpp index b9cd7bb9d..026209c41 100644 --- a/src/modules/filesystem/Filesystem.cpp +++ b/src/modules/filesystem/Filesystem.cpp @@ -45,7 +45,8 @@ namespace filesystem love::Type Filesystem::type("filesystem", &Module::type); -Filesystem::Filesystem() +Filesystem::Filesystem(const char *name) + : Module(M_FILESYSTEM, name) { } diff --git a/src/modules/filesystem/Filesystem.h b/src/modules/filesystem/Filesystem.h index 48c54310c..91359635d 100644 --- a/src/modules/filesystem/Filesystem.h +++ b/src/modules/filesystem/Filesystem.h @@ -108,12 +108,8 @@ public: static love::Type type; - Filesystem(); virtual ~Filesystem(); - // Implements Module. - virtual ModuleType getModuleType() const { return M_FILESYSTEM; } - virtual void init(const char *arg0) = 0; virtual void setFused(bool fused) = 0; @@ -317,6 +313,10 @@ public: STRINGMAP_CLASS_DECLARE(MountPermissions); STRINGMAP_CLASS_DECLARE(LoadMode); +protected: + + Filesystem(const char *name); + private: bool getRealPathType(const std::string &path, FileType &ftype) const; diff --git a/src/modules/filesystem/physfs/Filesystem.cpp b/src/modules/filesystem/physfs/Filesystem.cpp index f4968f97e..586e064c0 100644 --- a/src/modules/filesystem/physfs/Filesystem.cpp +++ b/src/modules/filesystem/physfs/Filesystem.cpp @@ -107,7 +107,8 @@ static bool isAppCommonPath(Filesystem::CommonPath path) } Filesystem::Filesystem() - : appendIdentityToPath(false) + : love::filesystem::Filesystem("love.filesystem.physfs") + , appendIdentityToPath(false) , fused(false) , fusedSet(false) , fullPaths() @@ -128,11 +129,6 @@ Filesystem::~Filesystem() PHYSFS_deinit(); } -const char *Filesystem::getName() const -{ - return "love.filesystem.physfs"; -} - void Filesystem::init(const char *arg0) { #ifdef LOVE_ANDROID diff --git a/src/modules/filesystem/physfs/Filesystem.h b/src/modules/filesystem/physfs/Filesystem.h index f1c02d9c9..beffe3bab 100644 --- a/src/modules/filesystem/physfs/Filesystem.h +++ b/src/modules/filesystem/physfs/Filesystem.h @@ -43,9 +43,6 @@ public: Filesystem(); virtual ~Filesystem(); - // Implements Module. - const char *getName() const override; - void init(const char *arg0) override; void setFused(bool fused) override; diff --git a/src/modules/font/Font.cpp b/src/modules/font/Font.cpp index 70087e38c..e81b06a75 100644 --- a/src/modules/font/Font.cpp +++ b/src/modules/font/Font.cpp @@ -34,7 +34,8 @@ namespace font // Default TrueType font, gzip-compressed. #include "NotoSans-Regular.ttf.gzip.h" -Font::Font() +Font::Font(const char *name) + : Module(M_FONT, name) { auto compressedbytes = (const char *) NotoSans_Regular_ttf_gzip; size_t compressedsize = NotoSans_Regular_ttf_gzip_len; diff --git a/src/modules/font/Font.h b/src/modules/font/Font.h index 2f6a027eb..2fb1a69ea 100644 --- a/src/modules/font/Font.h +++ b/src/modules/font/Font.h @@ -43,7 +43,6 @@ class Font : public Module public: - Font(); virtual ~Font() {} virtual Rasterizer *newRasterizer(love::filesystem::FileData *data) = 0; @@ -58,9 +57,9 @@ public: virtual GlyphData *newGlyphData(Rasterizer *r, const std::string &glyph); virtual GlyphData *newGlyphData(Rasterizer *r, uint32 glyph); - // Implement Module. - virtual ModuleType getModuleType() const { return M_FONT; } - virtual const char *getName() const = 0; +protected: + + Font(const char *name); private: diff --git a/src/modules/font/freetype/Font.cpp b/src/modules/font/freetype/Font.cpp index 3c4a596f5..1e8f61b46 100644 --- a/src/modules/font/freetype/Font.cpp +++ b/src/modules/font/freetype/Font.cpp @@ -36,6 +36,7 @@ namespace freetype { Font::Font() + : love::font::Font("love.font.freetype") { if (FT_Init_FreeType(&library)) throw love::Exception("TrueTypeFont Loading error: FT_Init_FreeType failed"); @@ -66,11 +67,6 @@ Rasterizer *Font::newTrueTypeRasterizer(love::Data *data, int size, const font:: return new TrueTypeRasterizer(library, data, size, settings, defaultdpiscale); } -const char *Font::getName() const -{ - return "love.font.freetype"; -} - } // freetype } // font } // love diff --git a/src/modules/font/freetype/Font.h b/src/modules/font/freetype/Font.h index eacfe50b6..c946925ad 100644 --- a/src/modules/font/freetype/Font.h +++ b/src/modules/font/freetype/Font.h @@ -47,9 +47,6 @@ public: Rasterizer *newRasterizer(love::filesystem::FileData *data) override; Rasterizer *newTrueTypeRasterizer(love::Data *data, int size, const font::TrueTypeRasterizer::Settings &settings) override; - // Implement Module - const char *getName() const override; - private: // FreeType library diff --git a/src/modules/graphics/Graphics.cpp b/src/modules/graphics/Graphics.cpp index bac8e98b8..64ddfa62e 100644 --- a/src/modules/graphics/Graphics.cpp +++ b/src/modules/graphics/Graphics.cpp @@ -180,8 +180,9 @@ Graphics::DisplayState::DisplayState() defaultSamplerState.mipmapFilter = SamplerState::MIPMAP_FILTER_LINEAR; } -Graphics::Graphics() - : width(0) +Graphics::Graphics(const char *name) + : Module(M_GRAPHICS, name) + , width(0) , height(0) , pixelWidth(0) , pixelHeight(0) diff --git a/src/modules/graphics/Graphics.h b/src/modules/graphics/Graphics.h index e377f128a..cef0d4e72 100644 --- a/src/modules/graphics/Graphics.h +++ b/src/modules/graphics/Graphics.h @@ -451,12 +451,9 @@ public: } }; - Graphics(); + Graphics(const char *name); virtual ~Graphics(); - // Implements Module. - virtual ModuleType getModuleType() const { return M_GRAPHICS; } - virtual Texture *newTexture(const Texture::Settings &settings, const Texture::Slices *data = nullptr) = 0; Quad *newQuad(Quad::Viewport v, double sw, double sh); diff --git a/src/modules/graphics/metal/Graphics.h b/src/modules/graphics/metal/Graphics.h index 1f4862bf8..95721632b 100644 --- a/src/modules/graphics/metal/Graphics.h +++ b/src/modules/graphics/metal/Graphics.h @@ -60,9 +60,6 @@ public: Graphics(); virtual ~Graphics(); - // Implements Module. - const char *getName() const override { return "love.graphics.metal"; } - love::graphics::Texture *newTexture(const Texture::Settings &settings, const Texture::Slices *data = nullptr) override; love::graphics::Buffer *newBuffer(const Buffer::Settings &settings, const std::vector &format, const void *data, size_t size, size_t arraylength) override; diff --git a/src/modules/graphics/metal/Graphics.mm b/src/modules/graphics/metal/Graphics.mm index 73af1f646..99e0b5ca4 100644 --- a/src/modules/graphics/metal/Graphics.mm +++ b/src/modules/graphics/metal/Graphics.mm @@ -263,7 +263,8 @@ struct DefaultVertexAttributes Graphics *Graphics::graphicsInstance = nullptr; Graphics::Graphics() - : device(nil) + : love::graphics::Graphics("love.graphics.metal") + , device(nil) , commandQueue(nil) , commandBuffer(nil) , renderEncoder(nil) diff --git a/src/modules/graphics/opengl/Graphics.cpp b/src/modules/graphics/opengl/Graphics.cpp index c505415e8..2fd7f6511 100644 --- a/src/modules/graphics/opengl/Graphics.cpp +++ b/src/modules/graphics/opengl/Graphics.cpp @@ -106,7 +106,8 @@ love::graphics::Graphics *createInstance() } Graphics::Graphics() - : windowHasStencil(false) + : love::graphics::Graphics("love.graphics.opengl") + , windowHasStencil(false) , mainVAO(0) , internalBackbufferFBO(0) , requestedBackbufferMSAA(0) @@ -147,11 +148,6 @@ Graphics::~Graphics() delete[] bufferMapMemory; } -const char *Graphics::getName() const -{ - return "love.graphics.opengl"; -} - love::graphics::StreamBuffer *Graphics::newStreamBuffer(BufferUsage type, size_t size) { return CreateStreamBuffer(type, size); diff --git a/src/modules/graphics/opengl/Graphics.h b/src/modules/graphics/opengl/Graphics.h index d053c8214..c1e9e911b 100644 --- a/src/modules/graphics/opengl/Graphics.h +++ b/src/modules/graphics/opengl/Graphics.h @@ -56,9 +56,6 @@ public: Graphics(); virtual ~Graphics(); - // Implements Module. - const char *getName() const override; - love::graphics::Texture *newTexture(const Texture::Settings &settings, const Texture::Slices *data = nullptr) override; love::graphics::Buffer *newBuffer(const Buffer::Settings &settings, const std::vector &format, const void *data, size_t size, size_t arraylength) override; diff --git a/src/modules/graphics/vulkan/Graphics.cpp b/src/modules/graphics/vulkan/Graphics.cpp index 90daad686..16464a3b4 100644 --- a/src/modules/graphics/vulkan/Graphics.cpp +++ b/src/modules/graphics/vulkan/Graphics.cpp @@ -60,11 +60,6 @@ static const std::vector deviceExtensions = { constexpr uint32_t USAGES_POLL_INTERVAL = 5000; -const char *Graphics::getName() const -{ - return "love.graphics.vulkan"; -} - VkDevice Graphics::getDevice() const { return device; @@ -95,6 +90,7 @@ static void checkOptionalInstanceExtensions(OptionalInstanceExtensions& ext) } Graphics::Graphics() + : love::graphics::Graphics("love.graphics.vulkan") { if (SDL_Vulkan_LoadLibrary(nullptr)) throw love::Exception("could not find vulkan"); diff --git a/src/modules/graphics/vulkan/Graphics.h b/src/modules/graphics/vulkan/Graphics.h index a52bb6f42..c5b164e0c 100644 --- a/src/modules/graphics/vulkan/Graphics.h +++ b/src/modules/graphics/vulkan/Graphics.h @@ -274,7 +274,6 @@ public: ~Graphics(); // implementation for virtual functions - const char *getName() const override; love::graphics::Texture *newTexture(const love::graphics::Texture::Settings &settings, const love::graphics::Texture::Slices *data) override; love::graphics::Buffer *newBuffer(const love::graphics::Buffer::Settings &settings, const std::vector& format, const void *data, size_t size, size_t arraylength) override; graphics::GraphicsReadback *newReadbackInternal(ReadbackMethod method, love::graphics::Buffer *buffer, size_t offset, size_t size, data::ByteData *dest, size_t destoffset) override; diff --git a/src/modules/image/Image.cpp b/src/modules/image/Image.cpp index 33a39fc0c..8bf46a619 100644 --- a/src/modules/image/Image.cpp +++ b/src/modules/image/Image.cpp @@ -40,6 +40,7 @@ namespace image love::Type Image::type("image", &Module::type); Image::Image() + : Module(M_IMAGE, "love.image.magpie") { using namespace magpie; @@ -65,11 +66,6 @@ Image::~Image() handler->release(); } -const char *Image::getName() const -{ - return "love.image.magpie"; -} - love::image::ImageData *Image::newImageData(Data *data) { return new ImageData(data); diff --git a/src/modules/image/Image.h b/src/modules/image/Image.h index f3f393754..cac95f5d1 100644 --- a/src/modules/image/Image.h +++ b/src/modules/image/Image.h @@ -52,10 +52,6 @@ public: Image(); virtual ~Image(); - // Implements Module. - ModuleType getModuleType() const override { return M_IMAGE; } - const char *getName() const override; - /** * Creates new ImageData from FileData. * @param data The FileData containing the encoded image data. diff --git a/src/modules/joystick/JoystickModule.h b/src/modules/joystick/JoystickModule.h index 8b21a46e5..770f8390b 100644 --- a/src/modules/joystick/JoystickModule.h +++ b/src/modules/joystick/JoystickModule.h @@ -36,9 +36,6 @@ public: virtual ~JoystickModule() {} - // Implements Module. - ModuleType getModuleType() const override { return M_JOYSTICK; } - /** * Adds a connected Joystick device and opens it for use. * Returns NULL if the Joystick could not be added. @@ -101,6 +98,12 @@ public: **/ virtual std::string getGamepadMappingString(const std::string &guid) const = 0; +protected: + + JoystickModule(const char *name) + : Module(M_JOYSTICK, name) + {} + }; // JoystickModule } // joystick diff --git a/src/modules/joystick/sdl/JoystickModule.cpp b/src/modules/joystick/sdl/JoystickModule.cpp index 8c5bc2d61..18d1a007f 100644 --- a/src/modules/joystick/sdl/JoystickModule.cpp +++ b/src/modules/joystick/sdl/JoystickModule.cpp @@ -40,6 +40,7 @@ namespace sdl { JoystickModule::JoystickModule() + : love::joystick::JoystickModule("love.joystick.sdl") { if (SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER) < 0) throw love::Exception("Could not initialize SDL joystick subsystem (%s)", SDL_GetError()); @@ -69,11 +70,6 @@ JoystickModule::~JoystickModule() SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER); } -const char *JoystickModule::getName() const -{ - return "love.joystick.sdl"; -} - love::joystick::Joystick *JoystickModule::getJoystick(int joyindex) { if (joyindex < 0 || (size_t) joyindex >= activeSticks.size()) diff --git a/src/modules/joystick/sdl/JoystickModule.h b/src/modules/joystick/sdl/JoystickModule.h index a7d057acf..90a27102b 100644 --- a/src/modules/joystick/sdl/JoystickModule.h +++ b/src/modules/joystick/sdl/JoystickModule.h @@ -44,9 +44,6 @@ public: JoystickModule(); virtual ~JoystickModule(); - // Implements Module. - const char *getName() const override; - // Implements JoystickModule. love::joystick::Joystick *addJoystick(int deviceindex) override; void removeJoystick(love::joystick::Joystick *joystick) override; diff --git a/src/modules/keyboard/Keyboard.cpp b/src/modules/keyboard/Keyboard.cpp index d79c0f8bb..e7c66a6e1 100644 --- a/src/modules/keyboard/Keyboard.cpp +++ b/src/modules/keyboard/Keyboard.cpp @@ -27,6 +27,11 @@ namespace love namespace keyboard { +Keyboard::Keyboard(const char *name) + : Module(M_KEYBOARD, name) +{ +} + bool Keyboard::getConstant(const char *in, Key &out) { return keys.find(in, out); diff --git a/src/modules/keyboard/Keyboard.h b/src/modules/keyboard/Keyboard.h index 7d0b2dd00..29d071911 100644 --- a/src/modules/keyboard/Keyboard.h +++ b/src/modules/keyboard/Keyboard.h @@ -533,9 +533,6 @@ public: virtual ~Keyboard() {} - // Implements Module. - virtual ModuleType getModuleType() const { return M_KEYBOARD; } - /** * Sets whether repeat keypress events should be sent if a key is held down. * Does not affect text input events. @@ -614,6 +611,10 @@ public: static bool getConstant(const char *in, ModifierKey &out); static bool getConstant(ModifierKey in, const char *&out); +protected: + + Keyboard(const char *name); + private: static StringMap::Entry keyEntries[]; diff --git a/src/modules/keyboard/sdl/Keyboard.cpp b/src/modules/keyboard/sdl/Keyboard.cpp index 27bcbfe1a..a2a57eb60 100644 --- a/src/modules/keyboard/sdl/Keyboard.cpp +++ b/src/modules/keyboard/sdl/Keyboard.cpp @@ -36,15 +36,11 @@ namespace sdl { Keyboard::Keyboard() - : key_repeat(false) + : love::keyboard::Keyboard("love.keyboard.sdl") + , key_repeat(false) { } -const char *Keyboard::getName() const -{ - return "love.keyboard.sdl"; -} - void Keyboard::setKeyRepeat(bool enable) { key_repeat = enable; diff --git a/src/modules/keyboard/sdl/Keyboard.h b/src/modules/keyboard/sdl/Keyboard.h index 42644721d..939e430a0 100644 --- a/src/modules/keyboard/sdl/Keyboard.h +++ b/src/modules/keyboard/sdl/Keyboard.h @@ -41,9 +41,6 @@ public: Keyboard(); - // Implements Module. - const char *getName() const; - void setKeyRepeat(bool enable); bool hasKeyRepeat() const; bool isDown(const std::vector &keylist) const; diff --git a/src/modules/math/MathModule.cpp b/src/modules/math/MathModule.cpp index 84053b83c..42fb70c2a 100644 --- a/src/modules/math/MathModule.cpp +++ b/src/modules/math/MathModule.cpp @@ -200,7 +200,8 @@ float linearToGamma(float c) } Math::Math() - : rng() + : Module(M_MATH, "love.math") + , rng() { RandomGenerator::Seed seed; seed.b64 = (uint64) time(nullptr); diff --git a/src/modules/math/MathModule.h b/src/modules/math/MathModule.h index 391052707..adf0ec0d3 100644 --- a/src/modules/math/MathModule.h +++ b/src/modules/math/MathModule.h @@ -118,17 +118,6 @@ public: Transform *newTransform(); Transform *newTransform(float x, float y, float a, float sx, float sy, float ox, float oy, float kx, float ky); - // Implements Module. - virtual ModuleType getModuleType() const - { - return M_MATH; - } - - virtual const char *getName() const - { - return "love.math"; - } - private: RandomGenerator rng; diff --git a/src/modules/mouse/Mouse.h b/src/modules/mouse/Mouse.h index b12522de0..4ad70dc56 100644 --- a/src/modules/mouse/Mouse.h +++ b/src/modules/mouse/Mouse.h @@ -64,6 +64,12 @@ public: virtual bool setRelativeMode(bool relative) = 0; virtual bool getRelativeMode() const = 0; +protected: + + Mouse(const char *name) + : Module(M_MOUSE, name) + {} + }; // Mouse } // mouse diff --git a/src/modules/mouse/sdl/Mouse.cpp b/src/modules/mouse/sdl/Mouse.cpp index 17c6c081a..ba931222e 100644 --- a/src/modules/mouse/sdl/Mouse.cpp +++ b/src/modules/mouse/sdl/Mouse.cpp @@ -56,13 +56,9 @@ static void clampToWindow(double *x, double *y) window->clampPositionInWindow(x, y); } -const char *Mouse::getName() const -{ - return "love.mouse.sdl"; -} - Mouse::Mouse() - : curCursor(nullptr) + : love::mouse::Mouse("love.mouse.sdl") + , curCursor(nullptr) { // SDL may need the video subsystem in order to clean up the cursor when // quitting. Subsystems are reference-counted. diff --git a/src/modules/mouse/sdl/Mouse.h b/src/modules/mouse/sdl/Mouse.h index 7409dd979..a74dd334d 100644 --- a/src/modules/mouse/sdl/Mouse.h +++ b/src/modules/mouse/sdl/Mouse.h @@ -39,9 +39,6 @@ class Mouse : public love::mouse::Mouse { public: - // Implements Module. - const char *getName() const override; - Mouse(); virtual ~Mouse(); diff --git a/src/modules/physics/box2d/Physics.cpp b/src/modules/physics/box2d/Physics.cpp index 4a22636d5..c3b3d5189 100644 --- a/src/modules/physics/box2d/Physics.cpp +++ b/src/modules/physics/box2d/Physics.cpp @@ -35,7 +35,8 @@ namespace box2d float Physics::meter = Physics::DEFAULT_METER; Physics::Physics() - : blockAllocator() + : Module(M_PHYSICS, "love.physics.box2d") + , blockAllocator() { meter = DEFAULT_METER; } @@ -44,11 +45,6 @@ Physics::~Physics() { } -const char *Physics::getName() const -{ - return "love.physics.box2d"; -} - World *Physics::newWorld(float gx, float gy, bool sleep) { return new World(b2Vec2(gx, gy), sleep); diff --git a/src/modules/physics/box2d/Physics.h b/src/modules/physics/box2d/Physics.h index 6db4aefc0..41da7d0fd 100644 --- a/src/modules/physics/box2d/Physics.h +++ b/src/modules/physics/box2d/Physics.h @@ -65,10 +65,6 @@ public: Physics(); virtual ~Physics(); - // Implements Module. - const char *getName() const; - virtual ModuleType getModuleType() const { return M_PHYSICS; } - /** * Creates a new World. * @param gx Gravity along x-axis. diff --git a/src/modules/sensor/Sensor.cpp b/src/modules/sensor/Sensor.cpp index fde8dbb57..7e991baa1 100644 --- a/src/modules/sensor/Sensor.cpp +++ b/src/modules/sensor/Sensor.cpp @@ -26,6 +26,11 @@ namespace love namespace sensor { +Sensor::Sensor(const char *name) + : Module(M_SENSOR, name) +{ +} + STRINGMAP_CLASS_BEGIN(Sensor, Sensor::SensorType, Sensor::SENSOR_MAX_ENUM, sensorType) { { "accelerometer", Sensor::SENSOR_ACCELEROMETER }, diff --git a/src/modules/sensor/Sensor.h b/src/modules/sensor/Sensor.h index cb10883b6..bf79d1d87 100644 --- a/src/modules/sensor/Sensor.h +++ b/src/modules/sensor/Sensor.h @@ -43,9 +43,6 @@ public: virtual ~Sensor() {} - // Implements Module. - ModuleType getModuleType() const override { return M_SENSOR; } - /** * Check the availability of the sensor. **/ @@ -75,6 +72,10 @@ public: STRINGMAP_CLASS_DECLARE(SensorType); +protected: + + Sensor(const char *name); + }; // Sensor } // sensor diff --git a/src/modules/sensor/sdl/Sensor.cpp b/src/modules/sensor/sdl/Sensor.cpp index cfd03f265..f70558ec9 100644 --- a/src/modules/sensor/sdl/Sensor.cpp +++ b/src/modules/sensor/sdl/Sensor.cpp @@ -33,7 +33,8 @@ namespace sdl { Sensor::Sensor() -: sensors() + : love::sensor::Sensor("love.sensor.sdl") + , sensors() { if (SDL_InitSubSystem(SDL_INIT_SENSOR) < 0) throw love::Exception("Could not initialize SDL sensor subsystem (%s)", SDL_GetError()); @@ -44,11 +45,6 @@ Sensor::~Sensor() SDL_QuitSubSystem(SDL_INIT_SENSOR); } -const char *Sensor::getName() const -{ - return "love.sensor.sdl"; -} - bool Sensor::hasSensor(SensorType type) { for (int i = 0; i < SDL_NumSensors(); i++) diff --git a/src/modules/sensor/sdl/Sensor.h b/src/modules/sensor/sdl/Sensor.h index a1222867b..02491add7 100644 --- a/src/modules/sensor/sdl/Sensor.h +++ b/src/modules/sensor/sdl/Sensor.h @@ -43,9 +43,6 @@ public: Sensor(); ~Sensor() override; - // Implements Module. - const char *getName() const override; - bool hasSensor(SensorType type) override; bool isEnabled(SensorType type) override; void setEnabled(SensorType type, bool enable) override; diff --git a/src/modules/sound/Sound.cpp b/src/modules/sound/Sound.cpp index 617d7f5bc..f4f3da271 100644 --- a/src/modules/sound/Sound.cpp +++ b/src/modules/sound/Sound.cpp @@ -27,6 +27,11 @@ namespace sound love::Type Sound::type("Sound", &Module::type); +Sound::Sound(const char *name) + : Module(M_SOUND, name) +{ +} + Sound::~Sound() { } diff --git a/src/modules/sound/Sound.h b/src/modules/sound/Sound.h index 1d2a2f9a1..3b0685b08 100644 --- a/src/modules/sound/Sound.h +++ b/src/modules/sound/Sound.h @@ -46,9 +46,6 @@ public: virtual ~Sound(); - // Implements Module. - virtual ModuleType getModuleType() const { return M_SOUND; } - /** * Creates new SoundData from a decoder. Fully expands the * encoded sound data into raw sound data. Not recommended @@ -89,6 +86,10 @@ public: **/ virtual Decoder *newDecoder(Stream *stream, int bufferSize) = 0; +protected: + + Sound(const char *name); + }; // Sound } // sound diff --git a/src/modules/sound/lullaby/Sound.cpp b/src/modules/sound/lullaby/Sound.cpp index 33c5c8b08..a5fe66411 100644 --- a/src/modules/sound/lullaby/Sound.cpp +++ b/src/modules/sound/lullaby/Sound.cpp @@ -59,6 +59,7 @@ namespace lullaby { Sound::Sound() + : love::sound::Sound("love.sound.lullaby") { } @@ -66,11 +67,6 @@ Sound::~Sound() { } -const char *Sound::getName() const -{ - return "love.sound.lullaby"; -} - sound::Decoder *Sound::newDecoder(Stream *stream, int bufferSize) { std::vector possibleDecoders = { diff --git a/src/modules/sound/lullaby/Sound.h b/src/modules/sound/lullaby/Sound.h index 12bca5df5..13e5e1fa3 100644 --- a/src/modules/sound/lullaby/Sound.h +++ b/src/modules/sound/lullaby/Sound.h @@ -48,9 +48,6 @@ public: Sound(); virtual ~Sound(); - /// @copydoc love::Module::getName - const char *getName() const override; - /// @copydoc love::sound::Sound::newDecoder sound::Decoder *newDecoder(Stream *stream, int bufferSize) override; diff --git a/src/modules/system/System.cpp b/src/modules/system/System.cpp index cad85ea07..cee7674c9 100644 --- a/src/modules/system/System.cpp +++ b/src/modules/system/System.cpp @@ -58,7 +58,8 @@ namespace love namespace system { -System::System() +System::System(const char *name) + : Module(M_SYSTEM, name) { } diff --git a/src/modules/system/System.h b/src/modules/system/System.h index 4c3c59f84..7a7ed764e 100644 --- a/src/modules/system/System.h +++ b/src/modules/system/System.h @@ -48,12 +48,9 @@ public: POWER_MAX_ENUM }; - System(); + System(const char *name); virtual ~System() {} - // Implements Module. - virtual ModuleType getModuleType() const { return M_SYSTEM; } - /** * Gets the current operating system. **/ diff --git a/src/modules/system/sdl/System.cpp b/src/modules/system/sdl/System.cpp index 334e829d2..b25f6334f 100644 --- a/src/modules/system/sdl/System.cpp +++ b/src/modules/system/sdl/System.cpp @@ -39,14 +39,10 @@ namespace sdl { System::System() + : love::system::System("love.system.sdl") { } -const char *System::getName() const -{ - return "love.system.sdl"; -} - int System::getProcessorCount() const { return SDL_GetCPUCount(); diff --git a/src/modules/system/sdl/System.h b/src/modules/system/sdl/System.h index b40bdd2d6..39787e9d4 100644 --- a/src/modules/system/sdl/System.h +++ b/src/modules/system/sdl/System.h @@ -42,9 +42,6 @@ public: System(); virtual ~System() {} - // Implements Module. - const char *getName() const override; - int getProcessorCount() const override; void setClipboardText(const std::string &text) const override; diff --git a/src/modules/thread/ThreadModule.cpp b/src/modules/thread/ThreadModule.cpp index bdd864f45..3d94bae53 100644 --- a/src/modules/thread/ThreadModule.cpp +++ b/src/modules/thread/ThreadModule.cpp @@ -25,6 +25,11 @@ namespace love namespace thread { +ThreadModule::ThreadModule() + : love::Module(M_THREAD, "love.thread.sdl") +{ +} + LuaThread *ThreadModule::newThread(const std::string &name, love::Data *data) { return new LuaThread(name, data); @@ -48,10 +53,5 @@ Channel *ThreadModule::getChannel(const std::string &name) return c; } -const char *ThreadModule::getName() const -{ - return "love.thread.sdl"; -} - } // thread } // love diff --git a/src/modules/thread/ThreadModule.h b/src/modules/thread/ThreadModule.h index 36d2eb8ba..516c23392 100644 --- a/src/modules/thread/ThreadModule.h +++ b/src/modules/thread/ThreadModule.h @@ -43,15 +43,12 @@ class ThreadModule : public love::Module { public: + ThreadModule(); virtual ~ThreadModule() {} virtual LuaThread *newThread(const std::string &name, love::Data *data); virtual Channel *newChannel(); virtual Channel *getChannel(const std::string &name); - // Implements Module. - virtual const char *getName() const; - virtual ModuleType getModuleType() const { return M_THREAD; } - private: std::map> namedChannels; diff --git a/src/modules/timer/Timer.cpp b/src/modules/timer/Timer.cpp index 6e8136d97..24e98f4e6 100644 --- a/src/modules/timer/Timer.cpp +++ b/src/modules/timer/Timer.cpp @@ -43,7 +43,8 @@ namespace timer { Timer::Timer() - : currTime(0) + : Module(M_TIMER, "love.timer") + , currTime(0) , prevFpsUpdate(0) , fps(0) , averageDelta(0) diff --git a/src/modules/timer/Timer.h b/src/modules/timer/Timer.h index 42511ae9b..883a6230b 100644 --- a/src/modules/timer/Timer.h +++ b/src/modules/timer/Timer.h @@ -36,10 +36,6 @@ public: Timer(); virtual ~Timer() {} - // Implements Module. - ModuleType getModuleType() const override { return M_TIMER; } - const char *getName() const override { return "love.timer"; } - /** * Measures the time between this call and the previous call, * and updates internal values accordingly. diff --git a/src/modules/touch/Touch.h b/src/modules/touch/Touch.h index 3af7d79da..08b9de60a 100644 --- a/src/modules/touch/Touch.h +++ b/src/modules/touch/Touch.h @@ -51,9 +51,6 @@ public: virtual ~Touch() {} - // Implements Module. - virtual ModuleType getModuleType() const { return M_TOUCH; } - /** * Gets all currently active touches. **/ @@ -64,6 +61,12 @@ public: **/ virtual const TouchInfo &getTouch(int64 id) const = 0; +protected: + + Touch(const char *name) + : Module(M_TOUCH, name) + {} + }; // Touch } // touch diff --git a/src/modules/touch/sdl/Touch.cpp b/src/modules/touch/sdl/Touch.cpp index 0d0473729..43f85d1fa 100644 --- a/src/modules/touch/sdl/Touch.cpp +++ b/src/modules/touch/sdl/Touch.cpp @@ -33,6 +33,11 @@ namespace touch namespace sdl { +Touch::Touch() + : love::touch::Touch("love.touch.sdl") +{ +} + const std::vector &Touch::getTouches() const { return touches; @@ -49,11 +54,6 @@ const Touch::TouchInfo &Touch::getTouch(int64 id) const throw love::Exception("Invalid active touch ID: %d", id); } -const char *Touch::getName() const -{ - return "love.touch.sdl"; -} - void Touch::onEvent(Uint32 eventtype, const TouchInfo &info) { auto compare = [&](const TouchInfo &touch) -> bool diff --git a/src/modules/touch/sdl/Touch.h b/src/modules/touch/sdl/Touch.h index 302b5ed5e..8bd5c918d 100644 --- a/src/modules/touch/sdl/Touch.h +++ b/src/modules/touch/sdl/Touch.h @@ -38,14 +38,12 @@ class Touch : public love::touch::Touch { public: + Touch(); virtual ~Touch() {} const std::vector &getTouches() const override; const TouchInfo &getTouch(int64 id) const override; - // Implements Module. - const char *getName() const override; - // SDL has functions to query the state of touch presses, but unfortunately // they are updated on a different thread in some backends, which causes // issues especially if the user is iterating through the current touches diff --git a/src/modules/video/Video.h b/src/modules/video/Video.h index e9e89d13e..9cfc16298 100644 --- a/src/modules/video/Video.h +++ b/src/modules/video/Video.h @@ -35,15 +35,20 @@ namespace video class Video : public Module { public: - virtual ~Video() {} - // Implements Module - virtual ModuleType getModuleType() const { return M_VIDEO; } + virtual ~Video() {} /** * Create a VideoStream representing video frames **/ virtual VideoStream *newVideoStream(love::filesystem::File *file) = 0; + +protected: + + Video(const char *name) + : Module(M_VIDEO, name) + {} + }; // Video } // video diff --git a/src/modules/video/theora/Video.cpp b/src/modules/video/theora/Video.cpp index 64a5d37b5..f3fd0db2c 100644 --- a/src/modules/video/theora/Video.cpp +++ b/src/modules/video/theora/Video.cpp @@ -34,6 +34,7 @@ namespace theora { Video::Video() + : love::video::Video("love.video.theora") { workerThread = new Worker(); workerThread->start(); @@ -51,11 +52,6 @@ VideoStream *Video::newVideoStream(love::filesystem::File *file) return stream; } -const char *Video::getName() const -{ - return "love.video.theora"; -} - Worker::Worker() : stopping(false) { diff --git a/src/modules/video/theora/Video.h b/src/modules/video/theora/Video.h index e286f1579..744822d73 100644 --- a/src/modules/video/theora/Video.h +++ b/src/modules/video/theora/Video.h @@ -46,9 +46,6 @@ public: Video(); virtual ~Video(); - // Implements Module - virtual const char *getName() const; - VideoStream *newVideoStream(love::filesystem::File* file); private: diff --git a/src/modules/window/Window.cpp b/src/modules/window/Window.cpp index 108ec9d0b..6b6b282da 100644 --- a/src/modules/window/Window.cpp +++ b/src/modules/window/Window.cpp @@ -43,6 +43,11 @@ bool isHighDPIAllowed() return highDPIAllowed; } +Window::Window(const char *name) + : Module(M_WINDOW, name) +{ +} + Window::~Window() { } diff --git a/src/modules/window/Window.h b/src/modules/window/Window.h index 162811898..cae80beab 100644 --- a/src/modules/window/Window.h +++ b/src/modules/window/Window.h @@ -131,9 +131,6 @@ public: virtual ~Window(); - // Implements Module. - virtual ModuleType getModuleType() const { return M_WINDOW; } - virtual void setGraphics(graphics::Graphics *graphics) = 0; virtual bool setWindow(int width = 800, int height = 600, WindowSettings *settings = nullptr) = 0; @@ -239,6 +236,10 @@ public: static bool getConstant(DisplayOrientation in, const char *&out); static std::vector getConstants(DisplayOrientation); +protected: + + Window(const char *name); + private: static StringMap::Entry settingEntries[]; diff --git a/src/modules/window/sdl/Window.cpp b/src/modules/window/sdl/Window.cpp index 2cc4a588b..7061d110e 100644 --- a/src/modules/window/sdl/Window.cpp +++ b/src/modules/window/sdl/Window.cpp @@ -88,7 +88,8 @@ namespace sdl { Window::Window() - : open(false) + : love::window::Window("love.window.sdl") + , open(false) , mouseGrabbed(false) , window(nullptr) , glcontext(nullptr) @@ -1503,11 +1504,6 @@ void Window::requestAttention(bool continuous) // TODO: Linux? } -const char *Window::getName() const -{ - return "love.window.sdl"; -} - } // sdl } // window } // love diff --git a/src/modules/window/sdl/Window.h b/src/modules/window/sdl/Window.h index 030177d7c..ca71bc37f 100644 --- a/src/modules/window/sdl/Window.h +++ b/src/modules/window/sdl/Window.h @@ -130,8 +130,6 @@ public: void requestAttention(bool continuous) override; - const char *getName() const override; - private: struct ContextAttribs