Esempio n. 1
0
        public Domain <E, V> EdgeConversion(APC from, APC to, bool isJoinPoint, IImmutableMap <V, LispList <V> > data, Domain <E, V> state)
        {
            if (data == null)
            {
                return(state);
            }
            SetDomain <V> oldNonNulls = state.NonNulls;
            SetDomain <V> nonNulls    = SetDomain <V> .TopValue;

            SetDomain <V> oldNulls = state.Nulls;
            SetDomain <V> nulls    = SetDomain <V> .TopValue;

            foreach (V variable in data.Keys)
            {
                bool nonNullContains = oldNonNulls.Contains(variable);
                bool nullContains    = oldNulls.Contains(variable);

                if (nonNullContains || nullContains)
                {
                    foreach (V anotherVariable in data[variable].AsEnumerable())
                    {
                        if (nonNullContains)
                        {
                            nonNulls = nonNulls.Add(anotherVariable);
                        }
                        if (nullContains)
                        {
                            nulls = nulls.Add(anotherVariable);
                        }
                    }
                }
            }

            return(new Domain <E, V> (nonNulls, nulls));
        }
Esempio n. 2
0
        public Domain <E, V> Join(Pair <APC, APC> edge, Domain <E, V> newstate, Domain <E, V> prevstate, out bool weaker, bool widen)
        {
            bool          nonNullWeaker;
            SetDomain <V> nonNulls = prevstate.NonNulls.Join(newstate.NonNulls, widen, out nonNullWeaker);
            bool          nullWeaker;
            SetDomain <V> nulls = prevstate.Nulls.Join(newstate.Nulls, widen, out nullWeaker);

            weaker = nonNullWeaker || nullWeaker;
            return(new Domain <E, V> (nonNulls, nulls));
        }
Esempio n. 3
0
 public NonNullDomain(SetDomain <V> nonNulls, SetDomain <V> nulls)
 {
     this.NonNulls = nonNulls;
     this.Nulls    = nulls;
 }