From 63f3d3746eecaa2fc468174ca4bf2730f039bf34 Mon Sep 17 00:00:00 2001 From: Paolo Capriotti Date: Fri, 14 Dec 2007 20:33:48 +0100 Subject: [PATCH] Moved Variant out of core. Changed plugin initialization function signature. --- src/CMakeLists.txt | 29 ++--------------------------- src/chessboard.cpp | 1 - src/components.h | 3 ++- src/controllers/editgame.cpp | 1 - src/core/CMakeLists.txt | 1 - src/entities/engineentity.cpp | 1 - src/entities/examinationentity.cpp | 1 - src/entities/gameentity.cpp | 1 - src/entities/icsentity.cpp | 1 - src/game.cpp | 2 +- src/graphicalgame.cpp | 2 +- src/mainwindow.cpp | 2 +- src/piecepool.cpp | 1 - src/pref_theme.cpp | 7 +++---- src/{core => }/variant.cpp | 14 ++++++++++---- src/{core => }/variant.h | 10 +++++++--- src/variants.cpp | 30 +++++++++++++----------------- src/variants.h | 2 +- src/variants/chess/chess.cpp | 12 +++++------- 19 files changed, 46 insertions(+), 75 deletions(-) rename src/{core => }/variant.cpp (66%) rename src/{core => }/variant.h (84%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0f181ae..6a5502a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -22,33 +22,7 @@ set(tagua_SRC entities/entity.cpp entities/engineentity.cpp entities/icsentity.cpp -# -# hlvariant/chess/variant.cpp -# hlvariant/chess/san.cpp -# hlvariant/chess/icsverbose.cpp -# hlvariant/chess/move.cpp -# hlvariant/chess/gamestate.cpp -# hlvariant/chess/piece.cpp -# hlvariant/chess/actions.cpp -# -# hlvariant/dummy/variant.cpp -# -# hlvariant/crazyhouse/variant.cpp -# hlvariant/crazyhouse/piece.cpp -# -# hlvariant/minichess5/variant.cpp -# -# hlvariant/shogi/variant.cpp -# hlvariant/shogi/piece.cpp -# hlvariant/shogi/shogiactions.cpp -# -# hlvariant/minishogi/variant.cpp -# -# hlvariant/sho-shogi/variant.cpp -# -# hlvariant/tori-shogi/variant.cpp -# hlvariant/tori-shogi/piece.cpp - + constrainedtext.cpp movelist.cpp infodisplay.cpp @@ -106,6 +80,7 @@ set(tagua_SRC namedsprite_utils.cpp icsgamedata.cpp decoratedmove.cpp + variant.cpp variants.cpp actioncollection.cpp tabwidget.cpp diff --git a/src/chessboard.cpp b/src/chessboard.cpp index f664236..d2f8ae3 100644 --- a/src/chessboard.cpp +++ b/src/chessboard.cpp @@ -15,7 +15,6 @@ #include #include -#include #include "animation.h" #include "chessboard.h" diff --git a/src/components.h b/src/components.h index 2ce8204..04bca8c 100644 --- a/src/components.h +++ b/src/components.h @@ -12,7 +12,8 @@ #include #include -#include + +#include "variant.h" class IAnimator; class IAnimatorFactory; diff --git a/src/controllers/editgame.cpp b/src/controllers/editgame.cpp index d03e8bd..ff67de6 100644 --- a/src/controllers/editgame.cpp +++ b/src/controllers/editgame.cpp @@ -16,7 +16,6 @@ #include #include #include -#include #include "components.h" #include "graphicalgame.h" diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 837c4b5..52cb562 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -26,7 +26,6 @@ set(taguacore_SRCS type.cpp turnpolicy.cpp validator.cpp - variant.cpp variantloader.cpp ) diff --git a/src/entities/engineentity.cpp b/src/entities/engineentity.cpp index 90792c0..f17daed 100644 --- a/src/entities/engineentity.cpp +++ b/src/entities/engineentity.cpp @@ -14,7 +14,6 @@ #include #include -#include #include "components.h" #include "game.h" diff --git a/src/entities/examinationentity.cpp b/src/entities/examinationentity.cpp index a80e075..a8d8fe8 100644 --- a/src/entities/examinationentity.cpp +++ b/src/entities/examinationentity.cpp @@ -9,7 +9,6 @@ */ #include -#include #include "examinationentity.h" #include "game.h" diff --git a/src/entities/gameentity.cpp b/src/entities/gameentity.cpp index 0577ecb..ce2e1c5 100644 --- a/src/entities/gameentity.cpp +++ b/src/entities/gameentity.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include "chessboard.h" #include "components.h" diff --git a/src/entities/icsentity.cpp b/src/entities/icsentity.cpp index 931ecfe..f5e2678 100644 --- a/src/entities/icsentity.cpp +++ b/src/entities/icsentity.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include "components.h" #include "game.h" #include "icsconnection.h" diff --git a/src/game.cpp b/src/game.cpp index b9436d3..a2b991c 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -23,7 +23,7 @@ #include #include #include -#include +#include "variant.h" #include "game.h" #include "game_p.h" diff --git a/src/graphicalgame.cpp b/src/graphicalgame.cpp index 1180018..d0707fc 100644 --- a/src/graphicalgame.cpp +++ b/src/graphicalgame.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include "variant.h" #include "components.h" #include "graphicalgame.h" diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1c26bb8..529d75d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -31,7 +31,7 @@ #include #include -#include +#include "variant.h" #include "actioncollection.h" #include "chesstable.h" diff --git a/src/piecepool.cpp b/src/piecepool.cpp index 5d04688..e29ae77 100644 --- a/src/piecepool.cpp +++ b/src/piecepool.cpp @@ -12,7 +12,6 @@ #include "piecepool.h" #include -#include #include "chessboard.h" PiecePool::PiecePool(const IColor* pool, ChessBoard* b, diff --git a/src/pref_theme.cpp b/src/pref_theme.cpp index ac2414f..92040ee 100644 --- a/src/pref_theme.cpp +++ b/src/pref_theme.cpp @@ -16,13 +16,12 @@ #include #include -#include - #include "foreach.h" -#include "mastersettings.h" #include "luaapi/loader.h" -#include "variants.h" +#include "mastersettings.h" #include "pref_theme.h" +#include "variant.h" +#include "variants.h" typedef boost::shared_ptr VariantPtr; diff --git a/src/core/variant.cpp b/src/variant.cpp similarity index 66% rename from src/core/variant.cpp rename to src/variant.cpp index c29a14b..13037ff 100644 --- a/src/core/variant.cpp +++ b/src/variant.cpp @@ -10,10 +10,16 @@ #include "variant.h" -Variant::Variant(const QString& name, const QString& proxy, bool hidden) +Variant::Variant(const QString& name, Repository* repo, + const QString& proxy, bool hidden) : m_name(name) , m_proxy(proxy) -, m_hidden(hidden) { } +, m_hidden(hidden) +, m_repo(repo) { } + +Variant::~Variant() { + delete m_repo; +} QString Variant::proxy() const { return m_proxy; } @@ -21,6 +27,6 @@ QString Variant::name() const { return m_name; } bool Variant::hidden() const { return m_hidden; } -Repository* Variant::repository() { return &m_repo; } -const Repository* Variant::repository() const { return &m_repo; } +Repository* Variant::repository() { return m_repo; } +const Repository* Variant::repository() const { return m_repo; } diff --git a/src/core/variant.h b/src/variant.h similarity index 84% rename from src/core/variant.h rename to src/variant.h index a824137..65caa52 100644 --- a/src/core/variant.h +++ b/src/variant.h @@ -14,7 +14,7 @@ #include #include -#include "repository.h" +#include /** * @brief A Variant instance represents a game supported in Tagua. @@ -23,9 +23,13 @@ class TAGUA_EXPORT Variant { QString m_name; QString m_proxy; bool m_hidden; - Repository m_repo; + Repository* m_repo; public: - Variant(const QString& name, const QString& proxy = QString(), bool hidden = false); + Variant(const QString& name, Repository* repo, + const QString& proxy = QString(), + bool hidden = false); + + ~Variant(); QString name() const; diff --git a/src/variants.cpp b/src/variants.cpp index 2659ff5..e3d5f10 100644 --- a/src/variants.cpp +++ b/src/variants.cpp @@ -11,12 +11,14 @@ #include "variants.h" #include #include -#include #include "foreach.h" +#include "variant.h" void load_plugins(); -bool Variants::load(const KService::Ptr& plugin, Repository* repo) const { +typedef Repository* PluginFactory(const IVariantLoader*); + +Repository* Variants::load(const KService::Ptr& plugin) const { // load plugin QString symbol = plugin->library() + "_initrepo"; KLibrary pluginLib(plugin->library()); @@ -28,11 +30,9 @@ bool Variants::load(const KService::Ptr& plugin, Repository* repo) const { kWarning() << pluginLib.errorString(); return false; } - void (*initrepo)(Repository*); - initrepo = reinterpret_cast(initrepo_); + PluginFactory* initrepo = reinterpret_cast(initrepo_); - (*initrepo)(repo); - return true; + return (*initrepo)(this); } Variants::Variants() { } @@ -43,14 +43,12 @@ Variants& Variants::self() { } Variant* Variants::create(const KService::Ptr& plugin) const { - std::auto_ptr v(new Variant( - plugin->name(), - plugin->property("X-Tagua-Proxy").toString())); - - if (load(plugin, v->repository())) - return v.release(); - else - return 0; + Repository* repo = load(plugin); + if (repo) + return new Variant(plugin->name(), repo, + plugin->property("X-Tagua-Proxy").toString()); + + return 0; } Variant* Variants::create(const QString& name) const { @@ -77,7 +75,5 @@ Repository* Variants::getRepository(const QString& variant) { KService::Ptr service = get(variant); if (!service) return 0; - std::auto_ptr repo(new Repository); - if (!load(service, repo.get())) return 0; - return repo.release(); + return load(service); } diff --git a/src/variants.h b/src/variants.h index 8c95f0e..146c076 100644 --- a/src/variants.h +++ b/src/variants.h @@ -23,7 +23,7 @@ class Repository; class Variants : public IVariantLoader { Variants(); - bool load(const KService::Ptr& plugin, Repository*) const; + Repository* load(const KService::Ptr& plugin) const; public: KService::Ptr get(const QString& name) const; Variant* create(const KService::Ptr& plugin) const; diff --git a/src/variants/chess/chess.cpp b/src/variants/chess/chess.cpp index ddd0cd8..bb712a9 100644 --- a/src/variants/chess/chess.cpp +++ b/src/variants/chess/chess.cpp @@ -10,7 +10,7 @@ #include #include -#include +#include #include "animator.h" #include "colors.h" @@ -22,7 +22,8 @@ using namespace Chess; -extern "C" KDE_EXPORT void taguachess_initrepo(Repository* repo) { +extern "C" KDE_EXPORT Repository* taguachess_initrepo(const IVariantLoader*) { + Repository* repo = new Repository; repo->addComponent("player/0", White::self()); repo->addComponent("player/1", Black::self()); @@ -44,11 +45,8 @@ extern "C" KDE_EXPORT void taguachess_initrepo(Repository* repo) { MoveSerializer* san = new MoveSerializer("compact"); repo->addComponent("move_serializer/san", san); repo->addComponent("move_serializer/compact", san); + + return repo; } -KDE_EXPORT Variant* chess_variant_factory() { - Variant* v = new Variant("Chess", "Chess"); - taguachess_initrepo(v->repository()); - return v; -} -- 2.11.4.GIT