static bool Contains31(List <TernaryTable.Tuple> tuples, uint field3, uint field1) { int low = 0; int high = tuples.Count - 1; while (low <= high) { int mid = (int)(((long)low + (long)high) / 2); TernaryTable.Tuple tuple = tuples[mid]; if (tuple.field3 > field3) { high = mid - 1; } else if (tuple.field3 < field3) { low = mid + 1; } else if (tuple.field1OrNext > field1) { high = mid - 1; } else if (tuple.field1OrNext < field1) { low = mid + 1; } else { return(true); } } return(false); }
public void Apply() { for (int i = 0; i < deleteList.Count; i++) { var tuple = deleteList[i]; if (table.Contains(tuple.field1OrNext, tuple.field2OrEmptyMarker, tuple.field3)) { table.Delete(tuple.field1OrNext, tuple.field2OrEmptyMarker, tuple.field3); } else { deleteList[i] = new TernaryTable.Tuple(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF); } } var it = insertList.GetEnumerator(); while (it.MoveNext()) { var curr = it.Current; if (!table.Contains(curr.field1OrNext, curr.field2OrEmptyMarker, curr.field3)) { table.Insert(curr.field1OrNext, curr.field2OrEmptyMarker, curr.field3); table.store1.AddRef(curr.field1OrNext); table.store2.AddRef(curr.field2OrEmptyMarker); table.store3.AddRef(curr.field3); } } }
public bool CheckUpdates_12_23_31() { if (!CheckUpdates_12_23()) { return(false); } deleteList.Sort(compare312); insertList.Sort(compare312); int count = insertList.Count; if (count == 0) { return(true); } TernaryTable.Tuple prev = insertList[0]; if (!Contains31(deleteList, prev.field3, prev.field1OrNext)) { if (table.Contains13(prev.field1OrNext, prev.field3)) { return(false); } } for (int i = 1; i < count; i++) { TernaryTable.Tuple curr = insertList[i]; if (curr.field3 == prev.field3 & curr.field1OrNext == prev.field1OrNext & curr.field2OrEmptyMarker != prev.field2OrEmptyMarker ) { return(false); } if (!Contains31(deleteList, curr.field3, curr.field1OrNext)) { if (table.Contains13(curr.field1OrNext, curr.field3)) { return(false); } } prev = curr; } return(true); }
public bool CheckUpdates_12() { deleteList.Sort(compare123); insertList.Sort(compare123); int count = insertList.Count; if (count == 0) { return(true); } TernaryTable.Tuple prev = insertList[0]; if (!Contains12(deleteList, prev.field1OrNext, prev.field2OrEmptyMarker)) { if (table.Contains12(prev.field1OrNext, prev.field2OrEmptyMarker)) { return(false); } } for (int i = 1; i < count; i++) { TernaryTable.Tuple curr = insertList[i]; if (curr.field1OrNext == prev.field1OrNext & curr.field2OrEmptyMarker == prev.field2OrEmptyMarker & curr.field3 != prev.field3 ) { return(false); } if (!Contains12(deleteList, curr.field1OrNext, curr.field2OrEmptyMarker)) { if (table.Contains12(curr.field1OrNext, curr.field2OrEmptyMarker)) { return(false); } } prev = curr; } return(true); }