public Node FindNode(int id, int state) { int bucket = Detour.HashRef(id) & (HashSize - 1); int i = First[bucket]; while (i != Detour.DT_NULL_IDX) { if (Nodes[i].Id == id && Nodes[i].State == state) { return(Nodes[i]); } i = Next[i]; } return(null); }
public Node GetNode(int id, int state) { int bucket = Detour.HashRef(id) & (HashSize - 1); int i = First[bucket]; while (i != Detour.DT_NULL_IDX) { if (Nodes[i] != null && Nodes[i].Id == id && Nodes[i].State == state) { return(Nodes[i]); } i = Next[i]; } if (NodeCount >= MaxNodes) { return(null); } i = NodeCount; NodeCount++; // Init node Nodes[i] = new Node { PIdx = 0, Cost = 0, Total = 0, Id = id, State = state, Flags = 0 }; Next[i] = First[bucket]; First[bucket] = i; return(Nodes[i]); }
public int FindNodes(int id, out Node[] nodes, int maxNodes) { nodes = new Node[maxNodes]; int n = 0; int bucket = Detour.HashRef(id) & (HashSize - 1); int i = First[bucket]; while (i != Detour.DT_NULL_IDX) { if (Nodes[i].Id == id) { if (n >= maxNodes) { return(n); } nodes[n++] = Nodes[i]; } i = Next[i]; } return(n); }