diff --git a/src/libUnuk/Engine/Pathfinding.cpp b/src/libUnuk/Engine/Pathfinding.cpp index b2ae6c4..d956eb5 100644 --- a/src/libUnuk/Engine/Pathfinding.cpp +++ b/src/libUnuk/Engine/Pathfinding.cpp @@ -1 +1,28 @@ #include "Pathfinding.h" + +template<class UserState> +AStarSearch<UserState>::AStarSearch(void) : + _state(SEARCH_STATE_NOT_INITIALISED), + _currentSolutionNode(NULL), + _allocateNodeCount(0), + _cancelRequest(false) {} + +template<class UserState> +AStarSearch<UserState>::~AStarSearch(void) { + +} + +template<class UserState> +void AStarSearch<UserState>::SetStartAndGoalStates(UserState& start, UserState& goal) { + +} + +template<class UserState> +unsigned int AStarSearch<UserState>::SearchStep(void) { + +} + +template<class UserState> +bool AStarSearch<UserState>::AddSuccessor(UserState& state) { + +} diff --git a/src/libUnuk/Engine/Pathfinding.h b/src/libUnuk/Engine/Pathfinding.h index 3e2d616..4c6a78c 100644 --- a/src/libUnuk/Engine/Pathfinding.h +++ b/src/libUnuk/Engine/Pathfinding.h @@ -25,6 +25,7 @@ public: }; // A node representing a possible state in the search. +public: class Node { public: // Keep a record of successor nodes. @@ -51,6 +52,7 @@ public: public: AStarSearch(void); + ~AStarSearch(void); int GetState(void) { return _state; } @@ -103,7 +105,41 @@ public: int GetStepCount(void) {return _steps; } private: - int _state; + // Called when a search fails or is cancelled to free up all unused memory. + void FreeAllNodes(void); + + /* + * Called when the search ends. A lot of nodes may + * be created that are still present when the search + * ends. They will be deleted with this method. + */ + void FreeUnusedNodes(void); + + // Data. +private: + // Heap. + vector<Node*> _openList; + vector<Node*> _closedList; + vector<Node*> _successors; + + // State. + unsigned int _state; + + // Count steps. + int _steps; + + // Start/Goal state pointers. + Node* _start; + Node* _goal; + + Node* _currentSolutionNode; + + // Debug + typename vector<Node*>::iterator iterDbgOpen; + typename vector<Node*>::iterator iterDbgClosed; + + // Count memory allocations and free. + int _allocateNodeCount; + bool _cancelRequest; - int _steps; };