Prepare 1.0 alpha3 release.
[tagua/yd.git] / src / variants.cpp
blob23095f99f2ac9451de67227bbd9c2a540d1fe490
1 /*
2 Copyright (c) 2006 Paolo Capriotti <p.capriotti@gmail.com>
3 (c) 2006 Maurizio Monge <maurizio.monge@kdemail.net>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9 */
11 #include "variants.h"
13 using namespace HLVariant;
15 #define DECLARE_FACTORY(VARIANT) \
16 namespace HLVariant { \
17 namespace VARIANT { \
18 VariantFactory* createFactory(); \
19 } \
21 DECLARE_FACTORY(Chess)
22 DECLARE_FACTORY(Minichess5)
23 DECLARE_FACTORY(Crazyhouse)
24 DECLARE_FACTORY(Dummy)
25 DECLARE_FACTORY(Shogi)
26 DECLARE_FACTORY(MiniShogi)
27 DECLARE_FACTORY(ShoShogi)
28 DECLARE_FACTORY(ToriShogi)
29 #undef DECLARE_FACTORY
31 Variants::Variants() {
32 addFactory(Chess::createFactory());
33 addFactory(Minichess5::createFactory());
34 addFactory(Crazyhouse::createFactory());
35 addFactory(Dummy::createFactory());
36 addFactory(Shogi::createFactory());
37 addFactory(MiniShogi::createFactory());
38 addFactory(ShoShogi::createFactory());
39 addFactory(ToriShogi::createFactory());
42 Variants& Variants::instance() {
43 static Variants inst;
44 return inst;
47 VariantFactory* Variants::getFactory(const QString& name) const {
48 Factories::const_iterator it = m_factories.find(name);
49 if (it != m_factories.end()) {
50 return it->second;
53 return 0;
56 VariantPtr Variants::get(const QString& name) const {
57 VariantFactory* factory = getFactory(name);
58 return factory ? VariantPtr(factory->createVariant()) : VariantPtr();
61 void Variants::addFactory(VariantFactory* factory) {
62 m_factories[factory->name()] = factory;
65 QStringList Variants::all() const {
66 QStringList s;
67 for (Factories::const_iterator end = m_factories.end(), it = m_factories.begin(); it != end; ++it) {
68 if (!it->second->hidden())
69 s << it->first;
72 return s;