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 <[email protected]> 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;
