示例#1
0
        public static string EncodeTree <T>(this IEnumerable <T> nodes, Delegates.GetChildren <T> childAccecor, Func <T, string> nameAccessor, Delegates.GetDataList <T> dataAccessor, string path = "")
        {
            var listToEncode = nodes.FlattenTree(childAccecor, nameAccessor, dataAccessor);

            return(FlatListSerializer.EncodeList(listToEncode));
        }
示例#2
0
 public static string HierarchicalGraph <T>(IEnumerable <T> nodes, Delegates.GetChildren <T> childAccecor,
                                            Func <T, string> nameAccessor, Delegates.GetDependencyList <T> dataAccessor)
 => nodes.ToList().EncodeHierarchicalGraph(childAccecor, nameAccessor, dataAccessor);
示例#3
0
        public static IEnumerable <FlatEntry> FlattenTree <T>(this IEnumerable <T> nodes, Delegates.GetChildren <T> childAccecor, Func <T, string> nameAccessor, Delegates.GetDataList <T> dataAccessor, string path = "")
        {
            var entries = new List <FlatEntry>();

            foreach (var node in nodes.OrderBy(nameAccessor))
            {
                entries.Add(new FlatEntry
                {
                    Path      = path + nameAccessor(node),
                    ChildData = dataAccessor(node).ToList()
                });
                var newPath = path + nameAccessor(node) + "\\";
                entries.AddRange(childAccecor(node).FlattenTree(childAccecor, nameAccessor, dataAccessor, newPath));
            }
            return(entries);
        }
示例#4
0
 public static string Tree <T>(IEnumerable <T> nodes, Delegates.GetChildren <T> childAccecor,
                               Func <T, string> nameAccessor, Delegates.GetDataList <T> dataAccessor)
 => nodes.EncodeTree(childAccecor, nameAccessor, dataAccessor);
示例#5
0
        private static Dictionary <T, string> GetFullLengthNodeNames <T>(this IEnumerable <T> nodes, Delegates.GetChildren <T> childAccecor, Func <T, string> nameAccessor, string path = "")
        {
            var nodesDict = new Dictionary <T, string>();

            foreach (var node in nodes.OrderBy(nameAccessor))
            {
                nodesDict[node] = path + nameAccessor(node);
                var newPath = path + nameAccessor(node) + "\\";
                nodesDict =
                    nodesDict.Union(childAccecor(node).GetFullLengthNodeNames(childAccecor, nameAccessor, newPath)).
                    ToDictionary(x => x.Key, x => x.Value);
            }
            return(nodesDict);
        }
示例#6
0
        private static IEnumerable <FlatEntry> FlattenGraph <T>(this IEnumerable <T> nodes, Delegates.GetChildren <T> childAccecor, Func <T, string> nameAccessor, Delegates.GetDependencyList <T> dataAccessor, Dictionary <T, string> namesDict)
        {
            var entries = new List <FlatEntry>();

            foreach (var node in nodes.OrderBy(nameAccessor))
            {
                entries.Add(new FlatEntry
                {
                    Path      = namesDict[node],
                    ChildData = dataAccessor(node).Select(n => namesDict[n]).ToList()
                });
                entries.AddRange(childAccecor(node).FlattenGraph(childAccecor, nameAccessor, dataAccessor, namesDict));
            }
            return(entries);
        }
示例#7
0
        public static IEnumerable <FlatEntry> FlattenGraph <T>(this IReadOnlyCollection <T> nodes, Delegates.GetChildren <T> childAccecor, Func <T, string> nameAccessor, Delegates.GetDependencyList <T> dataAccessor)
        {
            var names        = nodes.GetFullLengthNodeNames(childAccecor, nameAccessor);
            var listToEncode = nodes.FlattenGraph(childAccecor, nameAccessor, dataAccessor, names);

            return(listToEncode);
        }
示例#8
0
        public static string EncodeHierarchicalGraph <T>(this IReadOnlyCollection <T> nodes, Delegates.GetChildren <T> childAccecor, Func <T, string> nameAccessor, Delegates.GetDependencyList <T> dataAccessor)
        {
            var listToEncode = FlattenGraph(nodes, childAccecor, nameAccessor, dataAccessor);

            return(FlatListSerializer.EncodeList(listToEncode));
        }