Ejemplo n.º 1
0
 public LatticeQueryable(Lattice /*!*/ lattice, Lattice.Element /*!*/ element)
 {
     Contract.Requires(element != null);
     Contract.Requires(lattice != null);
     this.lattice = lattice;
     this.element = element;
     // base();
 }
Ejemplo n.º 2
0
        private Element /*!*/ Combine(Element /*!*/ first, ICombineNameMap /*?*/ firstToResult, Element /*!*/ second, ICombineNameMap /*?*/ secondToResult, CombineOp c)
        {
            Contract.Requires(second != null);
            Contract.Requires(first != null);
            Contract.Ensures(Contract.Result <Element>() != null);
            Elt a = (Elt)first;
            Elt b = (Elt)second;

            int unionCount = System.Math.Max(a.Count, b.Count);
            Elt combined   = new Elt(unionCount, IsBottom(a) && IsBottom(b));

            for (int i = 0; i < unionCount; i++)
            {
                bool thisExists = a.Contains(i);
                bool thatExists = b.Contains(i);

                if (thisExists && thatExists)
                {
                    Lattice.Element suba = a[i];
                    Lattice.Element subb = b[i];
                    Contract.Assert(suba != null && subb != null);

                    switch (c)
                    {
                    case CombineOp.Meet:
                        combined[i] = SubLattice(i).Meet(suba, subb);
                        break;

                    case CombineOp.Join:
                        if (firstToResult != null && secondToResult != null)
                        {
                            combined[i] = SubLattice(i).Join(suba, firstToResult, subb, secondToResult);
                        }
                        else
                        {
                            combined[i] = SubLattice(i).Join(suba, subb);
                        }
                        break;

                    case CombineOp.Widen:
                        if (firstToResult != null && secondToResult != null)
                        {
                            combined[i] = SubLattice(i).Widen(suba, firstToResult, subb, secondToResult);
                        }
                        else
                        {
                            combined[i] = SubLattice(i).Widen(suba, subb);
                        }
                        break;
                    }
                }
                else if (thisExists)
                {
                    combined[i] = a[i];
                }
                else
                {
                    combined[i] = b[i];
                }
            }
            Debug.Assert(combined.IsValid);
            return(combined);
        }
Ejemplo n.º 3
0
 public LatticeQueryable(Lattice/*!*/ lattice, Lattice.Element/*!*/ element) {
   Contract.Requires(element != null);
   Contract.Requires(lattice != null);
   this.lattice = lattice;
   this.element = element;
   // base();
 }