@@ -55,6 +55,7 @@ internal sealed class SingleRange : IRingRangeInternal, IEquatable<SingleRange>,
5555 {
5656 [ Id ( 0 ) ]
5757 private readonly uint begin ;
58+
5859 [ Id ( 1 ) ]
5960 private readonly uint end ;
6061
@@ -105,7 +106,7 @@ public long RangeSize()
105106
106107 public override bool Equals ( object ? obj ) => Equals ( obj as SingleRange ) ;
107108
108- public override int GetHashCode ( ) => ( int ) ( begin ^ end ) ;
109+ public override int GetHashCode ( ) => HashCode . Combine ( GetType ( ) , begin , end ) ;
109110
110111 public override string ToString ( ) => begin == 0 && end == 0 ? "<(0 0], Size=x100000000, %Ring=100%>" : $ "{ this } ";
111112
@@ -175,7 +176,7 @@ public static class RangeFactory
175176 /// <summary>
176177 /// The ring size.
177178 /// </summary>
178- public const long RING_SIZE = ( ( long ) uint . MaxValue ) + 1 ;
179+ public const long RING_SIZE = ( long ) uint . MaxValue + 1 ;
179180
180181 /// <summary>
181182 /// Represents an empty range.
@@ -240,6 +241,7 @@ internal sealed class GeneralMultiRange : IRingRangeInternal, ISpanFormattable
240241 {
241242 [ Id ( 0 ) ]
242243 private readonly List < SingleRange > ranges ;
244+
243245 [ Id ( 1 ) ]
244246 private readonly long rangeSize ;
245247
@@ -319,7 +321,7 @@ private static SingleRange GetEquallyDividedSubRange(SingleRange singleRange, in
319321 for ( int i = 0 ; i < numSubRanges ; i ++ )
320322 {
321323 // (Begin, End]
322- uint end = ( unchecked ( start + portion ) ) ;
324+ uint end = unchecked ( start + portion ) ;
323325 // I want it to overflow on purpose. It will do the right thing.
324326 if ( remainder > 0 )
325327 {
@@ -333,11 +335,11 @@ private static SingleRange GetEquallyDividedSubRange(SingleRange singleRange, in
333335 throw new ArgumentException ( nameof ( mySubRangeIndex ) ) ;
334336 }
335337
336- // Takes a range and devides it into numSubRanges equal ranges and returns the subrange at mySubRangeIndex.
338+ // Takes a range and divides it into numSubRanges equal ranges and returns the subrange at mySubRangeIndex.
337339 public static IRingRange GetEquallyDividedSubRange ( IRingRange range , int numSubRanges , int mySubRangeIndex )
338340 {
339- if ( numSubRanges <= 0 ) throw new ArgumentException ( nameof ( numSubRanges ) ) ;
340- if ( ( uint ) mySubRangeIndex >= ( uint ) numSubRanges ) throw new ArgumentException ( nameof ( mySubRangeIndex ) ) ;
341+ if ( numSubRanges <= 0 ) throw new ArgumentOutOfRangeException ( nameof ( numSubRanges ) ) ;
342+ if ( ( uint ) mySubRangeIndex >= ( uint ) numSubRanges ) throw new ArgumentOutOfRangeException ( nameof ( mySubRangeIndex ) ) ;
341343
342344 if ( numSubRanges == 1 ) return range ;
343345
@@ -358,7 +360,7 @@ public static IRingRange GetEquallyDividedSubRange(IRingRange range, int numSubR
358360 return new GeneralMultiRange ( singlesForThisIndex ) ;
359361 }
360362
361- default : throw new ArgumentException ( nameof ( range ) ) ;
363+ default : throw new ArgumentOutOfRangeException ( nameof ( range ) ) ;
362364 }
363365 }
364366 }
0 commit comments