public MetadataVerificationRequest(
     SearchMode searchMode,
     AncestrySearchDirection ancestrySearchDirection,
     Func <Node, bool?> resultEvaluator,
     Func <NodeRelation, Node, bool> relationSelector = null,
     Func <Node, bool> ancestryNeighborSelector       = null,
     HashSet <RelationKind> relationsToCheck          = null)
 {
     this.SearchMode = searchMode;
     this.AncestrySearchDirection  = ancestrySearchDirection;
     this.ResultEvaluator          = resultEvaluator;
     this.RelationSelector         = relationSelector;
     this.AncestryNeighborSelector = ancestryNeighborSelector;
     this.RelationsToCheck         = relationsToCheck;
 }
Exemplo n.º 2
0
        private void ExtractAncestry(
            HashSet <Node> source,
            HashSet <Node> destination,
            HashSet <Node> excludeNodes,
            Func <Node, bool> ancestryNeighborSelector,
            AncestrySearchDirection ancestrySearchDirection)
        {
            if (ancestrySearchDirection != AncestrySearchDirection.None)
            {
                foreach (var node in source)
                {
                    if (ancestrySearchDirection.HasFlag(AncestrySearchDirection.ToParent))
                    {
                        if (node.Parent != null &&
                            (ancestryNeighborSelector == null || ancestryNeighborSelector(node.Parent)) &&
                            !excludeNodes.Contains(node.Parent) &&
                            !destination.Contains(node.Parent))
                        {
                            destination.Add(node.Parent);
                        }
                    }

                    if (ancestrySearchDirection.HasFlag(AncestrySearchDirection.ToChild))
                    {
                        foreach (var child in node.Children.Values)
                        {
                            if ((ancestryNeighborSelector == null || ancestryNeighborSelector(child)) &&
                                !excludeNodes.Contains(child) &&
                                !destination.Contains(child))
                            {
                                destination.Add(child);
                            }
                        }
                    }
                }
            }
        }