Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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);
        }
Esempio n. 5
0
        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();
        }