Exemplo n.º 1
0
            public virtual void Intersection(FastSparseSetFactory <E> .FastSparseSet <E> set)
            {
                int[] extdata   = set.GetData();
                int[] intdata   = data;
                int   minlength = System.Math.Min(extdata.Length, intdata.Length);

                for (int i = minlength - 1; i >= 0; i--)
                {
                    intdata[i] &= extdata[i];
                }
                for (int i = intdata.Length - 1; i >= minlength; i--)
                {
                    intdata[i] = 0;
                }
                SetNext();
            }
Exemplo n.º 2
0
            public virtual void Complement(FastSparseSetFactory <E> .FastSparseSet <E> set)
            {
                int[] extdata   = set.GetData();
                int[] intdata   = data;
                int   extlength = extdata.Length;
                int   pointer   = 0;

                do
                {
                    if (pointer >= extlength)
                    {
                        break;
                    }
                    intdata[pointer] &= ~extdata[pointer];
                    if (intdata[pointer] == 0)
                    {
                        ChangeNext(next, pointer, pointer, next[pointer]);
                    }
                    pointer = next[pointer];
                }while (pointer != 0);
            }
Exemplo n.º 3
0
            public virtual void Union(FastSparseSetFactory <E> .FastSparseSet <E> set)
            {
                int[] extdata   = set.GetData();
                int[] extnext   = set.GetNext();
                int[] intdata   = data;
                int   intlength = intdata.Length;
                int   pointer   = 0;

                do
                {
                    if (pointer >= intlength)
                    {
                        intdata = EnsureCapacity(extdata.Length - 1);
                    }
                    bool nextrec = (intdata[pointer] == 0);
                    intdata[pointer] |= extdata[pointer];
                    if (nextrec)
                    {
                        ChangeNext(next, pointer, next[pointer], pointer);
                    }
                    pointer = extnext[pointer];
                }while (pointer != 0);
            }