15 #include "../../debug.h" 
   16 #include "../../settings_type.h" 
   18 extern int _total_pf_time_us;
 
   50 template <
class Types>
 
   53   typedef typename Types::Tpf 
Tpf;           
 
   54   typedef typename Types::TrackFollower TrackFollower;
 
   57   typedef typename NodeList::Titem 
Node;     
 
   58   typedef typename Node::Key 
Key;            
 
  102     return *
static_cast<Tpf *
>(
this);
 
  125 #ifndef NO_DEBUG_MESSAGES 
  130     Yapf().PfSetStartupNodes();
 
  131     bool bDestFound = 
true;
 
  145       Yapf().PfFollowNode(*n);
 
  147         m_nodes.PopOpenNode(n->GetKey());
 
  157 #ifndef NO_DEBUG_MESSAGES 
  159     if (_debug_yapf_level >= 2) {
 
  160       int t = perf.Get(1000000);
 
  161       _total_pf_time_us += t;
 
  163       if (_debug_yapf_level >= 3) {
 
  165         char ttc = 
Yapf().TransportTypeChar();
 
  170         DEBUG(yapf, 3, 
"[YAPF%c]%c%4d- %d us - %d rounds - %d open - %d closed - CHR %4.1f%% - C %d D %d - c%d(sc%d, ts%d, o%d) -- ",
 
  203     Yapf().PfNodeCacheFetch(n);
 
  205     if (
m_nodes.FindOpenNode(n.m_key) == NULL) {
 
  221       n.Set(parent, tf.m_new_tile, td, is_choice);
 
  222       Yapf().AddNewNode(n, tf);
 
  237       Yapf().m_pBestIntermediateNode = 
Yapf().m_pBestIntermediateNode->m_parent;
 
  248     bool bCached = 
Yapf().PfNodeCacheFetch(n);
 
  255     bool bValid = 
Yapf().PfCalcCost(n, &tf);
 
  258       Yapf().PfNodeCacheFlush(n);
 
  261     if (bValid) bValid = 
Yapf().PfCalcEstimate(n);
 
  267     bool bDestination = 
Yapf().PfDetectDestination(n);
 
  282     if (openNode != NULL) {
 
  285       if (n.GetCostEstimate() < openNode->GetCostEstimate()) {
 
  287         m_nodes.PopOpenNode(n.GetKey());
 
  290         m_nodes.InsertOpenNode(*openNode);
 
  296     Node *closedNode = 
m_nodes.FindClosedNode(n.GetKey());
 
  297     if (closedNode != NULL) {
 
  300       int node_est = n.GetCostEstimate();
 
  301       int closed_est = closedNode->GetCostEstimate();
 
  302       if (node_est < closed_est) {
 
  333   inline void PfSetStartupNodes()
 
  336     Node &n1 = *base::m_nodes.CreateNewNode();
 
  340     base::m_nodes.InsertOpenNode(n1);
 
  344   inline void PfFollowNode(
Node &org)
 
  346     for (each follower of node org) {
 
  347       Node &n = *base::m_nodes.CreateNewNode();
 
  357   inline bool PfCalcCost(
Node &n)
 
  362     n.m_cost = n.m_parent->m_cost + cost;
 
  367   inline bool PfCalcEstimate(
Node &n)
 
  372     n.m_estimate = n.m_cost + distance;
 
  377   inline bool PfDetectDestination(
Node &n)
 
  379     bool bDest = (n.m_key.m_x == m_x2) && (n.m_key.m_y == m_y2);