API: Lucene.Net.Search.Filter: Added NewAnonymous() method for easy creation of 
anonymous classes via delegate methods.


Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/cbb4d3fb
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/cbb4d3fb
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/cbb4d3fb

Branch: refs/heads/master
Commit: cbb4d3fb8e5e226fdbcba859c34d348142fc482a
Parents: de55c63
Author: Shad Storhaug <[email protected]>
Authored: Wed Jun 21 20:21:06 2017 +0700
Committer: Shad Storhaug <[email protected]>
Committed: Thu Jun 22 00:13:00 2017 +0700

----------------------------------------------------------------------
 src/Lucene.Net/Search/Filter.cs | 47 +++++++++++++++++++++++++++++++++++-
 1 file changed, 46 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucenenet/blob/cbb4d3fb/src/Lucene.Net/Search/Filter.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net/Search/Filter.cs b/src/Lucene.Net/Search/Filter.cs
index ad0d726..3910edd 100644
--- a/src/Lucene.Net/Search/Filter.cs
+++ b/src/Lucene.Net/Search/Filter.cs
@@ -30,7 +30,7 @@ namespace Lucene.Net.Search
 #if FEATURE_SERIALIZABLE
     [Serializable]
 #endif
-    public abstract class Filter // LUCENENET TODO: API - Make static 
NewAnonymous() factory method with delegate method for GetDocIdSet()
+    public abstract class Filter
     {
         /// <summary>
         /// Creates a <see cref="DocIdSet"/> enumerating the documents that 
should be
@@ -59,5 +59,50 @@ namespace Lucene.Net.Search
         ///         the filter doesn't accept any documents otherwise internal 
optimization might not apply
         ///         in the case an <i>empty</i> <see cref="DocIdSet"/> is 
returned. </returns>
         public abstract DocIdSet GetDocIdSet(AtomicReaderContext context, 
IBits acceptDocs);
+
+
+        /// <summary>
+        /// Creates a new instance with the ability to specify the body of the 
<see cref="GetDocIdSet(AtomicReaderContext, IBits)"/>
+        /// method through the <paramref name="getDocIdSet"/> parameter.
+        /// Simple example:
+        /// <code>
+        ///     var filter = Filter.NewAnonymous(getDocIdSet: (context, 
acceptDocs) =>
+        ///     {
+        ///         if (acceptDocs == null) acceptDocs = new 
Bits.MatchAllBits(5);
+        ///         OpenBitSet bitset = new OpenBitSet(5);
+        ///         if (acceptDocs.Get(1)) bitset.Set(1);
+        ///         if (acceptDocs.Get(3)) bitset.Set(3);
+        ///         return new DocIdBitSet(bitset);
+        ///     });
+        /// </code>
+        /// <para/>
+        /// LUCENENET specific
+        /// </summary>
+        /// <param name="getDocIdSet">
+        /// A delegate method that represents (is called by) the <see 
cref="GetDocIdSet(AtomicReaderContext, IBits)"/>
+        /// method. It accepts a <see cref="AtomicReaderContext"/> context and 
a <see cref="IBits"/> acceptDocs and
+        /// returns the <see cref="DocIdSet"/> for this filter.
+        /// </param>
+        /// <returns></returns>
+        public static Filter NewAnonymous(Func<AtomicReaderContext, IBits, 
DocIdSet> getDocIdSet)
+        {
+            return new AnonymousFilter(getDocIdSet);
+        }
+
+        // LUCENENET specific
+        private class AnonymousFilter : Filter
+        {
+            private readonly Func<AtomicReaderContext, IBits, DocIdSet> 
getDocIdSet;
+
+            public AnonymousFilter(Func<AtomicReaderContext, IBits, DocIdSet> 
getDocIdSet)
+            {
+                this.getDocIdSet = getDocIdSet;
+            }
+
+            public override DocIdSet GetDocIdSet(AtomicReaderContext context, 
IBits acceptDocs)
+            {
+                return this.getDocIdSet(context, acceptDocs);
+            }
+        }
     }
 }
\ No newline at end of file

Reply via email to