2013-07-28 19:45:08 -04:00
|
|
|
#include <iostream>
|
|
|
|
|
#include <vector>
|
2013-07-31 23:51:05 -04:00
|
|
|
#include <queue>
|
2013-08-08 03:06:28 -04:00
|
|
|
#include <map>
|
2013-07-31 23:51:05 -04:00
|
|
|
#include "NodeTree.h"
|
2013-08-08 03:06:28 -04:00
|
|
|
#include "Symbol.h"
|
2013-07-31 23:51:05 -04:00
|
|
|
#include "util.h"
|
2013-07-28 19:45:08 -04:00
|
|
|
|
|
|
|
|
#ifndef GRAPH_STRUCTURED_STACK
|
|
|
|
|
#define GRAPH_STRUCTURED_STACK
|
|
|
|
|
|
|
|
|
|
class GraphStructuredStack {
|
|
|
|
|
public:
|
|
|
|
|
GraphStructuredStack();
|
|
|
|
|
~GraphStructuredStack();
|
2013-07-28 23:48:10 -04:00
|
|
|
NodeTree<int>* newNode(int stateNum);
|
|
|
|
|
void addToFrontier(int frontier, NodeTree<int>* node);
|
|
|
|
|
NodeTree<int>* inFrontier(int frontier, int state);
|
2013-08-08 02:44:17 -04:00
|
|
|
int getContainingFrontier(NodeTree<int>* node);
|
2013-07-28 19:45:08 -04:00
|
|
|
bool frontierIsEmpty(int frontier);
|
2013-08-08 02:44:17 -04:00
|
|
|
NodeTree<int>* frontierGetAccState(int frontier);
|
2013-07-28 23:48:10 -04:00
|
|
|
std::vector<NodeTree<int>*>* getReachable(NodeTree<int>* start, int lenght);
|
2013-08-08 02:44:17 -04:00
|
|
|
std::vector<std::vector<NodeTree<int>*> >* getReachablePaths(NodeTree<int>* start, int lenght);
|
|
|
|
|
void recursivePathFind(NodeTree<int>* start, int length, std::vector<NodeTree<int>*> currentPath, std::vector<std::vector<NodeTree<int>*> >* paths);
|
2013-07-28 23:48:10 -04:00
|
|
|
bool hasEdge(NodeTree<int>* start, NodeTree<int>* end);
|
2013-10-02 03:15:20 -04:00
|
|
|
NodeTree<Symbol>* getEdge(NodeTree<int>* start, NodeTree<int>* end);
|
|
|
|
|
void addEdge(NodeTree<int>* start, NodeTree<int>* end, NodeTree<Symbol>* edge);
|
2013-12-31 23:43:49 -06:00
|
|
|
void clear();
|
2013-07-31 23:51:05 -04:00
|
|
|
|
2014-06-30 01:57:50 -07:00
|
|
|
std::vector<int> getFrontier(int frontier);
|
2013-07-31 23:51:05 -04:00
|
|
|
std::string toString();
|
2013-07-28 19:45:08 -04:00
|
|
|
private:
|
2013-07-28 23:48:10 -04:00
|
|
|
std::vector<std::vector<NodeTree<int>*>*> gss;
|
2013-10-02 03:15:20 -04:00
|
|
|
std::map< std::pair< NodeTree<int>*, NodeTree<int>* >, NodeTree<Symbol>* > edges;
|
2016-01-29 14:09:09 -05:00
|
|
|
std::map< NodeTree<int>*, int > containing_frontier_map;
|
2013-07-28 19:45:08 -04:00
|
|
|
};
|
2013-07-31 23:51:05 -04:00
|
|
|
|
|
|
|
|
#endif
|