summaryrefslogtreecommitdiff
path: root/history.h
diff options
context:
space:
mode:
Diffstat (limited to 'history.h')
-rw-r--r--history.h138
1 files changed, 138 insertions, 0 deletions
diff --git a/history.h b/history.h
new file mode 100644
index 0000000..281fa0f
--- /dev/null
+++ b/history.h
@@ -0,0 +1,138 @@
+/*
+ * Spider-Arachnid: A plugin for the Video Disk Recorder
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ * $Id$
+ */
+
+#ifndef VDR_SPIDER_HISTORY_H
+#define VDR_SPIDER_HISTORY_H
+
+#include "spider.h"
+class Pack;
+class Pile;
+typedef Array<Pile*> Piles;
+class FinalHeap;
+class Move;
+typedef Vector<Move*> Moves;
+
+
+/** --- class History ------------------------------------------------------ **/
+
+class History
+{
+private:
+ Moves history;
+ unsigned int executed;
+
+public:
+
+ /** Constructor */
+ History();
+
+ /** Destructor */
+ ~History();
+
+ /** Current move in the history */
+ Move* current();
+
+ /** Add a new move */
+ void add(Move* move);
+
+ /** Set previous move as current */
+ void backward();
+
+ /** Set next move as current */
+ void forward();
+
+ /** Are there executed moves in the history */
+ bool movesExecuted();
+
+ /** Are there moves to execute in the history */
+ bool movesToExecute();
+};
+
+
+/** --- base class Move ---------------------------------------------------- **/
+
+class Move
+{
+public:
+
+ /** Do the move */
+ virtual void execute() = 0;
+
+ /** Redo the move */
+ virtual void takeBack() = 0;
+};
+
+
+/** --- class DealMove ----------------------------------------------------- **/
+
+class DealMove : public Move
+{
+private:
+ Pack* source;
+ Piles& destination;
+
+public:
+
+ /** Constructor */
+ DealMove(Pack* s, Piles& d);
+
+ /** Do the move */
+ void execute();
+
+ /** Redo the move */
+ void takeBack();
+};
+
+
+/** --- class NormalMove --------------------------------------------------- **/
+
+class NormalMove : public Move
+{
+private:
+ Pile* source;
+ Pile* destination;
+ int count;
+ bool turn;
+
+public:
+
+ /** Constructor */
+ NormalMove(Pile* s, Pile* d, int c, bool t);
+
+ /** Do the move */
+ void execute();
+
+ /** Redo the move */
+ void takeBack();
+};
+
+
+/** --- class FinalMove ---------------------------------------------------- **/
+
+class FinalMove : public Move
+{
+private:
+ Pile* source;
+ FinalHeap* destination;
+ int count;
+ bool turn;
+ bool bonus;
+
+public:
+
+ /** Constructor */
+ FinalMove(Pile* s, FinalHeap* d, int c, bool t, bool b);
+
+ /** Do the move */
+ void execute();
+
+ /** Redo the move */
+ void takeBack();
+};
+
+#endif // VDR_SPIDER_HISTORY_H