You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by pa...@apache.org on 2026/06/24 21:37:06 UTC
(lucenenet) branch issue/279 created (now 7884c6476)
This is an automated email from the ASF dual-hosted git repository.
paulirwin pushed a change to branch issue/279
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
at 7884c6476 Implement IEnumerable/IEnumerator in AbstractAppendingInt64Buffer
This branch includes the following new commits:
new 7884c6476 Implement IEnumerable/IEnumerator in AbstractAppendingInt64Buffer
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(lucenenet) 01/01: Implement IEnumerable/IEnumerator in AbstractAppendingInt64Buffer
Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
paulirwin pushed a commit to branch issue/279
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit 7884c6476cd26432b21a8eb66cb6fa5e875909e9
Author: Paul Irwin <pa...@gmail.com>
AuthorDate: Wed Jun 24 15:21:44 2026 -0600
Implement IEnumerable/IEnumerator in AbstractAppendingInt64Buffer
---
src/Lucene.Net.Tests/Util/Packed/TestPackedInts.cs | 9 +--
src/Lucene.Net/Index/BinaryDocValuesWriter.cs | 5 +-
src/Lucene.Net/Index/NumericDocValuesWriter.cs | 5 +-
src/Lucene.Net/Index/SortedDocValuesWriter.cs | 13 ++--
src/Lucene.Net/Index/SortedSetDocValuesWriter.cs | 15 ++--
.../Util/Packed/AbstractAppendingLongBuffer.cs | 80 +++++++++++++++-------
6 files changed, 83 insertions(+), 44 deletions(-)
diff --git a/src/Lucene.Net.Tests/Util/Packed/TestPackedInts.cs b/src/Lucene.Net.Tests/Util/Packed/TestPackedInts.cs
index 0fc08facd..484d8f0fd 100644
--- a/src/Lucene.Net.Tests/Util/Packed/TestPackedInts.cs
+++ b/src/Lucene.Net.Tests/Util/Packed/TestPackedInts.cs
@@ -1195,16 +1195,17 @@ public virtual void TestAppendingLongBuffer()
Assert.AreEqual(arr[i], buf.Get(i));
}
- AbstractAppendingInt64Buffer.Iterator it = buf.GetIterator();
+ using var it = buf.GetEnumerator();
for (int i = 0; i < arr.Length; ++i)
{
+ bool hasNext = it.MoveNext();
if (Random.NextBoolean())
{
- Assert.IsTrue(it.HasNext);
+ Assert.IsTrue(hasNext);
}
- Assert.AreEqual(arr[i], it.Next());
+ Assert.AreEqual(arr[i], it.Current);
}
- Assert.IsFalse(it.HasNext);
+ Assert.IsFalse(it.MoveNext());
long[] target = new long[arr.Length + 1024]; // check the request for more is OK.
diff --git a/src/Lucene.Net/Index/BinaryDocValuesWriter.cs b/src/Lucene.Net/Index/BinaryDocValuesWriter.cs
index 6240c511f..00680a0bb 100644
--- a/src/Lucene.Net/Index/BinaryDocValuesWriter.cs
+++ b/src/Lucene.Net/Index/BinaryDocValuesWriter.cs
@@ -136,7 +136,7 @@ private IEnumerable<BytesRef> GetBytesIterator(int maxDocParam)
{
// Use yield return instead of ucsom IEnumerable
var value = new BytesRef();
- AppendingDeltaPackedInt64Buffer.Iterator lengthsIterator = lengths.GetIterator();
+ using var lengthsEnumerator = lengths.GetEnumerator();
int size = (int)lengths.Count;
DataInput bytesIterator = bytes.GetDataInput();
int maxDoc = maxDocParam;
@@ -147,7 +147,8 @@ private IEnumerable<BytesRef> GetBytesIterator(int maxDocParam)
BytesRef v = null;
if (upto < size)
{
- int length = (int)lengthsIterator.Next();
+ lengthsEnumerator.MoveNext();
+ int length = (int)lengthsEnumerator.Current;
value.Grow(length);
value.Length = length;
try
diff --git a/src/Lucene.Net/Index/NumericDocValuesWriter.cs b/src/Lucene.Net/Index/NumericDocValuesWriter.cs
index 81d613cd8..42a3add2c 100644
--- a/src/Lucene.Net/Index/NumericDocValuesWriter.cs
+++ b/src/Lucene.Net/Index/NumericDocValuesWriter.cs
@@ -102,7 +102,7 @@ public override void Flush(SegmentWriteState state, DocValuesConsumer dvConsumer
private IEnumerable<long?> GetNumericIterator(int maxDoc)
{
// LUCENENET specific: using yield return instead of custom iterator type. Much less code.
- AbstractAppendingInt64Buffer.Iterator iter = pending.GetIterator();
+ using var enumerator = pending.GetEnumerator();
int size = (int)pending.Count;
int upto = 0;
@@ -111,7 +111,8 @@ public override void Flush(SegmentWriteState state, DocValuesConsumer dvConsumer
long? value;
if (upto < size)
{
- var v = iter.Next();
+ enumerator.MoveNext();
+ var v = enumerator.Current;
if (docsWithField is null || docsWithField.Get(upto))
{
value = v;
diff --git a/src/Lucene.Net/Index/SortedDocValuesWriter.cs b/src/Lucene.Net/Index/SortedDocValuesWriter.cs
index 61a14dbc9..c507d4ac8 100644
--- a/src/Lucene.Net/Index/SortedDocValuesWriter.cs
+++ b/src/Lucene.Net/Index/SortedDocValuesWriter.cs
@@ -123,16 +123,16 @@ public override void Flush(SegmentWriteState state, DocValuesConsumer dvConsumer
ordMap[sortedValues[ord]] = ord;
}
- dvConsumer.AddSortedField(fieldInfo, GetBytesRefEnumberable(valueCount, sortedValues),
+ dvConsumer.AddSortedField(fieldInfo, GetBytesRefEnumerable(valueCount, sortedValues),
// doc -> ord
- GetOrdsEnumberable(maxDoc, ordMap));
+ GetOrdsEnumerable(maxDoc, ordMap));
}
public override void Abort()
{
}
- private IEnumerable<BytesRef> GetBytesRefEnumberable(int valueCount, int[] sortedValues)
+ private IEnumerable<BytesRef> GetBytesRefEnumerable(int valueCount, int[] sortedValues)
{
var scratch = new BytesRef();
@@ -142,14 +142,15 @@ private IEnumerable<BytesRef> GetBytesRefEnumberable(int valueCount, int[] sorte
}
}
- private IEnumerable<long?> GetOrdsEnumberable(int maxDoc, int[] ordMap)
+ private IEnumerable<long?> GetOrdsEnumerable(int maxDoc, int[] ordMap)
{
- AppendingDeltaPackedInt64Buffer.Iterator iter = pending.GetIterator();
+ using var enumerator = pending.GetEnumerator();
if (Debugging.AssertsEnabled) Debugging.Assert(pending.Count == maxDoc);
for (int i = 0; i < maxDoc; ++i)
{
- int ord = (int)iter.Next();
+ enumerator.MoveNext();
+ int ord = (int)enumerator.Current;
yield return ord == -1 ? ord : ordMap[ord];
}
}
diff --git a/src/Lucene.Net/Index/SortedSetDocValuesWriter.cs b/src/Lucene.Net/Index/SortedSetDocValuesWriter.cs
index f91f1d0c7..dab77445e 100644
--- a/src/Lucene.Net/Index/SortedSetDocValuesWriter.cs
+++ b/src/Lucene.Net/Index/SortedSetDocValuesWriter.cs
@@ -202,13 +202,14 @@ private IEnumerable<BytesRef> GetValuesEnumerable(int valueCount, int[] sortedVa
[SuppressMessage("ReSharper", "AccessToStaticMemberViaDerivedType", Justification = "Matches Lucene")]
private IEnumerable<long?> GetOrdCountEnumerable(int maxDoc)
{
- AppendingDeltaPackedInt64Buffer.Iterator iter = pendingCounts.GetIterator();
+ using var enumerator = pendingCounts.GetEnumerator();
if (Debugging.AssertsEnabled) Debugging.Assert(pendingCounts.Count == maxDoc, "MaxDoc: {0}, pending.Count: {1}", maxDoc, pending.Count);
for (int docUpto = 0; docUpto < maxDoc; ++docUpto)
{
- yield return iter.Next();
+ enumerator.MoveNext();
+ yield return enumerator.Current;
}
}
@@ -216,8 +217,8 @@ private IEnumerable<BytesRef> GetValuesEnumerable(int valueCount, int[] sortedVa
private IEnumerable<long?> GetOrdsEnumerable(int[] ordMap, int maxCountPerDoc)
{
int currentUpTo = 0, currentLength = 0;
- AppendingPackedInt64Buffer.Iterator iter = pending.GetIterator();
- AppendingDeltaPackedInt64Buffer.Iterator counts = pendingCounts.GetIterator();
+ using var enumerator = pending.GetEnumerator();
+ using var counts = pendingCounts.GetEnumerator();
int[] cd = new int[maxCountPerDoc]; // LUCENENET specific - renamed from currentDoc to cd to prevent conflict
for (long ordUpto = 0; ordUpto < pending.Count; ++ordUpto)
@@ -226,10 +227,12 @@ private IEnumerable<BytesRef> GetValuesEnumerable(int valueCount, int[] sortedVa
{
// refill next doc, and sort remapped ords within the doc.
currentUpTo = 0;
- currentLength = (int)counts.Next();
+ counts.MoveNext();
+ currentLength = (int)counts.Current;
for (int j = 0; j < currentLength; j++)
{
- cd[j] = ordMap[(int)iter.Next()];
+ enumerator.MoveNext();
+ cd[j] = ordMap[(int)enumerator.Current];
}
Array.Sort(cd, 0, currentLength);
}
diff --git a/src/Lucene.Net/Util/Packed/AbstractAppendingLongBuffer.cs b/src/Lucene.Net/Util/Packed/AbstractAppendingLongBuffer.cs
index 25de497a4..3c0392761 100644
--- a/src/Lucene.Net/Util/Packed/AbstractAppendingLongBuffer.cs
+++ b/src/Lucene.Net/Util/Packed/AbstractAppendingLongBuffer.cs
@@ -1,5 +1,7 @@
using Lucene.Net.Diagnostics;
using System;
+using System.Collections;
+using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace Lucene.Net.Util.Packed
@@ -26,7 +28,8 @@ namespace Lucene.Net.Util.Packed
/// <para/>
/// NOTE: This was AbstractAppendingLongBuffer in Lucene
/// </summary>
- public abstract class AbstractAppendingInt64Buffer : Int64Values // LUCENENET NOTE: made public rather than internal because has public subclasses
+ public abstract class AbstractAppendingInt64Buffer : Int64Values, // LUCENENET NOTE: made public rather than internal because has public subclasses
+ IEnumerable<long> // LUCENENET specific
{
internal const int MIN_PAGE_SIZE = 64;
@@ -105,7 +108,7 @@ public void Add(long l)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal virtual void Grow(int newBlockCount)
{
- Array.Resize<PackedInt32s.Reader>(ref values, newBlockCount);
+ Array.Resize(ref values, newBlockCount);
}
internal abstract void PackPendingValues();
@@ -144,12 +147,16 @@ public int Get(long index, long[] arr, int off, int len)
/// <summary>
/// Return an iterator over the values of this buffer.
/// </summary>
- public virtual Iterator GetIterator()
+ public virtual Enumerator GetEnumerator()
{
- return new Iterator(this);
+ return new Enumerator(this);
}
- public sealed class Iterator
+ IEnumerator<long> IEnumerable<long>.GetEnumerator() => GetEnumerator();
+
+ IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
+
+ public sealed class Enumerator : IEnumerator<long>
{
private readonly AbstractAppendingInt64Buffer outerInstance;
@@ -157,20 +164,10 @@ public sealed class Iterator
internal int vOff, pOff;
internal int currentCount; // number of entries of the current page
- internal Iterator(AbstractAppendingInt64Buffer outerInstance)
+ internal Enumerator(AbstractAppendingInt64Buffer outerInstance)
{
this.outerInstance = outerInstance;
- vOff = pOff = 0;
- if (outerInstance.valuesOff == 0)
- {
- currentValues = outerInstance.pending;
- currentCount = outerInstance.pendingOff;
- }
- else
- {
- currentValues = new long[outerInstance.values[0].Count];
- FillValues();
- }
+ Reset(); // LUCENENET specific - moved from ctor
}
internal void FillValues()
@@ -191,15 +188,24 @@ internal void FillValues()
}
/// <summary>
- /// Whether or not there are remaining values. </summary>
- public bool HasNext => pOff < currentCount;
+ /// Gets the current value.
+ /// </summary>
+ public long Current { get; private set; }
+
+ object IEnumerator.Current => Current;
/// <summary>
- /// Return the next long in the buffer. </summary>
- public long Next()
+ /// Advances the enumerator to the next value.
+ /// </summary>
+ public bool MoveNext()
{
- if (Debugging.AssertsEnabled) Debugging.Assert(HasNext);
- long result = currentValues[pOff++];
+ if (pOff >= currentCount)
+ {
+ return false;
+ }
+
+ Current = currentValues[pOff++];
+
if (pOff == currentCount)
{
vOff += 1;
@@ -213,7 +219,33 @@ public long Next()
currentCount = 0;
}
}
- return result;
+
+ return true;
+ }
+
+ /// <summary>
+ /// Resets the enumerator to its initial position.
+ /// </summary>
+ public void Reset()
+ {
+ vOff = pOff = 0;
+ if (outerInstance.valuesOff == 0)
+ {
+ currentValues = outerInstance.pending;
+ currentCount = outerInstance.pendingOff;
+ }
+ else
+ {
+ currentValues = new long[outerInstance.values[0].Count];
+ FillValues();
+ }
+ }
+
+ /// <summary>
+ /// Dispose of the resources used by the <see cref="Enumerator"/>.
+ /// </summary>
+ public void Dispose()
+ {
}
}