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(); }
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); }
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); }