private void _SearchBranchForFilters(ElementNode node, IEnumerable<ISequenceFilterNode> filters, Stack<IEnumerable<ISequenceFilterNode>> filtersFound, SequenceFilterLookup lookup) { // Must push a single value for each level we enter. ISequenceFilterNode[] sequenceFilterNodes = _GetFiltersForNode(node, filters); if (sequenceFilterNodes.Length > 0) { filtersFound.Push(sequenceFilterNodes); } else { filtersFound.Push(null); } if (node.IsLeaf) { ISequenceFilterNode[] elementFilters = filtersFound.Where(x => x != null).Reverse().SelectMany(x => x).ToArray(); if (elementFilters.Length > 0) { lookup.AddElementFilters(node.Element, elementFilters); } } else { foreach (ElementNode childNode in node.Children) { _SearchBranchForFilters(childNode, filters, filtersFound, lookup); } } // Pop a single value for every level we exit. filtersFound.Pop(); }
public SequenceFilterLookup BuildLookup(IEnumerable<ElementNode> elementNodes, IEnumerable<ISequenceFilterNode> filterNodes) { SequenceFilterLookup lookup = new SequenceFilterLookup(); Stack<IEnumerable<ISequenceFilterNode>> filterStack = new Stack<IEnumerable<ISequenceFilterNode>>(); foreach (ElementNode node in elementNodes) { _SearchBranchForFilters(node, filterNodes, filterStack, lookup); } return lookup; }
public SequenceFilterLookup BuildLookup(IEnumerable <ElementNode> elementNodes, IEnumerable <ISequenceFilterNode> filterNodes) { SequenceFilterLookup lookup = new SequenceFilterLookup(); Stack <IEnumerable <ISequenceFilterNode> > filterStack = new Stack <IEnumerable <ISequenceFilterNode> >(); foreach (ElementNode node in elementNodes) { _SearchBranchForFilters(node, filterNodes, filterStack, lookup); } return(lookup); }
public void Use(IEnumerable <IEffectNode> effectNodes, IEnumerable <ISequenceFilterNode> filters, string contextName = null) { if (effectNodes == null) { throw new ArgumentNullException("effectNodes"); } if (filters == null) { throw new ArgumentNullException("filters"); } _effectNodes = effectNodes; _filterLookup = SequenceFilterService.BuildLookup(VixenSystem.Nodes, filters); _CreateInstrumentationValues(contextName); }
private void _SearchBranchForFilters(ElementNode node, IEnumerable <ISequenceFilterNode> filters, Stack <IEnumerable <ISequenceFilterNode> > filtersFound, SequenceFilterLookup lookup) { // Must push a single value for each level we enter. ISequenceFilterNode[] sequenceFilterNodes = _GetFiltersForNode(node, filters); if (sequenceFilterNodes.Length > 0) { filtersFound.Push(sequenceFilterNodes); } else { filtersFound.Push(null); } if (node.IsLeaf) { ISequenceFilterNode[] elementFilters = filtersFound.Where(x => x != null).Reverse().SelectMany(x => x).ToArray(); if (elementFilters.Length > 0) { lookup.AddElementFilters(node.Element, elementFilters); } } else { foreach (ElementNode childNode in node.Children) { _SearchBranchForFilters(childNode, filters, filtersFound, lookup); } } // Pop a single value for every level we exit. filtersFound.Pop(); }