Add macro-based pimpl & use it everywhere

This commit is contained in:
Nikita Lisitsa 2020-10-23 10:37:23 +03:00
parent b861cc60ff
commit 08c62d6e3f
6 changed files with 27 additions and 16 deletions

View file

@ -2,6 +2,8 @@
#include <psemek/app/scene.hpp>
#include <psemek/util/pimpl.hpp>
#include <SDL2/SDL_keycode.h>
#include <memory>
@ -37,10 +39,7 @@ namespace psemek::app
int height() const;
private:
struct impl;
std::unique_ptr<impl> pimpl_;
struct impl & impl() { return *pimpl_; }
struct impl const & impl() const { return *pimpl_; }
psemek_declare_pimpl
};
}

View file

@ -5,4 +5,4 @@ file(GLOB_RECURSE PSEMEK_AUDIO_SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "s
add_library(psemek-audio ${PSEMEK_AUDIO_HEADERS} ${PSEMEK_AUDIO_SOURCES})
target_include_directories(psemek-audio PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
target_link_libraries(psemek-audio PUBLIC psemek-sdl2 psemek-log SDL2_mixer)
target_link_libraries(psemek-audio PUBLIC psemek-sdl2 psemek-util psemek-log SDL2_mixer)

View file

@ -5,6 +5,8 @@
#include <psemek/audio/stream.hpp>
#include <psemek/audio/track.hpp>
#include <psemek/util/pimpl.hpp>
#include <memory>
#include <string_view>
@ -35,10 +37,7 @@ namespace psemek::audio
std::shared_ptr<stream> play(std::shared_ptr<track> s, bool start = true, bool loop = false);
private:
struct impl;
std::shared_ptr<impl> pimpl_;
struct impl & impl() { return *pimpl_; }
struct impl const & impl() const { return *pimpl_; }
psemek_declare_shared_pimpl
};
}

View file

@ -2,11 +2,14 @@
#include <psemek/gfx/color.hpp>
#include <psemek/gfx/texture.hpp>
#include <psemek/geom/vector.hpp>
#include <psemek/geom/point.hpp>
#include <psemek/geom/matrix.hpp>
#include <psemek/geom/box.hpp>
#include <psemek/util/pimpl.hpp>
#include <vector>
#include <memory>
@ -70,9 +73,7 @@ namespace psemek::gfx
void render(geom::matrix<float, 4, 4> const & transform);
private:
struct impl;
std::unique_ptr<impl> pimpl_;
struct impl & impl() { return *pimpl_; }
psemek_declare_pimpl
};
}

View file

@ -3,8 +3,11 @@
#include <psemek/gfx/drawable.hpp>
#include <psemek/gfx/color.hpp>
#include <psemek/gfx/texture.hpp>
#include <psemek/geom/matrix.hpp>
#include <psemek/util/pimpl.hpp>
#include <vector>
#include <memory>
@ -48,10 +51,7 @@ namespace psemek::gfx
void render(render_options const & opts);
private:
struct impl;
std::unique_ptr<struct impl> pimpl_;
struct impl & impl() { return *pimpl_; }
struct impl const & impl() const { return *pimpl_; }
psemek_declare_pimpl
};
}

View file

@ -3,6 +3,18 @@
#include <type_traits>
#include <memory>
#define psemek_declare_pimpl \
struct impl; \
std::unique_ptr<struct impl> pimpl_; \
struct impl & impl() { return *pimpl_; } \
struct impl const & impl() const { return *pimpl_; }
#define psemek_declare_shared_pimpl \
struct impl; \
std::shared_ptr<struct impl> pimpl_; \
struct impl & impl() { return *pimpl_; } \
struct impl const & impl() const { return *pimpl_; }
namespace psemek::util::pimpl
{