コード例 #1
0
        public ContextEdge NewContextEdge(OutcomeOrSuggestion item)
        {
            // TODO: this might now work if the underlying DfContext generates proxies.

            Outcome outcome = item as Outcome;

            if (outcome != null)
            {
                var result = new OutcomeContextEdge();
                Contract.Assume(outcome.Method != null);
                if (ValidMethodModel(outcome.Method))
                {
                    outcome.OutcomeContextEdges.Add(result);
                }
                return(result);
            }
            Suggestion sugg = item as Suggestion;

            if (sugg != null)
            {
                Contract.Assume(sugg.Method != null);
                var result = new SuggestionContextEdge();
                if (ValidMethodModel(sugg.Method))
                {
                    sugg.SuggestionContextEdges.Add(result);
                }
                return(result);
            }
            return(null);
        }
コード例 #2
0
        public ContextEdge AddNewContextEdge(OutcomeOrSuggestion item, int rank)
        {
            Contract.Requires(item != null);
            Contract.Ensures(Contract.Result <ContextEdge>() != null);

            throw new NotImplementedException();
        }
コード例 #3
0
 public static APC GetAPC(this OutcomeOrSuggestion @this, BijectiveMap <Subroutine, int> subroutineLocalIds)
 {
     return(new APC(
                subroutineLocalIds.KeyForValue(@this.SubroutineLocalId).Blocks.First(b => b.Index == @this.BlockIndex),
                @this.ApcIndex,
                @this.ContextEdges
                .OrderBy(edge => edge.Rank)
                .Select(edge => edge.GetContextEdge(subroutineLocalIds))
                .Aggregate((FList <STuple <CFGBlock, CFGBlock, string> >)null, (accu, edge) => accu.Cons(edge))
                .Reverse()));
 }
コード例 #4
0
        public ContextEdge AddNewContextEdge(OutcomeOrSuggestion item, int rank)
        {
            if (!this.IsValid)
            {
                return(null);
            }

            var result = this.model.NewContextEdge(item);

            result.Rank = rank;
            return(result);
        }
コード例 #5
0
        /// <summary>
        /// Must be called only once !
        /// </summary>
        public static void SetAPC(this IClousotCache @this, OutcomeOrSuggestion that, APC apc, BijectiveMap <Subroutine, int> subroutineLocalIds)
        {
            if (@that.ContextEdges.Any())
            {
                throw new InvalidOperationException();
            }
            @that.SubroutineLocalId = subroutineLocalIds[apc.Block.Subroutine];
            @that.BlockIndex        = apc.Block.Index;
            @that.ApcIndex          = apc.Index;
            int rank = 0;

            foreach (var edge in apc.SubroutineContext.GetEnumerable())
            {
                var added = @this.AddNewContextEdge(that, rank);
                added.SetContextEdge(subroutineLocalIds, edge);
                rank++;
            }
        }
コード例 #6
0
        public ContextEdge NewContextEdge(OutcomeOrSuggestion item)
        {
            Outcome outcome = item as Outcome;

            if (outcome != null)
            {
                var result = new OutcomeContextEdge {
                    Outcome = outcome
                };
                outcome.OutcomeContextEdges.Add(result);
                return(result);
            }
            Suggestion sugg = item as Suggestion;

            if (sugg != null)
            {
                var result = new SuggestionContextEdge {
                    Suggestion = sugg
                };
                sugg.SuggestionContextEdges.Add(result);
                return(result);
            }
            return(null);
        }
コード例 #7
0
        public ContextEdge NewContextEdge(OutcomeOrSuggestion item)
        {
            Contract.Ensures(Contract.Result <ContextEdge>() != null);

            throw new NotImplementedException();
        }
コード例 #8
0
 public ContextEdge AddNewContextEdge(OutcomeOrSuggestion item, int rank)
 {
     return(underlying.AddNewContextEdge(item, rank));
 }