nodecursor.hh
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef GECODE_GIST_NODECURSOR_HH
00039 #define GECODE_GIST_NODECURSOR_HH
00040
00041 #include <gecode/gist/visualnode.hh>
00042
00043 namespace Gecode { namespace Gist {
00044
00046 template<class Node>
00047 class NodeCursor {
00048 private:
00050 Node* _startNode;
00052 Node* _node;
00054 unsigned int _alternative;
00055 protected:
00057 const typename Node::NodeAllocator& na;
00059 void node(Node* n);
00061 Node* startNode(void);
00062 public:
00064 NodeCursor(Node* theNode, const typename Node::NodeAllocator& na);
00066 Node* node(void);
00068 unsigned int alternative(void);
00070 void alternative(unsigned int a);
00071
00073
00074
00075 bool mayMoveUpwards(void);
00077 void moveUpwards(void);
00079 bool mayMoveDownwards(void);
00081 void moveDownwards(void);
00083 bool mayMoveSidewards(void);
00085 void moveSidewards(void);
00087 };
00088
00090 class HideFailedCursor : public NodeCursor<VisualNode> {
00091 private:
00092 bool onlyDirty;
00093 public:
00095 HideFailedCursor(VisualNode* theNode,
00096 const VisualNode::NodeAllocator& na,
00097 bool onlyDirtyNodes);
00099
00100
00101 bool mayMoveDownwards(void);
00103 void processCurrentNode(void);
00105 };
00106
00108 class UnhideAllCursor : public NodeCursor<VisualNode> {
00109 public:
00111 UnhideAllCursor(VisualNode* theNode,
00112 const VisualNode::NodeAllocator& na);
00114
00115
00116 void processCurrentNode(void);
00118 };
00119
00121 class UnstopAllCursor : public NodeCursor<VisualNode> {
00122 public:
00124 UnstopAllCursor(VisualNode* theNode,
00125 const VisualNode::NodeAllocator& na);
00127
00128
00129 void processCurrentNode(void);
00131 };
00132
00134 class NextSolCursor : public NodeCursor<VisualNode> {
00135 private:
00137 bool back;
00139 bool notOnSol(void);
00140 public:
00142 NextSolCursor(VisualNode* theNode, bool backwards,
00143 const VisualNode::NodeAllocator& na);
00145
00146
00147 void processCurrentNode(void);
00149 bool mayMoveUpwards(void);
00151 bool mayMoveDownwards(void);
00153 void moveDownwards(void);
00155 bool mayMoveSidewards(void);
00157 void moveSidewards(void);
00159 };
00160
00162 class StatCursor : public NodeCursor<VisualNode> {
00163 private:
00165 int curDepth;
00166 public:
00168 int depth;
00170 int failed;
00172 int solved;
00174 int choice;
00176 int open;
00177
00179 StatCursor(VisualNode* theNode,
00180 const VisualNode::NodeAllocator& na);
00181
00183
00184
00185 void processCurrentNode(void);
00187 void moveDownwards(void);
00189 void moveUpwards(void);
00191
00192 };
00193
00195 class BranchLabelCursor : public NodeCursor<VisualNode> {
00196 private:
00198 VisualNode::NodeAllocator& _na;
00200 BestNode* _curBest;
00202 int _c_d;
00204 int _a_d;
00206 bool _clear;
00207 public:
00209 BranchLabelCursor(VisualNode* theNode, BestNode* curBest,
00210 int c_d, int a_d, bool clear,
00211 VisualNode::NodeAllocator& na);
00213
00214 void processCurrentNode(void);
00216 };
00217
00219 class DisposeCursor : public NodeCursor<VisualNode> {
00220 public:
00222 DisposeCursor(VisualNode* theNode,
00223 const VisualNode::NodeAllocator& na);
00224
00226
00227
00228 void processCurrentNode(void);
00230
00231 };
00232
00233 }}
00234
00235 #include <gecode/gist/nodecursor.hpp>
00236
00237 #endif
00238
00239