Skip to content

Commit a29a5aa

Browse files
committed
Simplify initialize code
1 parent d8872b2 commit a29a5aa

File tree

1 file changed

+38
-64
lines changed

1 file changed

+38
-64
lines changed

src/Microsoft.Data.Analysis/NumberMathComputation.cs

Lines changed: 38 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,25 @@ protected void CumulativeApply(PrimitiveColumnContainer<T> column, Func<T, T, T>
169169
}
170170
}
171171

172+
protected T CalculateReduction(PrimitiveColumnContainer<T> column, Func<T, T, T> func, T startValue)
173+
{
174+
var ret = startValue;
175+
176+
for (int b = 0; b < column.Buffers.Count; b++)
177+
{
178+
var buffer = column.Buffers[b].ReadOnlySpan;
179+
var bitMap = column.NullBitMapBuffers[b].ReadOnlySpan;
180+
for (int i = 0; i < buffer.Length; i++)
181+
{
182+
if (column.IsValid(bitMap, i))
183+
{
184+
ret = checked(func(ret, buffer[i]));
185+
}
186+
}
187+
}
188+
return ret;
189+
}
190+
172191
protected void CumulativeApply(PrimitiveColumnContainer<T> column, Func<T, T, T> func, IEnumerable<long> rows)
173192
{
174193
T ret = T.Zero;
@@ -179,27 +198,7 @@ protected void CumulativeApply(PrimitiveColumnContainer<T> column, Func<T, T, T>
179198
long maxCapacity = maxRange;
180199
IEnumerator<long> enumerator = rows.GetEnumerator();
181200

182-
bool isValid = false;
183-
while (!isValid && enumerator.MoveNext())
184-
{
185-
long row = enumerator.Current;
186-
if (row < minRange || row >= maxRange)
187-
{
188-
int bufferIndex = (int)(row / maxCapacity);
189-
buffer = column.Buffers.GetOrCreateMutable(bufferIndex).Span;
190-
bitmap = column.NullBitMapBuffers[bufferIndex].ReadOnlySpan;
191-
minRange = checked(bufferIndex * maxCapacity);
192-
maxRange = checked((bufferIndex + 1) * maxCapacity);
193-
}
194-
195-
row -= minRange;
196-
if (column.IsValid(bitmap, (int)row))
197-
{
198-
isValid = true;
199-
ret = buffer[(int)row];
200-
}
201-
}
202-
201+
bool isInitialized = false;
203202
while (enumerator.MoveNext())
204203
{
205204
long row = enumerator.Current;
@@ -215,30 +214,18 @@ protected void CumulativeApply(PrimitiveColumnContainer<T> column, Func<T, T, T>
215214
row -= minRange;
216215
if (column.IsValid(bitmap, (int)row))
217216
{
218-
ret = func(ret, buffer[(int)row]);
219-
buffer[(int)row] = ret;
220-
}
221-
}
222-
}
223-
224-
225-
protected T CalculateReduction(PrimitiveColumnContainer<T> column, Func<T, T, T> func, T startValue)
226-
{
227-
var ret = startValue;
228-
229-
for (int b = 0; b < column.Buffers.Count; b++)
230-
{
231-
var buffer = column.Buffers[b].ReadOnlySpan;
232-
var bitMap = column.NullBitMapBuffers[b].ReadOnlySpan;
233-
for (int i = 0; i < buffer.Length; i++)
234-
{
235-
if (column.IsValid(bitMap, i))
217+
if (!isInitialized)
236218
{
237-
ret = checked(func(ret, buffer[i]));
219+
isInitialized = true;
220+
ret = buffer[(int)row];
221+
}
222+
else
223+
{
224+
ret = func(ret, buffer[(int)row]);
225+
buffer[(int)row] = ret;
238226
}
239227
}
240228
}
241-
return ret;
242229
}
243230

244231
protected T CalculateReduction(PrimitiveColumnContainer<T> column, Func<T, T, T> func, IEnumerable<long> rows)
@@ -251,27 +238,7 @@ protected T CalculateReduction(PrimitiveColumnContainer<T> column, Func<T, T, T>
251238
long maxCapacity = maxRange;
252239
IEnumerator<long> enumerator = rows.GetEnumerator();
253240

254-
bool isValid = false;
255-
while (!isValid && enumerator.MoveNext())
256-
{
257-
long row = enumerator.Current;
258-
if (row < minRange || row >= maxRange)
259-
{
260-
int bufferIndex = (int)(row / maxCapacity);
261-
buffer = column.Buffers[bufferIndex].ReadOnlySpan;
262-
bitMap = column.NullBitMapBuffers[bufferIndex].ReadOnlySpan;
263-
minRange = checked(bufferIndex * maxCapacity);
264-
maxRange = checked((bufferIndex + 1) * maxCapacity);
265-
}
266-
row -= minRange;
267-
268-
if (column.IsValid(bitMap, (int)row))
269-
{
270-
isValid = true;
271-
ret = buffer[(int)row];
272-
}
273-
}
274-
241+
bool isInitialized = false;
275242
while (enumerator.MoveNext())
276243
{
277244
long row = enumerator.Current;
@@ -287,9 +254,16 @@ protected T CalculateReduction(PrimitiveColumnContainer<T> column, Func<T, T, T>
287254

288255
if (column.IsValid(bitMap, (int)row))
289256
{
290-
ret = checked(func(ret, buffer[(int)row]));
257+
if (!isInitialized)
258+
{
259+
isInitialized = true;
260+
ret = buffer[(int)row];
261+
}
262+
else
263+
{
264+
ret = checked(func(ret, buffer[(int)row]));
265+
}
291266
}
292-
293267
}
294268

295269
return ret;

0 commit comments

Comments
 (0)