예제 #1
0
        /// <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));
        }
예제 #2
0
 public SymbolicList(ISolver <TModel, TVar, TBool, TBitvec, TInt, TString> solver, GuardedListGroup <TModel, TVar, TBool, TBitvec, TInt, TString> value) : base(solver)
 {
     this.GuardedListGroup = value;
 }