Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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]);
        }
Exemplo n.º 3
0
        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);
        }