#include #include #include #include #include "NodeTree.h" #include "Symbol.h" #include "util.h" #ifndef GRAPH_STRUCTURED_STACK #define GRAPH_STRUCTURED_STACK class GraphStructuredStack { public: GraphStructuredStack(); ~GraphStructuredStack(); NodeTree* newNode(int stateNum); void addToFrontier(int frontier, NodeTree* node); NodeTree* inFrontier(int frontier, int state); int getContainingFrontier(NodeTree* node); bool frontierIsEmpty(int frontier); NodeTree* frontierGetAccState(int frontier); std::vector*>* getReachable(NodeTree* start, int lenght); std::vector*> >* getReachablePaths(NodeTree* start, int lenght); void recursivePathFind(NodeTree* start, int length, std::vector*> currentPath, std::vector*> >* paths); bool hasEdge(NodeTree* start, NodeTree* end); NodeTree* getEdge(NodeTree* start, NodeTree* end); void addEdge(NodeTree* start, NodeTree* end, NodeTree* edge); void clear(); std::vector getFrontier(int frontier); std::string toString(); private: std::vector*>*> gss; std::map< std::pair< NodeTree*, NodeTree* >, NodeTree* > edges; }; #endif