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/07/13 18:36:02 UTC
[7/9] lucenenet git commit: API: Added
ReferenceManager.AcquireContext(),
which is similar to ReferenceManager.Acquire() but can be used in a using
block to implicitly dereference instead of having to do it explicitly in a
finally block.
API: Added ReferenceManager<G>.AcquireContext(), which is similar to ReferenceManager<G>.Acquire() but can be used in a using block to implicitly dereference instead of having to do it explicitly in a finally block.
Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/6f51ab54
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/6f51ab54
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/6f51ab54
Branch: refs/heads/master
Commit: 6f51ab547cd00f3280d69b37d17c86d45f587c00
Parents: 39e6316
Author: Shad Storhaug <sh...@shadstorhaug.com>
Authored: Thu May 11 13:44:46 2017 +0700
Committer: Shad Storhaug <sh...@shadstorhaug.com>
Committed: Fri Jul 14 01:15:57 2017 +0700
----------------------------------------------------------------------
src/Lucene.Net/Lucene.Net.csproj | 2 +
.../Support/Search/ReferenceContext.cs | 64 ++++++++++++++++++++
.../Search/ReferenceManagerExtensions.cs | 47 ++++++++++++++
3 files changed, 113 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/6f51ab54/src/Lucene.Net/Lucene.Net.csproj
----------------------------------------------------------------------
diff --git a/src/Lucene.Net/Lucene.Net.csproj b/src/Lucene.Net/Lucene.Net.csproj
index c0c02d3..ff96872 100644
--- a/src/Lucene.Net/Lucene.Net.csproj
+++ b/src/Lucene.Net/Lucene.Net.csproj
@@ -652,6 +652,8 @@
<Compile Include="Support\ICallable.cs" />
<Compile Include="Support\ICharSequence.cs" />
<Compile Include="Support\RectangularArrays.cs" />
+ <Compile Include="Support\Search\ReferenceContext.cs" />
+ <Compile Include="Support\Search\ReferenceManagerExtensions.cs" />
<Compile Include="Support\Threading\ICompletionService.cs" />
<Compile Include="Support\IO\IDataInput.cs" />
<Compile Include="Support\IO\IDataOutput.cs" />
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/6f51ab54/src/Lucene.Net/Support/Search/ReferenceContext.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net/Support/Search/ReferenceContext.cs b/src/Lucene.Net/Support/Search/ReferenceContext.cs
new file mode 100644
index 0000000..c72e3f4
--- /dev/null
+++ b/src/Lucene.Net/Support/Search/ReferenceContext.cs
@@ -0,0 +1,64 @@
+using System;
+
+namespace Lucene.Net.Search
+{
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ /// <summary>
+ /// <see cref="ReferenceContext{T}"/> holds a reference instance and
+ /// ensures it is properly de-referenced from its corresponding <see cref="ReferenceManager{G}"/>
+ /// when <see cref="Dispose()"/> is called. This class is primarily intended
+ /// to be used with a using block.
+ /// <para/>
+ /// LUCENENET specific
+ /// </summary>
+ /// <typeparam name="T">The reference type</typeparam>
+ public class ReferenceContext<T> : IDisposable
+ where T : class
+ {
+ private readonly ReferenceManager<T> referenceManager;
+ private T reference;
+
+ internal ReferenceContext(ReferenceManager<T> referenceManager)
+ {
+ this.referenceManager = referenceManager;
+ this.reference = referenceManager.Acquire();
+ }
+
+ /// <summary>
+ /// The reference acquired from the <see cref="ReferenceManager{G}"/>.
+ /// </summary>
+ public T Reference
+ {
+ get { return reference; }
+ }
+
+ /// <summary>
+ /// Ensures the reference is properly de-referenced from its <see cref="ReferenceManager{G}"/>.
+ /// After this call, <see cref="Reference"/> will be <c>null</c>.
+ /// </summary>
+ public void Dispose()
+ {
+ if (this.reference != null)
+ {
+ this.referenceManager.Release(this.reference);
+ this.reference = null;
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/6f51ab54/src/Lucene.Net/Support/Search/ReferenceManagerExtensions.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net/Support/Search/ReferenceManagerExtensions.cs b/src/Lucene.Net/Support/Search/ReferenceManagerExtensions.cs
new file mode 100644
index 0000000..2629398
--- /dev/null
+++ b/src/Lucene.Net/Support/Search/ReferenceManagerExtensions.cs
@@ -0,0 +1,47 @@
+namespace Lucene.Net.Search
+{
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ public static class ReferenceManagerExtensions
+ {
+ /// <summary>
+ /// Obtain the current reference.
+ /// <para/>
+ /// Like <see cref="ReferenceManager{G}.Acquire()"/>, but intended for use in a using
+ /// block so calling <see cref="ReferenceManager{G}.Release(G)"/> happens implicitly.
+ /// For example:
+ /// <para/>
+ /// <code>
+ /// var searcherManager = new SearcherManager(indexWriter, true, null);
+ /// using (var context = searcherManager.AcquireContext())
+ /// {
+ /// IndexSearcher searcher = context.Reference;
+ ///
+ /// // use searcher...
+ /// }
+ /// </code>
+ /// </summary>
+ /// <typeparam name="T">The reference type</typeparam>
+ /// <param name="referenceManager">this <see cref="ReferenceManager{G}"/></param>
+ /// <returns>A <see cref="ReferenceContext{T}"/> instance that holds the <see cref="ReferenceContext{T}.Reference"/> and ensures it is released properly when <see cref="ReferenceContext{T}.Dispose()"/> is called.</returns>
+ public static ReferenceContext<T> AcquireContext<T>(this ReferenceManager<T> referenceManager) where T : class
+ {
+ return new ReferenceContext<T>(referenceManager);
+ }
+ }
+}