Add finer engine tracing.
[tagua/yd.git] / src / engineinfo.cpp
blob49281c54ff8d8bb6fc7424a8badd12eb7c4b310e
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 "engineinfo.h"
12 #include "xboardengine.h"
13 #include "gnushogiengine.h"
14 #include "ui.h"
15 #include <iostream>
17 using namespace boost;
19 void EngineDetails::load(Settings s) {
20 s["name"] >> name;
21 s["path"] >> path;
22 type = typeFromName(s["type"].value<QString>());
23 if (s["work-path"])
24 s["work-path"] >> workPath;
27 void EngineDetails::save(Settings s) {
28 s["name"] = name;
29 s["path"] = path;
30 s["type"] = typeName(type);
31 s["work-path"] = workPath;
34 void EngineInfo::playAsWhite() {
35 playAs(0);
38 void EngineInfo::playAsBlack() {
39 playAs(1);
42 void EngineInfo::playAs(int player) {
43 if (m_token[player].valid()) {
44 m_ui.removeEntity(m_token[player]);
45 m_token[player] = EntityToken();
47 else {
48 m_token[player] = m_ui.addPlayingEngine(player, engine(player));
52 // void EngineInfo::analyze() {
53 // if (m_token.valid()) {
54 // m_ui.removeAnalysingEngine(m_token);
55 // m_token = EntityToken();
56 // }
57 // else
58 // m_token = m_ui.addAnalysingEngine(engine());
59 // }
61 EngineInfo::EngineInfo(const EngineDetails& details, UI& ui)
62 : QObject(&ui)
63 , m_details(details)
64 , m_ui(ui) { }
66 shared_ptr<Engine> EngineInfo::engine(int player) {
67 shared_ptr<Engine> res;
68 if (m_details.type == EngineDetails::XBoard)
69 res = shared_ptr<Engine>(new XBoardEngine(m_details.path, QStringList()));
70 else if (m_details.type == EngineDetails::GNUShogi)
71 res = shared_ptr<Engine>(new GNUShogiEngine(m_details.path, QStringList()));
72 else {
73 ERROR("Unimplemented engine type " << EngineDetails::typeName(m_details.type));
74 return shared_ptr<Engine>();
77 if (res) {
78 res->setWorkingPath(m_details.workPath);
79 res->setSide(player);
82 return res;