public void TestCardinality1() { BitSet set = new BitSet(); Assert.AreEqual(0, set.Cardinality()); for (int i = 0; i < 128; i++) { set.Set(i); Assert.AreEqual(i + 1, set.Cardinality()); Assert.AreEqual(0, set.NextSetBit(0)); if (i > 0) Assert.AreEqual(i * 1 - 1, set.NextSetBit(i * 1 - 1)); } }
public BitSet GetDescendants(int rule) { BitSet descendants = new BitSet(); descendants.Or(children[rule]); while (true) { int cardinality = descendants.Cardinality(); for (int i = descendants.NextSetBit(0); i >= 0; i = descendants.NextSetBit(i + 1)) { descendants.Or(children[i]); } if (descendants.Cardinality() == cardinality) { // nothing changed break; } } return descendants; }
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; }