@@ -13,20 +13,26 @@ namespace Arch.LowLevel.Jagged;
1313/// <typeparam name="T"></typeparam>
1414public record struct SparseBucket < T >
1515{
16-
1716 /// <summary>
1817 /// The items array.
1918 /// </summary>
2019 internal T [ ] Array = System . Array . Empty < T > ( ) ;
20+
21+ /// <summary>
22+ /// The filler, the default value.
23+ /// </summary>
24+ private readonly T _filler ;
2125
2226 /// <summary>
2327 /// Creates an instance of the <see cref="Bucket{T}"/>.
2428 /// </summary>
2529 /// <param name="capacity">The total capacity.</param>
30+ /// <param name="filler">The filler.</param>
2631 /// <param name="allocate">If it should allocate straight forward.</param>
27- public SparseBucket ( int capacity , bool allocate = false )
32+ public SparseBucket ( int capacity , T filler , bool allocate = false )
2833 {
2934 Capacity = capacity ;
35+ _filler = filler ;
3036 if ( allocate )
3137 {
3238 EnsureCapacity ( ) ;
@@ -79,6 +85,7 @@ internal void EnsureCapacity()
7985 }
8086
8187 Array = new T [ Capacity ] ;
88+ Clear ( ) ;
8289 }
8390
8491 /// <summary>
@@ -106,12 +113,12 @@ public ref T this[int i]
106113 }
107114
108115 /// <summary>
109- /// Clears this <see cref="SparseBucket{T}"/> and sets all values to the <see cref="filler "/>.
116+ /// Clears this <see cref="SparseBucket{T}"/> and sets all values to the <see cref="_filler "/>.
110117 /// </summary>
111118 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
112- public void Clear ( T filler = default )
119+ public void Clear ( )
113120 {
114- System . Array . Fill ( Array , filler ) ;
121+ System . Array . Fill ( Array , _filler ) ;
115122 }
116123}
117124
@@ -165,9 +172,9 @@ public SparseJaggedArray(int bucketSize, int capacity = 64)
165172 // Fill buckets
166173 for ( var i = 0 ; i < _buckets . Length ; i ++ )
167174 {
168- var bucket = new SparseBucket < T > ( _bucketSize ) ;
175+ var bucket = new SparseBucket < T > ( _bucketSize , _filler ) ;
169176 SetBucket ( i , in bucket ) ;
170- bucket . Clear ( _filler ) ;
177+ bucket . Clear ( ) ;
171178 }
172179 }
173180
@@ -189,9 +196,9 @@ public SparseJaggedArray(int bucketSize, T filler, int capacity = 64) : this(buc
189196 // Fill buckets
190197 for ( var i = 0 ; i < _buckets . Length ; i ++ )
191198 {
192- var bucket = new SparseBucket < T > ( _bucketSize ) ;
199+ var bucket = new SparseBucket < T > ( _bucketSize , filler ) ;
193200 SetBucket ( i , in bucket ) ;
194- bucket . Clear ( _filler ) ;
201+ bucket . Clear ( ) ;
195202 }
196203 }
197204
@@ -363,9 +370,9 @@ public void EnsureCapacity(int newCapacity)
363370
364371 for ( var i = length ; i < _buckets . Length ; i ++ )
365372 {
366- var bucket = new SparseBucket < T > ( _bucketSize ) ;
373+ var bucket = new SparseBucket < T > ( _bucketSize , _filler ) ;
367374 SetBucket ( i , bucket ) ;
368- bucket . Clear ( _filler ) ;
375+ bucket . Clear ( ) ;
369376 }
370377 }
371378
@@ -457,7 +464,7 @@ public void Clear()
457464 continue ;
458465 }
459466
460- bucket . Clear ( _filler ) ;
467+ bucket . Clear ( ) ;
461468 }
462469 }
463470}
0 commit comments