public void Or(BitSet set) { if (set == null) throw new ArgumentNullException("set"); if (set._data.Length > _data.Length) Array.Resize(ref _data, set._data.Length); for (int i = 0; i < set._data.Length; i++) _data[i] |= set._data[i]; }
public BitSet GetAncestors(int rule) { BitSet ancestors = new BitSet(); ancestors.Or(parents[rule]); while (true) { int cardinality = ancestors.Cardinality(); for (int i = ancestors.NextSetBit(0); i >= 0; i = ancestors.NextSetBit(i + 1)) { ancestors.Or(parents[i]); } if (ancestors.Cardinality() == cardinality) { // nothing changed break; } } return ancestors; }