Esempio n. 1
0
        public void Remove(PQHandle handle)
        {
            Debug.Assert(_initialized);

            int hCurr = handle._handle;

            Debug.Assert(hCurr >= 1 && hCurr <= _max && _handles[hCurr]._key != null);

            int curr = _handles[hCurr]._node;

            _nodes[curr] = _nodes[_size];
            _handles[_nodes[curr]]._node = curr;

            if (curr <= --_size)
            {
                if (curr <= 1 || _leq(_handles[_nodes[curr >> 1]]._key, _handles[_nodes[curr]]._key))
                {
                    FloatDown(curr);
                }
                else
                {
                    FloatUp(curr);
                }
            }

            _handles[hCurr]._key  = null;
            _handles[hCurr]._node = _freeList;
            _freeList             = hCurr;
        }
Esempio n. 2
0
 public void Reset(IPool pool)
 {
     _prev     = _next = null;
     _anEdge   = null;
     _coords   = Vec3.Zero;
     _s        = new DeterministicFloat(0);
     _t        = new DeterministicFloat(0);
     _pqHandle = new PQHandle();
     _n        = 0;
     _data     = null;
 }
Esempio n. 3
0
 public override void Reset()
 {
     _prev     = (_next = null);
     _anEdge   = null;
     _coords   = Vec3.Zero;
     _s        = 0f;
     _t        = 0f;
     _pqHandle = default(PQHandle);
     _n        = 0;
     _data     = null;
 }
Esempio n. 4
0
        public void Remove(PQHandle handle)
        {
            int handle2 = handle._handle;

            if (handle2 >= 0)
            {
                _heap.Remove(handle);
            }
            else
            {
                handle2        = -(handle2 + 1);
                _keys[handle2] = null;
                while (_size > 0 && _keys[_order[_size - 1]] == null)
                {
                    _size--;
                }
            }
        }
Esempio n. 5
0
        public PQHandle Insert(TValue value)
        {
            int num = ++_size;

            if (num * 2 > _max)
            {
                _max <<= 1;
                Array.Resize(ref _nodes, _max + 1);
                Array.Resize(ref _handles, _max + 1);
            }
            int num2;

            if (_freeList == 0)
            {
                num2 = num;
            }
            else
            {
                num2      = _freeList;
                _freeList = _handles[num2]._node;
            }
            _nodes[num] = num2;
            if (_handles[num2] == null)
            {
                _handles[num2] = new HandleElem
                {
                    _key  = value,
                    _node = num
                };
            }
            else
            {
                _handles[num2]._node = num;
                _handles[num2]._key  = value;
            }
            if (_initialized)
            {
                FloatUp(num);
            }
            PQHandle result = default(PQHandle);

            result._handle = num2;
            return(result);
        }
Esempio n. 6
0
        public PQHandle Insert(TValue value)
        {
            if (_initialized)
            {
                return(_heap.Insert(value));
            }
            int size = _size;

            if (++_size >= _max)
            {
                _max <<= 1;
                Array.Resize(ref _keys, _max);
            }
            _keys[size] = value;
            PQHandle result = default(PQHandle);

            result._handle = -(size + 1);
            return(result);
        }
Esempio n. 7
0
        public void Remove(PQHandle handle)
        {
            Debug.Assert(_initialized);

            int curr = handle._handle;

            if (curr >= 0)
            {
                _heap.Remove(handle);
                return;
            }
            curr = -(curr + 1);
            Debug.Assert(curr < _max && _keys[curr] != null);

            _keys[curr] = null;
            while (_size > 0 && _keys[_order[_size - 1]] == null)
            {
                --_size;
            }
        }
Esempio n. 8
0
        public void Remove(PQHandle handle)
        {
            int handle2 = handle._handle;
            int node    = _handles[handle2]._node;

            _nodes[node] = _nodes[_size];
            _handles[_nodes[node]]._node = node;
            if (node <= --_size)
            {
                if (node <= 1 || _leq(_handles[_nodes[node >> 1]]._key, _handles[_nodes[node]]._key))
                {
                    FloatDown(node);
                }
                else
                {
                    FloatUp(node);
                }
            }
            _handles[handle2]._key  = null;
            _handles[handle2]._node = _freeList;
            _freeList = handle2;
        }
        public void Remove(PQHandle handle)
        {
            Debug.Assert(_initialized);

            int hCurr = handle._handle;
            Debug.Assert(hCurr >= 1 && hCurr <= _max && _handles[hCurr]._key != null);

            int curr = _handles[hCurr]._node;
            _nodes[curr] = _nodes[_size];
            _handles[_nodes[curr]]._node = curr;

            if (curr <= --_size)
            {
                if (curr <= 1 || Geom.VertLeq(_handles[_nodes[curr >> 1]]._key, _handles[_nodes[curr]]._key))
                {
                    FloatDown(curr);
                }
                else
                {
                    FloatUp(curr);
                }
            }

            _handles[hCurr]._key = null;
            _handles[hCurr]._node = _freeList;
            _freeList = hCurr;
        }