コード例 #1
0
        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());
        }
コード例 #2
0
        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));
                }
            }
        }