internal static void Check(FormalValueAccess[] accesses) { var ss = accesses.Select(x => x.Size).Distinct().ToArray(); if(ss.Length != 1 || ss[0] != accesses.ToArray().Length) Tracer.FlaggedLine("Size problem"); var ii = accesses.Select((x, i) => i - x.Index).Distinct().ToArray(); if(ii.Length != 1 || ii[0] != 0) Tracer.FlaggedLine("Consequtivity problem"); }
public static IFormalValue[] Transpose(FormalValueAccess[] accesses) { var distinctAccesses = accesses.Distinct().ToArray(); if(distinctAccesses.Length == 1 && distinctAccesses[0] == null) return new IFormalValue[1]; var result = accesses.Select(x => x == null ? null : x.FormalValue).Distinct().ToArray(); foreach(var formalValue in result) if(formalValue != null) formalValue.Check(accesses.Where(x => x != null && x.FormalValue == formalValue).ToArray()); return result; }