You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2017/06/22 05:25:27 UTC
[26/38] lucenenet git commit: API: Lucene.Net.Search.Filter: Added
NewAnonymous() method for easy creation of anonymous classes via delegate
methods.
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 <sh...@shadstorhaug.com>
Authored: Wed Jun 21 20:21:06 2017 +0700
Committer: Shad Storhaug <sh...@shadstorhaug.com>
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