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 2020/11/12 09:20:01 UTC
[lucenenet] 01/02: Revert "Lucene.Net.Search.FieldCacheImpl:
Removed field value types and declared Get methods inline using delegate
methods"
This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit c0f97677ee8a9f96b72a03782af995488060ebfe
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Wed Nov 4 06:07:56 2020 +0700
Revert "Lucene.Net.Search.FieldCacheImpl: Removed field value types and declared Get methods inline using delegate methods"
This reverts commit 34758c1315391794825f33a3f48b5a3dd6083745.
As per #370, using delegates creates extra allocations so we trade some maintainability for top performance in this case.
---
src/Lucene.Net/Search/FieldCacheImpl.cs | 120 ++++++++++++++++++++++++++++++--
1 file changed, 114 insertions(+), 6 deletions(-)
diff --git a/src/Lucene.Net/Search/FieldCacheImpl.cs b/src/Lucene.Net/Search/FieldCacheImpl.cs
index 569cdec..2640e13 100644
--- a/src/Lucene.Net/Search/FieldCacheImpl.cs
+++ b/src/Lucene.Net/Search/FieldCacheImpl.cs
@@ -580,7 +580,7 @@ namespace Lucene.Net.Search
{
// Not cached here by FieldCacheImpl (cached instead
// per-thread by SegmentReader):
- return new FieldCache.Bytes(get: (docID) => (byte)valuesIn.Get(docID));
+ return new FieldCache_BytesAnonymousInnerClassHelper(this, valuesIn);
}
else
{
@@ -604,6 +604,24 @@ namespace Lucene.Net.Search
}
}
+ private class FieldCache_BytesAnonymousInnerClassHelper : FieldCache.Bytes
+ {
+ private readonly FieldCacheImpl outerInstance;
+
+ private NumericDocValues valuesIn;
+
+ public FieldCache_BytesAnonymousInnerClassHelper(FieldCacheImpl outerInstance, NumericDocValues valuesIn)
+ {
+ this.outerInstance = outerInstance;
+ this.valuesIn = valuesIn;
+ }
+
+ public override byte Get(int docID)
+ {
+ return (byte)valuesIn.Get(docID);
+ }
+ }
+
internal class BytesFromArray : FieldCache.Bytes
{
private readonly sbyte[] values;
@@ -738,7 +756,7 @@ namespace Lucene.Net.Search
{
// Not cached here by FieldCacheImpl (cached instead
// per-thread by SegmentReader):
- return new FieldCache.Int16s(get: (docID) => (short)valuesIn.Get(docID));
+ return new FieldCache_Int16sAnonymousInnerClassHelper(this, valuesIn);
}
else
{
@@ -760,6 +778,24 @@ namespace Lucene.Net.Search
}
}
+ private class FieldCache_Int16sAnonymousInnerClassHelper : FieldCache.Int16s
+ {
+ private readonly FieldCacheImpl outerInstance;
+
+ private NumericDocValues valuesIn;
+
+ public FieldCache_Int16sAnonymousInnerClassHelper(FieldCacheImpl outerInstance, NumericDocValues valuesIn)
+ {
+ this.outerInstance = outerInstance;
+ this.valuesIn = valuesIn;
+ }
+
+ public override short Get(int docID)
+ {
+ return (short)valuesIn.Get(docID);
+ }
+ }
+
/// <summary>
/// NOTE: This was ShortsFromArray in Lucene
/// </summary>
@@ -895,7 +931,7 @@ namespace Lucene.Net.Search
{
// Not cached here by FieldCacheImpl (cached instead
// per-thread by SegmentReader):
- return new FieldCache.Int32s(get: (docID) => (int)valuesIn.Get(docID));
+ return new FieldCache_Int32sAnonymousInnerClassHelper(this, valuesIn);
}
else
{
@@ -917,6 +953,24 @@ namespace Lucene.Net.Search
}
}
+ private class FieldCache_Int32sAnonymousInnerClassHelper : FieldCache.Int32s
+ {
+ private readonly FieldCacheImpl outerInstance;
+
+ private NumericDocValues valuesIn;
+
+ public FieldCache_Int32sAnonymousInnerClassHelper(FieldCacheImpl outerInstance, NumericDocValues valuesIn)
+ {
+ this.outerInstance = outerInstance;
+ this.valuesIn = valuesIn;
+ }
+
+ public override int Get(int docID)
+ {
+ return (int)valuesIn.Get(docID);
+ }
+ }
+
/// <summary>
/// NOTE: This was IntsFromArray in Lucene
/// </summary>
@@ -1175,7 +1229,7 @@ namespace Lucene.Net.Search
{
// Not cached here by FieldCacheImpl (cached instead
// per-thread by SegmentReader):
- return new FieldCache.Singles(get: (docID) => J2N.BitConversion.Int32BitsToSingle((int)valuesIn.Get(docID)));
+ return new FieldCache_SinglesAnonymousInnerClassHelper(this, valuesIn);
}
else
{
@@ -1197,6 +1251,24 @@ namespace Lucene.Net.Search
}
}
+ private class FieldCache_SinglesAnonymousInnerClassHelper : FieldCache.Singles
+ {
+ private readonly FieldCacheImpl outerInstance;
+
+ private NumericDocValues valuesIn;
+
+ public FieldCache_SinglesAnonymousInnerClassHelper(FieldCacheImpl outerInstance, NumericDocValues valuesIn)
+ {
+ this.outerInstance = outerInstance;
+ this.valuesIn = valuesIn;
+ }
+
+ public override float Get(int docID)
+ {
+ return J2N.BitConversion.Int32BitsToSingle((int)valuesIn.Get(docID));
+ }
+ }
+
/// <summary>
/// NOTE: This was FloatsFromArray in Lucene
/// </summary>
@@ -1326,7 +1398,7 @@ namespace Lucene.Net.Search
{
// Not cached here by FieldCacheImpl (cached instead
// per-thread by SegmentReader):
- return new FieldCache.Int64s(get: (docID) => valuesIn.Get(docID));
+ return new FieldCache_Int64sAnonymousInnerClassHelper(this, valuesIn);
}
else
{
@@ -1348,6 +1420,24 @@ namespace Lucene.Net.Search
}
}
+ private class FieldCache_Int64sAnonymousInnerClassHelper : FieldCache.Int64s
+ {
+ private readonly FieldCacheImpl outerInstance;
+
+ private NumericDocValues valuesIn;
+
+ public FieldCache_Int64sAnonymousInnerClassHelper(FieldCacheImpl outerInstance, NumericDocValues valuesIn)
+ {
+ this.outerInstance = outerInstance;
+ this.valuesIn = valuesIn;
+ }
+
+ public override long Get(int docID)
+ {
+ return valuesIn.Get(docID);
+ }
+ }
+
/// <summary>
/// NOTE: This was LongsFromArray in Lucene
/// </summary>
@@ -1489,7 +1579,7 @@ namespace Lucene.Net.Search
{
// Not cached here by FieldCacheImpl (cached instead
// per-thread by SegmentReader):
- return new FieldCache.Doubles(get: (docID) => J2N.BitConversion.Int64BitsToDouble(valuesIn.Get(docID)));
+ return new FieldCache_DoublesAnonymousInnerClassHelper(this, valuesIn);
}
else
{
@@ -1511,6 +1601,24 @@ namespace Lucene.Net.Search
}
}
+ private class FieldCache_DoublesAnonymousInnerClassHelper : FieldCache.Doubles
+ {
+ private readonly FieldCacheImpl outerInstance;
+
+ private NumericDocValues valuesIn;
+
+ public FieldCache_DoublesAnonymousInnerClassHelper(FieldCacheImpl outerInstance, NumericDocValues valuesIn)
+ {
+ this.outerInstance = outerInstance;
+ this.valuesIn = valuesIn;
+ }
+
+ public override double Get(int docID)
+ {
+ return J2N.BitConversion.Int64BitsToDouble(valuesIn.Get(docID));
+ }
+ }
+
internal class DoublesFromArray : FieldCache.Doubles
{
private readonly double[] values;