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;