public static STuple <CFGBlock, CFGBlock, string> GetContextEdge(this ContextEdge @this, BijectiveMap <Subroutine, int> subroutineLocalIds)
 {
     return(new STuple <CFGBlock, CFGBlock, string>(
                subroutineLocalIds.KeyForValue(@this.Block1SubroutineLocalId).Blocks.First(b => b.Index == @this.Block1Index),
                subroutineLocalIds.KeyForValue(@this.Block2SubroutineLocalId).Blocks.First(b => b.Index == @this.Block2Index),
                @this.Tag));
 }
 public static void SetContextEdge(this ContextEdge @this, BijectiveMap <Subroutine, int> subroutineLocalIds, STuple <CFGBlock, CFGBlock, string> edge)
 {
     @this.Block1SubroutineLocalId = subroutineLocalIds[edge.One.Subroutine];
     @this.Block1Index             = edge.One.Index;
     @this.Block2SubroutineLocalId = subroutineLocalIds[edge.Two.Subroutine];
     @this.Block2Index             = edge.Two.Index;
     @this.Tag = edge.Three;
 }