public DroppedDomain <T> Lub(DroppedDomain <T> other) { if (IsTop || other.IsTop) { return(Top); } var value = Value.Lub(other.Value); return(value == null ? null : new DroppedDomain <T>(value)); }
public bool Lte(DroppedDomain <T> other) { if (other.IsTop) { return(true); } if (IsTop) { return(false); } return(Value.Lte(other.Value)); }
public DroppedDomain <T> Lub(DroppedDomain <T> other, BoolRef changed) { if (IsTop) { return(Top); } else if (other.IsTop) { changed.Set(); return(Top); } else { var value = Value.Lub(other.Value, changed); return(value == null ? null : new DroppedDomain <T>(value)); } }
public bool CommutableWith(DroppedDomain <T> other) { if (IsTop && other.IsTop) { return(false); } else if (IsTop) { return(other.IsBottom); } else if (other.IsTop) { return(IsBottom); } else { return(Value.CommutableWith(other.Value)); } }
static DroppedDomain() { Top = new DroppedDomain <T>(null); }