public void And(IntArrayFingerprint fingerprint) { List <int> tmp = new List <int>(); int i = 0; int j = 0; while (i < trueBits.Length && j < fingerprint.trueBits.Length) { int local = trueBits[i]; int remote = fingerprint.trueBits[j]; if (local == remote) { tmp.Add(local); i++; j++; } else if (local < remote) { i++; } else { j++; } } trueBits = new int[tmp.Count]; i = 0; foreach (var t in tmp) { trueBits[i] = t; } Array.Sort(trueBits); }
public void Or(IntArrayFingerprint fingerprint) { var tmp = new HashSet <int>(); { foreach (var trueBit in trueBits) { tmp.Add(trueBit); } } { for (int i = 0; i < fingerprint.trueBits.Length; i++) { tmp.Add(fingerprint.trueBits[i]); } } trueBits = new int[tmp.Count]; { int i = 0; foreach (var t in tmp) { trueBits[i++] = t; } } Array.Sort(trueBits); }
public void TestSetBit() { var fp = new IntArrayFingerprint(); fp[1] = true; fp[55] = true; fp[219] = true; fp[3] = true; fp[24] = true; Assert.IsTrue(Compares.AreOrderLessDeepEqual(new int[] { 1, 3, 24, 55, 219 }, fp.GetSetBits())); fp[24] = false; Assert.IsTrue(Compares.AreOrderLessDeepEqual(new int[] { 1, 3, 55, 219 }, fp.GetSetBits())); fp[26] = false; Assert.IsTrue(Compares.AreOrderLessDeepEqual(new int[] { 1, 3, 26, 55, 219 }, fp.GetSetBits())); }
public override bool Equals(object obj) { if (this == obj) { return(true); } if (obj == null) { return(false); } if (GetType() != obj.GetType()) { return(false); } IntArrayFingerprint other = (IntArrayFingerprint)obj; if (!Compares.AreEqual(trueBits, other.trueBits)) { return(false); } return(true); }