/// <summary>Add filter callback to an event evaluator, which could be either an index node or a set node.</summary>
        /// <param name="remainingParameters">any remaining parameters</param>
        /// <param name="filterCallback">the filter callback</param>
        /// <param name="eventEvaluator">to add the filterCallback to.</param>
        /// <param name="lockFactory">
        ///   <para>the lock factory</para>
        /// </param>
        /// <returns>boolean indicating if the eventEvaluator was successfully added</returns>
        private static bool AddToEvaluator(
            ArrayDeque<FilterValueSetParam> remainingParameters,
            FilterHandle filterCallback,
            EventEvaluator eventEvaluator,
            FilterServiceGranularLockFactory lockFactory)
        {
            if (eventEvaluator is FilterHandleSetNode) {
                var node = (FilterHandleSetNode) eventEvaluator;
                AddToNode(remainingParameters, filterCallback, node, lockFactory);
                return true;
            }

            // Check if the next index matches any of the remaining filterCallback parameters
            var nextIndex = (FilterParamIndexBase) eventEvaluator;

            var parameter = IndexHelper.FindParameter(remainingParameters, nextIndex);
            if (parameter != null) {
                remainingParameters.Remove(parameter);
                AddToIndex(remainingParameters, filterCallback, nextIndex, parameter.FilterForValue, lockFactory);
                return true;
            }

            // This eventEvaluator does not work with any of the remaining filter parameters
            return false;
        }
Exemple #2
0
        public void TestFindParameter()
        {
            var indexOne = IndexFactory.CreateIndex(MakeLookupable("BoolPrimitive"), lockFactory, FilterOperator.EQUAL);

            Assert.IsNull(IndexHelper.FindParameter(parameters, indexOne));

            var indexTwo = IndexFactory.CreateIndex(MakeLookupable("string"), lockFactory, FilterOperator.EQUAL);

            Assert.AreEqual(parameterThree, IndexHelper.FindParameter(parameters, indexTwo));

            var indexThree = IndexFactory.CreateIndex(MakeLookupable("IntPrimitive"), lockFactory, FilterOperator.GREATER);

            Assert.AreEqual(parameterOne, IndexHelper.FindParameter(parameters, indexThree));
        }