Documentation Link: Here -> UintRanges
Tutorial: Managing and Querying Unsigned Integer Ranges
1. Introduction to UintRange
The UintRange
interface captures a range of unsigned integers using a start and end property. This is handy when representing intervals or spans of values.
2. Sorting and Merging Ranges
To sort a list of ranges and merge adjacent or overlapping ones:
Copy const ranges = UintRangeArray .From ([
{ start : 10 n , end : 20 n } ,
{ start : 5 n , end : 12 n } ,
{ start : 21 n , end : 25 n }
]);
ranges .sortAndMerge ();
console .log (ranges); // Expected: [{ start: 5n, end: 25n }]
3. Searching Within Ranges
To search for a specific ID within a list of ranges and return its index and a boolean indicating if it was found:
Copy const idToSearch = 15 n ;
const [ index , isFound ] = ragnes .search (idToSearch)
console .log ( `Index: ${ index } , Found: ${ isFound } ` );
4. Inverting Ranges
To invert a list of ranges between a minimum and maximum ID:
Copy ranges .invert ( 1 n , 30 n );
console .log (invertedRanges); // This would show the gaps between the given ranges within the specified bounds.
5. Removing One Range From Another
To remove one range from another and also get the removed part:
Copy const rangesToRemove = [{ start : 10 n , end : 20 n }];
ranges .remove (rangesToRemove);
console .log ( "Remaining:" , ranges);
const [ inCurrButNotOther , overlaps , inOtherButNotCurr ] = ranges .getOverlapDetails (rangesToRemove)
6. Checking for Overlaps
To determine if there are overlaps within a list of ranges:
Copy const overlaps = ranges .overlaps ([{ ... }]);
console .log ( `Ranges Overlap: ${ overlappingCheck } ` );
Conclusion
The functions provided offer a comprehensive toolkit for managing and querying unsigned integer ranges. Whether you're checking for overlaps, inverting ranges, or removing specific integers from a range, you now have the tools to do it efficiently and systematically.
Copy import { GO_MAX_UINT_64 , UintRange , UintRangeArray } from 'bitbadgesjs-sdk'
//Singular range functions
const range = new UintRange < bigint >({ start : 1 n , end : 10 n })
const size = range .size () //10n
const fullRange = UintRange .FullRange () // 1n - GO_MAX_UINT_64
const isFull = fullRange .isFull ()
const inverted = range .invert () // 11n - GO_MAX_UINT_64
const overlaps = range .overlaps (inverted) // false
const doesFiveExist = range .search ( 5 n ) // true
const overlapDetails = range.getOverlapDetails(fullRange) // [[], [{ start: 1n, end: 10n }], [{ start: 11n, end: GO_MAX_UINT_64 }]]
const overlappingRanges = range .getOverlaps (fullRange) // [{ start: 1n, end: 10n }]
const rangeArr = UintRangeArray .From < bigint >([{ start : 1 n , end : 10 n } , { start : 11 n , end : 20 n }])
const rangeArrSize = rangeArr .size () // 20n
const rangeArrFull = UintRangeArray .FullRanges () // 1n - GO_MAX_UINT_64
const rangeArrIsFull = rangeArrFull .isFull ()
const rangeArrInverted = rangeArr .toInverted ({ start : 1 n , end : GO_MAX_UINT_64 }) // 21n - GO_MAX_UINT_64
const unsortedArr = UintRangeArray .From < bigint >([{ start : 11 n , end : 20 n } , { start : 1 n , end : 15 n }])
const hasOverlaps = unsortedArr .hasOverlaps () // true
unsortedArr .sortAndMerge () // [{ start: 1n, end: 20n }]
const sortedArr = unsortedArr .clone ()
const [inCurrButNotOther, overlaps, inOtherButNotCurr] = sortedArr.getOverlapDetails(unsortedArr) // [[], [{ start: 1n, end: 20n }], []]
sortedArr .remove ({ start : 1 n , end : 10 n }) // [{ start: 11n, end: 20n }]
const [ idx , found ] = sortedArr .search ( 11 n ) // [0n, true]
const exists = sortedArr .searchIfExists ( 11 n ) // true
const index = sortedArr .searchIndex ( 11 n ) // 0n
Last updated 3 months ago