31 #define USE_FSA_MEMORY 1 38 template <
class UserState>
67 Node() : parent( 0 ), child( 0 ), g( 0.0f ), h( 0.0f ), f( 0.0f ) {}
134 NodeVectorIterator openlist_result, openlist_end;
136 openlist_result != openlist_end; ++openlist_result )
138 if ( ( *openlist_result )->m_UserState.IsSameState( theState ) )
151 NodeVectorIterator closedlist_result, closedlist_end;
153 closedlist_result != closedlist_end; ++closedlist_result )
155 if ( ( *closedlist_result )->m_UserState.IsSameState( theState ) )
165 NodeVectorIterator solution_result, solution_end;
167 solution_result != solution_end; ++solution_result )
169 if ( ( *solution_result ) == theNode )
235 nodeParent->
child = nodeChild;
237 nodeChild = nodeParent;
238 nodeParent = nodeParent->
parent;
239 }
while ( nodeChild !=
m_Start );
266 for ( NodeVectorIterator successor =
m_Successors.begin(),
268 successor != successor_end; ++successor )
284 successor != successor_end; ++successor )
287 float newg = n->
g + n->
m_UserState.GetCost( ( *successor )->m_UserState );
295 NodeVectorIterator openlist_result, openlist_end;
298 openlist_result != openlist_end; ++openlist_result )
300 if ( ( *openlist_result )->m_UserState.IsSameState( ( *successor )->m_UserState ) )
306 if ( openlist_result != openlist_end )
310 if ( ( *openlist_result )->g <= newg )
319 NodeVectorIterator closedlist_result, closedlist_end;
322 closedlist_result != closedlist_end; ++closedlist_result )
324 if ( ( *closedlist_result )->m_UserState.IsSameState( ( *successor )->m_UserState ) )
330 if ( closedlist_result != closedlist_end )
334 if ( ( *closedlist_result )->g <= newg )
345 ( *successor )->parent = n;
346 ( *successor )->
g = newg;
347 ( *successor )->h = ( *successor )->m_UserState.GoalDistanceEstimate(
m_Goal->
m_UserState );
348 ( *successor )->f = ( *successor )->g + ( *successor )->h;
352 if ( closedlist_result != closedlist_end )
360 if ( openlist_result != openlist_end )
513 f = ( *iterDbgOpen )->f;
514 g = ( *iterDbgOpen )->g;
515 h = ( *iterDbgOpen )->h;
516 return &( *iterDbgOpen )->m_UserState;
533 f = ( *iterDbgOpen )->f;
534 g = ( *iterDbgOpen )->g;
535 h = ( *iterDbgOpen )->h;
536 return &( *iterDbgOpen )->m_UserState;
552 f = ( *iterDbgClosed )->f;
553 g = ( *iterDbgClosed )->g;
554 h = ( *iterDbgClosed )->h;
556 return &( *iterDbgClosed )->m_UserState;
573 f = ( *iterDbgClosed )->f;
574 g = ( *iterDbgClosed )->g;
575 h = ( *iterDbgClosed )->h;
577 return &( *iterDbgClosed )->m_UserState;
594 while ( iterOpen != endOpen )
596 Node* n = ( *iterOpen );
605 NodeVectorIterator iterClosed, endClosed;
608 iterClosed != endClosed; ++iterClosed )
610 Node* n = ( *iterClosed );
628 while ( iterOpen != endOpen )
630 Node* n = ( *iterOpen );
641 NodeVectorIterator iterClosed, endClosed;
644 iterClosed != endClosed; ++iterClosed )
646 Node* n = ( *iterClosed );
729 #endif // defined STLASTAR_H void FreeNode(Node *node)
UserState * GetSolutionPrev()
AStarSearch(int MaxNodes=1000)
void SetStartAndGoalStates(UserState &Start, UserState &Goal)
Pol::Plib::FixedSizeAllocator< Node > m_FixedSizeAllocator
std::vector< Node * > NodeVector
UserState * GetSolutionNext()
bool AddSuccessor(UserState &State)
bool InOpenList(UserState &theState)
NodeVector m_SolutionList
UserState * GetOpenListStart(float &f, float &g, float &h)
unsigned int SearchStep(bool doors_block)
NodeVector::iterator NodeVectorIterator
UserState * GetClosedListStart()
Node * m_CurrentSolutionNode
UserState * GetOpenListStart()
UserState * GetClosedListNext()
UserState * GetClosedListNext(float &f, float &g, float &h)
UserState * GetClosedListStart(float &f, float &g, float &h)
UserState * GetOpenListNext(float &f, float &g, float &h)
NodeVectorIterator iterDbgClosed
bool AddToSolutionList(Node *theNode)
bool operator()(const Node *x, const Node *y) const
UserState * GetOpenListNext()
NodeVectorIterator iterDbgOpen
bool InClosedList(UserState &theState)
UserState * GetSolutionStart()
UserState * GetSolutionEnd()