From 72e83c4f49bb5c9006c701f9ee73d519f24be53f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 25 May 2013 23:26:58 +0200 Subject: [PATCH] Platform: inline/virtual optimizations. Removed redundant `inline` keyword, changed public (pure) virtual destructors to protected nonvirtual ones. --- src/Platform/AbstractContextHandler.h | 2 +- src/Platform/AbstractXApplication.h | 58 +++++++++++----------- src/Platform/EglContextHandler.h | 4 +- src/Platform/GlutApplication.h | 66 ++++++++++++------------- src/Platform/GlxApplication.h | 9 +++- src/Platform/GlxContextHandler.h | 8 ++- src/Platform/NaClApplication.cpp | 3 -- src/Platform/NaClApplication.h | 63 +++++++++++------------ src/Platform/Sdl2Application.h | 60 +++++++++++----------- src/Platform/WindowlessGlxApplication.h | 6 ++- src/Platform/XEglApplication.h | 9 +++- src/Platform/magnum-info.cpp | 2 +- 12 files changed, 146 insertions(+), 144 deletions(-) diff --git a/src/Platform/AbstractContextHandler.h b/src/Platform/AbstractContextHandler.h index e4bb876a9..9ec1df359 100644 --- a/src/Platform/AbstractContextHandler.h +++ b/src/Platform/AbstractContextHandler.h @@ -63,7 +63,7 @@ template class AbstractContextHandl * * Default is to disable. */ - virtual inline ExtensionWrangler::ExperimentalFeatures experimentalExtensionWranglerFeatures() const { + virtual ExtensionWrangler::ExperimentalFeatures experimentalExtensionWranglerFeatures() const { return ExtensionWrangler::ExperimentalFeatures::Disable; } diff --git a/src/Platform/AbstractXApplication.h b/src/Platform/AbstractXApplication.h index bd11e2c11..ac0710785 100644 --- a/src/Platform/AbstractXApplication.h +++ b/src/Platform/AbstractXApplication.h @@ -89,13 +89,6 @@ class AbstractXApplication { */ explicit AbstractXApplication(AbstractContextHandler* contextHandler, const Arguments& arguments, Configuration* configuration); - /** - * @brief Destructor - * - * Deletes context and destroys the window. - */ - virtual ~AbstractXApplication() = 0; - /** * @brief Execute main loop * @return Value for returning from `main()`. @@ -103,9 +96,18 @@ class AbstractXApplication { int exec(); /** @brief Exit application main loop */ - inline void exit() { flags |= Flag::Exit; } + void exit() { flags |= Flag::Exit; } protected: + /** + * @brief Destructor + * + * Deletes context and destroys the window. + */ + /* Nobody will need to have (and delete) AbstractXApplication*, thus + this is faster than public pure virtual destructor */ + ~AbstractXApplication(); + /** @copydoc GlutApplication::createContext() */ void createContext(Configuration* configuration); @@ -118,10 +120,10 @@ class AbstractXApplication { virtual void drawEvent() = 0; /** @copydoc GlutApplication::swapBuffers() */ - inline void swapBuffers() { contextHandler->swapBuffers(); } + void swapBuffers() { contextHandler->swapBuffers(); } /** @copydoc GlutApplication::redraw() */ - inline void redraw() { flags |= Flag::Redraw; } + void redraw() { flags |= Flag::Redraw; } /*@}*/ @@ -191,7 +193,7 @@ class AbstractXApplication::Configuration { ~Configuration(); /** @brief Window title */ - inline std::string title() const { return _title; } + std::string title() const { return _title; } /** * @brief Set window title @@ -199,13 +201,13 @@ class AbstractXApplication::Configuration { * * Default is `"Magnum X Application"`. */ - inline Configuration* setTitle(std::string title) { + Configuration* setTitle(std::string title) { _title = std::move(title); return this; } /** @brief Window size */ - inline Vector2i size() const { return _size; } + Vector2i size() const { return _size; } /** * @brief Set window size @@ -213,7 +215,7 @@ class AbstractXApplication::Configuration { * * Default is `{800, 600}`. */ - inline Configuration* setSize(const Vector2i& size) { + Configuration* setSize(const Vector2i& size) { _size = size; return this; } @@ -263,20 +265,20 @@ class AbstractXApplication::InputEvent { */ typedef Containers::EnumSet Modifiers; - inline virtual ~InputEvent() {} - /** @copydoc GlutApplication::InputEvent::setAccepted() */ - inline void setAccepted(bool accepted = true) { _accepted = accepted; } + void setAccepted(bool accepted = true) { _accepted = accepted; } /** @copydoc GlutApplication::InputEvent::isAccepted() */ - inline bool isAccepted() { return _accepted; } + constexpr bool isAccepted() const { return _accepted; } /** @brief Modifiers */ - inline Modifiers modifiers() const { return _modifiers; } + constexpr Modifiers modifiers() const { return _modifiers; } #ifndef DOXYGEN_GENERATING_OUTPUT protected: - inline InputEvent(Modifiers modifiers): _modifiers(modifiers), _accepted(false) {} + constexpr InputEvent(Modifiers modifiers): _modifiers(modifiers), _accepted(false) {} + + ~InputEvent() = default; #endif private: @@ -374,13 +376,13 @@ class AbstractXApplication::KeyEvent: public AbstractXApplication::InputEvent { }; /** @brief Key */ - inline Key key() const { return _key; } + constexpr Key key() const { return _key; } /** @brief Position */ - inline Vector2i position() const { return _position; } + constexpr Vector2i position() const { return _position; } private: - inline KeyEvent(Key key, Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _key(key), _position(position) {} + constexpr KeyEvent(Key key, Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _key(key), _position(position) {} const Key _key; const Vector2i _position; @@ -409,13 +411,13 @@ class AbstractXApplication::MouseEvent: public AbstractXApplication::InputEvent }; /** @brief Button */ - inline Button button() const { return _button; } + constexpr Button button() const { return _button; } /** @brief Position */ - inline Vector2i position() const { return _position; } + constexpr Vector2i position() const { return _position; } private: - inline MouseEvent(Button button, Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _button(button), _position(position) {} + constexpr MouseEvent(Button button, Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _button(button), _position(position) {} const Button _button; const Vector2i _position; @@ -431,10 +433,10 @@ class AbstractXApplication::MouseMoveEvent: public AbstractXApplication::InputEv public: /** @brief Position */ - inline Vector2i position() const { return _position; } + constexpr Vector2i position() const { return _position; } private: - inline MouseMoveEvent(Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _position(position) {} + constexpr MouseMoveEvent(Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _position(position) {} const Vector2i _position; }; diff --git a/src/Platform/EglContextHandler.h b/src/Platform/EglContextHandler.h index a67d709e0..6c1869b7c 100644 --- a/src/Platform/EglContextHandler.h +++ b/src/Platform/EglContextHandler.h @@ -66,11 +66,11 @@ class EglContextHandler: public AbstractContextHandler(cursor)); } /** @brief Warp mouse cursor to given coordinates */ - inline void warpMouseCursor(const Vector2i& position) { + void warpMouseCursor(const Vector2i& position) { glutWarpPointer(position.x(), position.y()); } @@ -250,7 +248,7 @@ class GlutApplication { private: void initialize(int& argc, char** argv); - inline static void staticViewportEvent(int x, int y) { + static void staticViewportEvent(int x, int y) { instance->viewportEvent({x, y}); } @@ -260,7 +258,7 @@ class GlutApplication { static void staticMouseMoveEvent(int x, int y); - inline static void staticDrawEvent() { + static void staticDrawEvent() { instance->drawEvent(); } @@ -286,7 +284,7 @@ class GlutApplication::Configuration { ~Configuration(); /** @brief Window title */ - inline std::string title() const { return _title; } + std::string title() const { return _title; } /** * @brief Set window title @@ -294,13 +292,13 @@ class GlutApplication::Configuration { * * Default is `"Magnum GLUT Application"`. */ - inline Configuration* setTitle(std::string title) { + Configuration* setTitle(std::string title) { _title = std::move(title); return this; } /** @brief Window size */ - inline Vector2i size() const { return _size; } + Vector2i size() const { return _size; } /** * @brief Set window size @@ -308,13 +306,13 @@ class GlutApplication::Configuration { * * Default is `{800, 600}`. */ - inline Configuration* setSize(const Vector2i& size) { + Configuration* setSize(const Vector2i& size) { _size = size; return this; } /** @brief Sample count */ - inline Int sampleCount() const { return _sampleCount; } + Int sampleCount() const { return _sampleCount; } /** * @brief Set sample count @@ -324,7 +322,7 @@ class GlutApplication::Configuration { * ignored, GLUT either enables it or disables. See also * @ref Renderer::Feature "Renderer::Feature::Multisampling". */ - inline Configuration* setSampleCount(Int count) { + Configuration* setSampleCount(Int count) { _sampleCount = count; return this; } @@ -348,23 +346,21 @@ class GlutApplication::InputEvent { InputEvent& operator=(InputEvent&&) = delete; public: - inline virtual ~InputEvent() {} - /** * @brief Set event as accepted * * If the event is ignored (i.e., not set as accepted), it might be * propagated elsewhere. By default is each event ignored. */ - inline void setAccepted(bool accepted = true) { _accepted = accepted; } + void setAccepted(bool accepted = true) { _accepted = accepted; } /** @brief Whether the event is accepted */ - inline bool isAccepted() { return _accepted; } + constexpr bool isAccepted() const { return _accepted; } - #ifndef DOXYGEN_GENERATING_OUTPUT protected: - inline InputEvent(): _accepted(false) {} - #endif + constexpr InputEvent(): _accepted(false) {} + + ~InputEvent() = default; private: bool _accepted; @@ -408,13 +404,13 @@ class GlutApplication::KeyEvent: public GlutApplication::InputEvent { }; /** @brief Key */ - inline Key key() const { return _key; } + constexpr Key key() const { return _key; } /** @brief Position */ - inline Vector2i position() const { return _position; } + constexpr Vector2i position() const { return _position; } private: - inline KeyEvent(Key key, const Vector2i& position): _key(key), _position(position) {} + constexpr KeyEvent(Key key, const Vector2i& position): _key(key), _position(position) {} const Key _key; const Vector2i _position; @@ -443,13 +439,13 @@ class GlutApplication::MouseEvent: public GlutApplication::InputEvent { }; /** @brief Button */ - inline Button button() const { return _button; } + constexpr Button button() const { return _button; } /** @brief Position */ - inline Vector2i position() const { return _position; } + constexpr Vector2i position() const { return _position; } private: - inline MouseEvent(Button button, const Vector2i& position): _button(button), _position(position) {} + constexpr MouseEvent(Button button, const Vector2i& position): _button(button), _position(position) {} const Button _button; const Vector2i _position; @@ -465,10 +461,10 @@ class GlutApplication::MouseMoveEvent: public GlutApplication::InputEvent { public: /** @brief Position */ - inline Vector2i position() const { return _position; } + constexpr Vector2i position() const { return _position; } private: - inline MouseMoveEvent(const Vector2i& position): _position(position) {} + constexpr MouseMoveEvent(const Vector2i& position): _position(position) {} const Vector2i _position; }; diff --git a/src/Platform/GlxApplication.h b/src/Platform/GlxApplication.h index d7a0dee80..d48975e01 100644 --- a/src/Platform/GlxApplication.h +++ b/src/Platform/GlxApplication.h @@ -57,10 +57,15 @@ to simplify porting. class GlxApplication: public AbstractXApplication { public: /** @copydoc GlutApplication::GlutApplication(const Arguments&) */ - inline explicit GlxApplication(const Arguments& arguments): AbstractXApplication(new GlxContextHandler, arguments) {} + explicit GlxApplication(const Arguments& arguments): AbstractXApplication(new GlxContextHandler, arguments) {} /** @copydoc GlutApplication::GlutApplication(const Arguments&, Configuration*) */ - inline explicit GlxApplication(const Arguments& arguments, Configuration* configuration): AbstractXApplication(new GlxContextHandler, arguments, configuration) {} + explicit GlxApplication(const Arguments& arguments, Configuration* configuration): AbstractXApplication(new GlxContextHandler, arguments, configuration) {} + + protected: + /* Nobody will need to have (and delete) GlxApplication*, thus this is + faster than public pure virtual destructor */ + ~GlxApplication() = default; }; /** @hideinitializer diff --git a/src/Platform/GlxContextHandler.h b/src/Platform/GlxContextHandler.h index 60494e0f9..4f53efcfa 100644 --- a/src/Platform/GlxContextHandler.h +++ b/src/Platform/GlxContextHandler.h @@ -56,17 +56,15 @@ class GlxContextHandler: public AbstractContextHandlerflags |= Flag::MouseLocked; } -NaClApplication::Configuration::Configuration(): _size(640, 480), _sampleCount(0) {} -NaClApplication::Configuration::~Configuration() = default; - }} diff --git a/src/Platform/NaClApplication.h b/src/Platform/NaClApplication.h index 1556be0e4..09772f9a8 100644 --- a/src/Platform/NaClApplication.h +++ b/src/Platform/NaClApplication.h @@ -102,8 +102,6 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient, public */ explicit NaClApplication(const Arguments& arguments, Configuration* configuration); - ~NaClApplication(); - /** @brief Whether the application runs fullscreen */ bool isFullscreen(); @@ -118,6 +116,10 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient, public bool setFullscreen(bool enabled); protected: + /* Nobody will need to have (and delete) NaClApplication*, thus this is + faster than public pure virtual destructor */ + ~NaClApplication(); + /** @copydoc GlutApplication::createContext() */ void createContext(Configuration* configuration); @@ -136,7 +138,7 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient, public void swapBuffers(); /** @copydoc GlutApplication::redraw() */ - inline void redraw() { flags |= Flag::Redraw; } + void redraw() { flags |= Flag::Redraw; } /*@}*/ @@ -166,9 +168,7 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient, public public: /** @brief Whether mouse is locked */ - inline bool isMouseLocked() const { - return flags & Flag::MouseLocked; - } + bool isMouseLocked() const { return flags & Flag::MouseLocked; } /** * @brief Enable or disable mouse locking @@ -220,11 +220,11 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient, public }; typedef Containers::EnumSet Flags; - inline void Graphics3DContextLost() override { + void Graphics3DContextLost() override { CORRADE_ASSERT(false, "NaClApplication: context unexpectedly lost", ); } - inline void MouseLockLost() override { + void MouseLockLost() override { flags &= ~Flag::MouseLocked; } @@ -257,11 +257,10 @@ class NaClApplication::Configuration { Configuration& operator=(Configuration&&) = delete; public: - explicit Configuration(); - ~Configuration(); + constexpr explicit Configuration(): _size(640, 480), _sampleCount(0) {} /** @brief Window size */ - inline Vector2i size() const { return _size; } + Vector2i size() const { return _size; } /** * @brief Set window size @@ -269,13 +268,13 @@ class NaClApplication::Configuration { * * Default is `{640, 480}`. */ - inline Configuration* setSize(const Vector2i& size) { + Configuration* setSize(const Vector2i& size) { _size = size; return this; } /** @brief Sample count */ - inline Int sampleCount() const { return _sampleCount; } + Int sampleCount() const { return _sampleCount; } /** * @brief Set sample count @@ -284,7 +283,7 @@ class NaClApplication::Configuration { * Default is `0`, thus no multisampling. See also * @ref Renderer::Feature "Renderer::Feature::Multisampling". */ - inline Configuration* setSampleCount(Int count) { + Configuration* setSampleCount(Int count) { _sampleCount = count; return this; } @@ -336,10 +335,8 @@ class NaClApplication::InputEvent { */ typedef Containers::EnumSet Modifiers; - inline virtual ~InputEvent() {} - /** @brief Modifiers */ - inline Modifiers modifiers() const { return _modifiers; } + constexpr Modifiers modifiers() const { return _modifiers; } /** * @brief Set event as accepted @@ -348,14 +345,16 @@ class NaClApplication::InputEvent { * propagated elsewhere (e.g. to the browser). By default is each * event ignored. */ - inline void setAccepted(bool accepted = true) { _accepted = accepted; } + void setAccepted(bool accepted = true) { _accepted = accepted; } /** @brief Whether the event is accepted */ - inline bool isAccepted() { return _accepted; } + constexpr bool isAccepted() const { return _accepted; } #ifndef DOXYGEN_GENERATING_OUTPUT protected: - inline InputEvent(Modifiers modifiers): _accepted(false), _modifiers(modifiers) {} + constexpr InputEvent(Modifiers modifiers): _accepted(false), _modifiers(modifiers) {} + + ~InputEvent() = default; #endif private: @@ -450,10 +449,10 @@ class NaClApplication::KeyEvent: public NaClApplication::InputEvent { }; /** @brief Key */ - inline Key key() const { return _key; } + constexpr Key key() const { return _key; } private: - inline KeyEvent(Key key, Modifiers modifiers): InputEvent(modifiers), _key(key) {} + constexpr KeyEvent(Key key, Modifiers modifiers): InputEvent(modifiers), _key(key) {} const Key _key; }; @@ -480,13 +479,13 @@ class NaClApplication::MouseEvent: public NaClApplication::InputEvent { }; /** @brief Button */ - inline Button button() const { return _button; } + constexpr Button button() const { return _button; } /** @brief Position */ - inline Vector2i position() const { return _position; } + constexpr Vector2i position() const { return _position; } private: - inline MouseEvent(Button button, const Vector2i& position, Modifiers modifiers): InputEvent(modifiers), _button(button), _position(position) {} + constexpr MouseEvent(Button button, const Vector2i& position, Modifiers modifiers): InputEvent(modifiers), _button(button), _position(position) {} const Button _button; const Vector2i _position; @@ -503,17 +502,17 @@ class NaClApplication::MouseMoveEvent: public NaClApplication::InputEvent { public: /** @brief Position */ - inline Vector2i position() const { return _position; } + constexpr Vector2i position() const { return _position; } /** * @brief Relative position * * Position relative to previous event. */ - inline Vector2i relativePosition() const { return _relativePosition; } + constexpr Vector2i relativePosition() const { return _relativePosition; } private: - inline MouseMoveEvent(const Vector2i& position, const Vector2i& relativePosition, Modifiers modifiers): InputEvent(modifiers), _position(position), _relativePosition(relativePosition) {} + constexpr MouseMoveEvent(const Vector2i& position, const Vector2i& relativePosition, Modifiers modifiers): InputEvent(modifiers), _position(position), _relativePosition(relativePosition) {} const Vector2i _position, _relativePosition; }; @@ -523,15 +522,13 @@ CORRADE_ENUMSET_OPERATORS(NaClApplication::Flags) namespace Implementation { template class NaClModule: public pp::Module { public: - inline ~NaClModule() { - glTerminatePPAPI(); - } + ~NaClModule() { glTerminatePPAPI(); } - inline bool Init() override { + bool Init() override { return glInitializePPAPI(get_browser_interface()); } - inline pp::Instance* CreateInstance(PP_Instance instance) { + pp::Instance* CreateInstance(PP_Instance instance) { return new Application(instance); } }; diff --git a/src/Platform/Sdl2Application.h b/src/Platform/Sdl2Application.h index db1cf2cfb..06c5319db 100644 --- a/src/Platform/Sdl2Application.h +++ b/src/Platform/Sdl2Application.h @@ -86,15 +86,17 @@ class Sdl2Application { /** @copydoc GlutApplication::GlutApplication(const Arguments&, Configuration*) */ explicit Sdl2Application(const Arguments& arguments, Configuration* configuration); - virtual ~Sdl2Application(); - /** @copydoc GlutApplication::exec() */ int exec(); /** @brief Exit application main loop */ - inline void exit() { flags |= Flag::Exit; } + void exit() { flags |= Flag::Exit; } protected: + /* Nobody will need to have (and delete) Sdl2Application*, thus this is + faster than public pure virtual destructor */ + virtual ~Sdl2Application(); + /** @copydoc GlutApplication::createContext() */ void createContext(Configuration* configuration); @@ -110,10 +112,10 @@ class Sdl2Application { virtual void drawEvent() = 0; /** @copydoc GlutApplication::swapBuffers() */ - inline void swapBuffers() { SDL_GL_SwapWindow(window); } + void swapBuffers() { SDL_GL_SwapWindow(window); } /** @copydoc GlutApplication::redraw() */ - inline void redraw() { flags |= Flag::Redraw; } + void redraw() { flags |= Flag::Redraw; } /*@}*/ @@ -135,9 +137,7 @@ class Sdl2Application { public: /** @brief Whether mouse is locked */ - inline bool isMouseLocked() const { - return SDL_GetRelativeMouseMode(); - } + bool isMouseLocked() const { return SDL_GetRelativeMouseMode(); } /** * @brief Enable or disable mouse locking @@ -227,7 +227,7 @@ class Sdl2Application::Configuration { ~Configuration(); /** @brief Window title */ - inline std::string title() const { return _title; } + std::string title() const { return _title; } /** * @brief Set window title @@ -235,13 +235,13 @@ class Sdl2Application::Configuration { * * Default is `"Magnum SDL2 Application"`. */ - inline Configuration* setTitle(std::string title) { + Configuration* setTitle(std::string title) { _title = std::move(title); return this; } /** @brief Window size */ - inline Vector2i size() const { return _size; } + Vector2i size() const { return _size; } /** * @brief Set window size @@ -249,13 +249,13 @@ class Sdl2Application::Configuration { * * Default is `{800, 600}`. */ - inline Configuration* setSize(const Vector2i& size) { + Configuration* setSize(const Vector2i& size) { _size = size; return this; } /** @brief Window flags */ - inline Flags flags() const { return _flags; } + Flags flags() const { return _flags; } /** * @brief Set window flags @@ -263,13 +263,13 @@ class Sdl2Application::Configuration { * * Default is @ref Flag "Flag::Resizable". */ - inline Configuration* setFlags(const Flags flags) { + Configuration* setFlags(const Flags flags) { _flags = flags; return this; } /** @brief Sample count */ - inline Int sampleCount() const { return _sampleCount; } + Int sampleCount() const { return _sampleCount; } /** * @brief Set sample count @@ -278,7 +278,7 @@ class Sdl2Application::Configuration { * Default is `0`, thus no multisampling. See also * @ref Renderer::Feature "Renderer::Feature::Multisampling". */ - inline Configuration* setSampleCount(Int count) { + Configuration* setSampleCount(Int count) { _sampleCount = count; return this; } @@ -329,17 +329,17 @@ class Sdl2Application::InputEvent { */ typedef Containers::EnumSet Modifiers; - inline virtual ~InputEvent() {} - /** @copydoc GlutApplication::InputEvent::setAccepted() */ - inline void setAccepted(bool accepted = true) { _accepted = accepted; } + void setAccepted(bool accepted = true) { _accepted = accepted; } /** @copydoc GlutApplication::InputEvent::isAccepted() */ - inline bool isAccepted() { return _accepted; } + constexpr bool isAccepted() const { return _accepted; } #ifndef DOXYGEN_GENERATING_OUTPUT protected: - inline InputEvent(): _accepted(false) {} + constexpr explicit InputEvent(): _accepted(false) {} + + ~InputEvent() = default; #endif private: @@ -434,13 +434,13 @@ class Sdl2Application::KeyEvent: public Sdl2Application::InputEvent { }; /** @brief Key */ - inline Key key() const { return _key; } + constexpr Key key() const { return _key; } /** @brief Modifiers */ - inline Modifiers modifiers() const { return _modifiers; } + constexpr Modifiers modifiers() const { return _modifiers; } private: - inline KeyEvent(Key key, Modifiers modifiers): _key(key), _modifiers(modifiers) {} + constexpr KeyEvent(Key key, Modifiers modifiers): _key(key), _modifiers(modifiers) {} const Key _key; const Modifiers _modifiers; @@ -469,10 +469,10 @@ class Sdl2Application::MouseEvent: public Sdl2Application::InputEvent { }; /** @brief Button */ - inline Button button() const { return _button; } + constexpr Button button() const { return _button; } /** @brief Position */ - inline Vector2i position() const { return _position; } + constexpr Vector2i position() const { return _position; } /** * @brief Modifiers @@ -482,7 +482,7 @@ class Sdl2Application::MouseEvent: public Sdl2Application::InputEvent { Modifiers modifiers(); private: - inline MouseEvent(Button button, const Vector2i& position): _button(button), _position(position), modifiersLoaded(false) {} + constexpr MouseEvent(Button button, const Vector2i& position): _button(button), _position(position), modifiersLoaded(false) {} const Button _button; const Vector2i _position; @@ -500,14 +500,14 @@ class Sdl2Application::MouseMoveEvent: public Sdl2Application::InputEvent { public: /** @brief Position */ - inline Vector2i position() const { return _position; } + constexpr Vector2i position() const { return _position; } /** * @brief Relative position * * Position relative to previous event. */ - inline Vector2i relativePosition() const { return _relativePosition; } + constexpr Vector2i relativePosition() const { return _relativePosition; } /** * @brief Modifiers @@ -517,7 +517,7 @@ class Sdl2Application::MouseMoveEvent: public Sdl2Application::InputEvent { Modifiers modifiers(); private: - inline MouseMoveEvent(const Vector2i& position, const Vector2i& relativePosition): _position(position), _relativePosition(relativePosition), modifiersLoaded(false) {} + constexpr MouseMoveEvent(const Vector2i& position, const Vector2i& relativePosition): _position(position), _relativePosition(relativePosition), modifiersLoaded(false) {} const Vector2i _position, _relativePosition; bool modifiersLoaded; diff --git a/src/Platform/WindowlessGlxApplication.h b/src/Platform/WindowlessGlxApplication.h index c38cfb5a6..df11f2dda 100644 --- a/src/Platform/WindowlessGlxApplication.h +++ b/src/Platform/WindowlessGlxApplication.h @@ -79,8 +79,6 @@ class WindowlessGlxApplication { /** @copydoc GlutApplication::GlutApplication(const Arguments&, Configuration*) */ explicit WindowlessGlxApplication(const Arguments& arguments, Configuration* configuration); - ~WindowlessGlxApplication(); - /** * @brief Execute application * @return Value for returning from `main()`. @@ -88,6 +86,10 @@ class WindowlessGlxApplication { virtual int exec() = 0; protected: + /* Nobody will need to have (and delete) WindowlessGlxApplication*, + thus this is faster than public pure virtual destructor */ + ~WindowlessGlxApplication(); + /** @copydoc GlutApplication::createContext() */ void createContext(Configuration* configuration); diff --git a/src/Platform/XEglApplication.h b/src/Platform/XEglApplication.h index 2e4c07d98..c2c708b4e 100644 --- a/src/Platform/XEglApplication.h +++ b/src/Platform/XEglApplication.h @@ -57,10 +57,15 @@ to simplify porting. class XEglApplication: public AbstractXApplication { public: /** @copydoc GlutApplication::GlutApplication(const Arguments&) */ - inline explicit XEglApplication(const Arguments& arguments): AbstractXApplication(new EglContextHandler, arguments) {} + explicit XEglApplication(const Arguments& arguments): AbstractXApplication(new EglContextHandler, arguments) {} /** @copydoc GlutApplication::GlutApplication(const Arguments&, Configuration*) */ - inline explicit XEglApplication(const Arguments& arguments, Configuration* configuration): AbstractXApplication(new EglContextHandler, arguments, configuration) {} + explicit XEglApplication(const Arguments& arguments, Configuration* configuration): AbstractXApplication(new EglContextHandler, arguments, configuration) {} + + protected: + /* Nobody will need to have (and delete) XEglApplication*, thus this is + faster than public pure virtual destructor */ + ~XEglApplication() = default; }; /** @hideinitializer diff --git a/src/Platform/magnum-info.cpp b/src/Platform/magnum-info.cpp index 2df377e93..ebf533357 100644 --- a/src/Platform/magnum-info.cpp +++ b/src/Platform/magnum-info.cpp @@ -34,7 +34,7 @@ class MagnumInfo: public Platform::WindowlessGlxApplication { public: explicit MagnumInfo(const Arguments& arguments); - inline int exec() override { return 0; } + int exec() override { return 0; } }; MagnumInfo::MagnumInfo(const Arguments& arguments): WindowlessGlxApplication(arguments) {