private String RenderTextImpl(Edge e) { var buffer = new StringBuilder(); if (e.Name == null) { if (!ShowToStringInHeader) { buffer.Append("$Root"); } } else { var m = Regex.Match(e.Name, @"^\$(?<index>\d*)$"); if (!m.Success || !ShowToStringInHeader || ShowIndicesInHeader) { buffer.Append(m.Success ? e.Name.Substring(1) : e.Name); } } if (ShowToStringInHeader) { buffer.Append(buffer.Length > 0 ? ": " : String.Empty); if (IsGrouping(e.Target.Object)) { var key = SafetyTools.SafeEval(() => e.Target.Object.GetType().GetProperty("Key").GetValue(e.Target.Object, null)); if (key != null) { buffer.Append(key); } else { buffer.Append(SafeGet(() => e.Target.ToString())); } } else { buffer.Append(SafeGet(() => e.Target.ToString())); } } return(buffer.Replace("\t", " ").ToString()); }
public IEnumerable <Edge> Apply(Vertex source) { foreach (var kvp_iter in Logic(source.Object)) { var kvp = kvp_iter; // just make resharper happeh Func <Vertex> createVertex = () => new Vertex(kvp.Value, ++_idFactory, source.DistanceFromRoot + 1); if (kvp.Value == null) { yield return(new Edge(kvp.Key, source, createVertex())); } else { var contains = SafetyTools.SafeEval(() => _cache.ContainsKey(kvp.Value), true); if (!contains) { SafetyTools.SafeDo(() => _cache.Add(kvp.Value, createVertex())); } var vertex = SafetyTools.SafeEval(() => _cache[kvp.Value], createVertex); yield return(new Edge(kvp.Key, source, vertex)); } } }