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