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); }
public ContextEdge AddNewContextEdge(OutcomeOrSuggestion item, int rank) { Contract.Requires(item != null); Contract.Ensures(Contract.Result <ContextEdge>() != null); throw new NotImplementedException(); }
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())); }
public ContextEdge AddNewContextEdge(OutcomeOrSuggestion item, int rank) { if (!this.IsValid) { return(null); } var result = this.model.NewContextEdge(item); result.Rank = rank; return(result); }
/// <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++; } }
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); }
public ContextEdge NewContextEdge(OutcomeOrSuggestion item) { Contract.Ensures(Contract.Result <ContextEdge>() != null); throw new NotImplementedException(); }
public ContextEdge AddNewContextEdge(OutcomeOrSuggestion item, int rank) { return(underlying.AddNewContextEdge(item, rank)); }