Пример #1
0
        private Dictionary <Tags, DownwardEdges> GenerateEdges(List <TagOrdering> orderings)
        {
            var result = new EdgeGraph();

            lock (Tags.Registry)
                foreach (var ordering in orderings)
                {
                    result.Connect(ordering.Higher, ordering.Lower);

                    foreach (var kvp in Tags.Registry)
                    {
                        var containsLower  = kvp.Value.Contains(ordering.Lower);
                        var containsHigher = kvp.Value.Contains(ordering.Higher);

                        if (containsLower && containsHigher)
                        {
                            continue;
                        }
                        else if (containsLower)
                        {
                            result.Connect(ordering.Higher, kvp.Value);
                        }
                        else if (containsHigher)
                        {
                            result.Connect(kvp.Value, ordering.Lower);
                        }
                    }
                }

            return(result.Finalize());
        }
Пример #2
0
        private void GenerateEdge(EdgeGraph result, TagSet ts, TagOrdering ordering)
        {
            var containsLower  = ts.Contains(ordering.Lower);
            var containsHigher = ts.Contains(ordering.Higher);

            if (containsLower && containsHigher)
            {
                return;
            }
            else if (containsLower)
            {
                result.Connect(ordering.Higher, ts);
            }
            else if (containsHigher)
            {
                result.Connect(ts, ordering.Lower);
            }
        }
Пример #3
0
        private void GenerateEdge(EdgeGraph result, Tag t, TagOrdering ordering)
        {
            var containsLower  = (ordering.Lower.Count == 1) && (ordering.Lower.Id == t.Id);
            var containsHigher = (ordering.Higher.Count == 1) && (ordering.Higher.Id == t.Id);

            if (containsLower && containsHigher)
            {
                return;
            }
            else if (containsLower)
            {
                result.Connect(ordering.Higher, t);
            }
            else if (containsHigher)
            {
                result.Connect(t, ordering.Lower);
            }
        }
Пример #4
0
        private Dictionary <Tags, DownwardEdges> GenerateEdges(List <TagOrdering> orderings)
        {
            var result = new EdgeGraph();

            lock (Tags.Registry)
                foreach (var ordering in orderings)
                {
                    result.Connect(ordering.Higher, ordering.Lower);

                    foreach (var kvp in Tags.Registry)
                    {
                        GenerateEdge(result, kvp.Value, ordering);
                    }

                    foreach (var kvp in TagSet.Registry)
                    {
                        GenerateEdge(result, kvp.Value, ordering);
                    }
                }

            return(result.Finalize());
        }