/// <summary> /// Merge two groups of guarded lists together. /// </summary> /// <param name="guard">The guard.</param> /// <param name="lists1">The first lists.</param> /// <param name="lists2">The second lists.</param> /// <returns>A new guarded group of lists.</returns> private GuardedListGroup <TModel, TVar, TBool, TBitvec, TInt, TString> Merge( TBool guard, GuardedListGroup <TModel, TVar, TBool, TBitvec, TInt, TString> lists1, GuardedListGroup <TModel, TVar, TBool, TBitvec, TInt, TString> lists2) { var result = CommonUtilities.Merge(lists1.Mapping, lists2.Mapping, (len, list1, list2) => { if (list1.HasValue && !list2.HasValue) { var newList = MapGuard(guard, list1.Value); return(Option.Some(newList)); } if (!list1.HasValue && list2.HasValue) { var newList = MapGuard(this.Solver.Not(guard), list2.Value); return(Option.Some(newList)); } var merged = Merge(guard, list1.Value, list2.Value); /* if (merged.Guard.Equals(this.Solver.False())) * { * return Option.None<GuardedList<TModel, TVar, TBool, TInt, TString>>(); * } */ return(Option.Some(merged)); }); return(new GuardedListGroup <TModel, TVar, TBool, TBitvec, TInt, TString>(result)); }
public SymbolicList(ISolver <TModel, TVar, TBool, TBitvec, TInt, TString> solver, GuardedListGroup <TModel, TVar, TBool, TBitvec, TInt, TString> value) : base(solver) { this.GuardedListGroup = value; }