diff options
author | Thomas Günther <tom@toms-cafe.de> | 2005-05-15 00:18:18 +0200 |
---|---|---|
committer | Thomas Günther <tom@toms-cafe.de> | 2005-05-15 00:18:18 +0200 |
commit | 1b80a09e835a6cd68d4160f9799a7268e54a5b53 (patch) | |
tree | fa5f92848ed602216ed76ed84980921c9af95a07 /history.c | |
download | vdr-plugin-spider-1b80a09e835a6cd68d4160f9799a7268e54a5b53.tar.gz vdr-plugin-spider-1b80a09e835a6cd68d4160f9799a7268e54a5b53.tar.bz2 |
Initial versionv0.1.0
Diffstat (limited to 'history.c')
-rw-r--r-- | history.c | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/history.c b/history.c new file mode 100644 index 0000000..88de34e --- /dev/null +++ b/history.c @@ -0,0 +1,149 @@ +/* + * Spider-Arachnid: A plugin for the Video Disk Recorder + * + * See the README file for copyright information and how to reach the author. + * + * $Id$ + */ + +#include "history.h" +#include "deck.h" +#include "heap.h" + + +/** --- class History ------------------------------------------------------ **/ + +/** Constructor */ +History::History() +{ + executed = 0; +} + +/** Destructor */ +History::~History() +{ + for (unsigned int pos = history.size(); pos > 0; --pos) + { + // Remove object created outside of History + delete history.back(); + history.pop_back(); + } +} + +/** Current move in the history */ +Move* History::current() +{ + return history[executed - 1]; +} + +/** Add a new move */ +void History::add(Move* move) +{ + for (unsigned int pos = history.size(); pos > executed; --pos) + { + // Remove object created outside of History + delete history.back(); + history.pop_back(); + } + history.push_back(move); + ++executed; +} + +/** Set previous move as current */ +void History::backward() +{ + if (movesExecuted()) + --executed; +} + +/** Set next move as current */ +void History::forward() +{ + if (movesToExecute()) + ++executed; +} + +/** Are there executed moves in the history */ +bool History::movesExecuted() +{ + return executed > 0; +} + +/** Are there moves to execute in the history */ +bool History::movesToExecute() +{ + return executed < history.size(); +} + + +/** --- class DealMove ----------------------------------------------------- **/ + +/** Constructor */ +DealMove::DealMove(Pack* s, Piles& d) : + source(s), destination(d) +{ +} + +/** Do the move */ +void DealMove::execute() +{ + source->deal(destination); +} + +/** Redo the move */ +void DealMove::takeBack() +{ + source->takeBackDeal(destination); +} + + +/** --- class NormalMove --------------------------------------------------- **/ + +/** Constructor */ +NormalMove::NormalMove(Pile* s, Pile* d, int c, bool t) : + source(s), destination(d), count(c), turn(t) +{ +} + +/** Do the move */ +void NormalMove::execute() +{ + source->moveTo(destination, count); + if (turn) + source->turn(); +} + +/** Redo the move */ +void NormalMove::takeBack() +{ + if (turn) + source->turn(); + destination->moveTo(source, count); +} + + +/** --- class FinalMove ---------------------------------------------------- **/ + +/** Constructor */ +FinalMove::FinalMove(Pile* s, FinalHeap* d, int c, bool t, bool b) : + source(s), destination(d), count(c), turn(t), bonus(b) +{ +} + +/** Do the move */ +void FinalMove::execute() +{ + source->moveTo(destination, count); + if (turn) + source->turn(); + destination->setBonus(bonus); +} + +/** Redo the move */ +void FinalMove::takeBack() +{ + destination->setBonus(false); + if (turn) + source->turn(); + destination->moveTo(source, count); +} |