コード例 #1
0
ファイル: StringRange.cs プロジェクト: ikvm/nesper
 public bool Equals(StringRange other)
 {
     if (ReferenceEquals(null, other))
     {
         return(false);
     }
     if (ReferenceEquals(this, other))
     {
         return(true);
     }
     return(Equals(other._min, _min) && Equals(other._max, _max));
 }
コード例 #2
0
        public void TestComparator()
        {
            SortedSet <StringRange> sorted = new SortedSet <StringRange>(
                new StringRangeComparator());

            String[][] TEST_SET =
            {
                new[] { "B",  "G" },
                new[] { "B",  "F" },
                new[] { null, "E" },
                new[] { "A",  "F" },
                new[] { "A",  "G" },
            };

            int[] EXPECTED_INDEX = { 2, 3, 4, 1, 0 };

            // Sort
            var ranges = new StringRange[TEST_SET.Length];

            for (int i = 0; i < TEST_SET.Length; i++)
            {
                ranges[i] = new StringRange(TEST_SET[i][0], TEST_SET[i][1]);
                sorted.Add(ranges[i]);
            }

            // Check results
            int count = 0;

            foreach (var range in sorted)
            {
                var indexExpected = EXPECTED_INDEX[count];
                var expected      = ranges[indexExpected];

                Log.Debug(".testComparator count=" + count +
                          " range=" + range +
                          " expected=" + expected);

                Assert.AreEqual(range, expected, "failed at count " + count);
                count++;
            }
            Assert.AreEqual(count, TEST_SET.Length);
        }
コード例 #3
0
        public override void MatchEvent(EventBean theEvent, ICollection <FilterHandle> matches)
        {
            var objAttributeValue = Lookupable.Getter.Get(theEvent);
            var returnValue       = new Mutable <bool?>(false);

            using (Instrument.With(
                       i => i.QFilterReverseIndex(this, objAttributeValue),
                       i => i.AFilterReverseIndex(returnValue.Value)))
            {
                if (objAttributeValue == null)
                {
                    return;
                }

                var attributeValue = (String)objAttributeValue;

                var rangeStart = new StringRange(null, attributeValue);
                var rangeEnd   = new StringRange(attributeValue, null);
                var subMap     = Ranges.Between(rangeStart, true, rangeEnd, true);

                // For not including either endpoint
                // A bit awkward to duplicate the loop code, however better than checking the bool many times over
                // This may be a bit of an early performance optimization - the optimizer after all may do this better
                if (FilterOperator == FilterOperator.RANGE_OPEN) // include neither endpoint
                {
                    foreach (var entry in subMap)
                    {
                        if (String.Compare(entry.Key.Min, attributeValue, StringComparison.Ordinal) < 0 &&
                            String.Compare(entry.Key.Max, attributeValue, StringComparison.Ordinal) > 0)
                        {
                            entry.Value.MatchEvent(theEvent, matches);
                        }
                    }
                }
                else if (FilterOperator == FilterOperator.RANGE_CLOSED) // include all endpoints
                {
                    foreach (var entry in subMap)
                    {
                        if (String.Compare(entry.Key.Min, attributeValue, StringComparison.Ordinal) <= 0 &&
                            String.Compare(entry.Key.Max, attributeValue, StringComparison.Ordinal) >= 0)
                        {
                            entry.Value.MatchEvent(theEvent, matches);
                        }
                    }
                }
                else if (FilterOperator == FilterOperator.RANGE_HALF_CLOSED)
                // include high endpoint not low endpoint
                {
                    foreach (var entry in subMap)
                    {
                        if (String.Compare(entry.Key.Min, attributeValue, StringComparison.Ordinal) < 0 &&
                            String.Compare(entry.Key.Max, attributeValue, StringComparison.Ordinal) >= 0)
                        {
                            entry.Value.MatchEvent(theEvent, matches);
                        }
                    }
                }
                else if (FilterOperator == FilterOperator.RANGE_HALF_OPEN)
                // include low endpoint not high endpoint
                {
                    foreach (var entry in subMap)
                    {
                        if (String.Compare(entry.Key.Min, attributeValue, StringComparison.Ordinal) <= 0 &&
                            String.Compare(entry.Key.Max, attributeValue, StringComparison.Ordinal) > 0)
                        {
                            entry.Value.MatchEvent(theEvent, matches);
                        }
                    }
                }
                else
                {
                    throw new IllegalStateException("Invalid filter operator " + FilterOperator);
                }

                returnValue.Value = null;
            }
        }