The ability to work with compressed bitMap Flag storage with more native feel to that of arrays and ptrs, would greatly benefit the manipulation of massive data sets for index merging selections of large records indicating included or exclude from and index merging of multiple recordsets super fast, avoiding comparisons and lookup of records.
The simple concept of arrays Ptr + offset is a new memory address is the concept one like to natively accelerate, to reduce bit shifting.
So imaging a new set of brackets, called BitMap operator in programming languages.
BitMapPtr, is typically BitMapType, in the typing system can abstract away the stride after initialization.
Many of these can have underlying iterators and paging as par the hardware architecture to speed things up.
Operation Definitions:
BitMap to int
BitMapPtr{bitPos}
Converts the bit at the integer bit offset to a number.
Example:
BitMapPtr{8} = 8d or 1000b
BitMapPtr{1} = 1d or 0001b
BitMapPtr{0} = 1d or 0000b
BitMap to int, PageSize
BitMapPtr{bitPos, …[BitPageSizeOffset,...,..,..]}
Converts the bit at the integer bit offset to a number plus the bitPageSizeOffset
Example:
BitMapPtr{8,10} = 18d
BitMapPtr{1,20} = 11d
BitMapPtr{0,20} = 20d
BitMap Operator to Address
BitMapPtr+{bitPos, …[BitPageSizeOffset,...,..,...]}
Converts the bit at the integer bit offset to a number plus the bitPageSizeOffset
Example:
100{8,10} = 118d
200{1,20} = 211d
300{0,20} = 320d
BitMap Operator to Value at Address
*BitMapPtr{bitPos, …[BitPageSizeOffset,...,...,..]}
Converts the bit at the integer bit offset to a number plus the bitPageSizeOffset
Example:
*100{8,10} = value at addres location 118d
*200{1,20} = value at address location 211d
*300{0,20} = vlue at address location 320d
BitMap Operator assign Value to Address
*BitMapPtr{bitPos, …[BitPageSizeOffset,..,..,..,..]} = true | false
BitMap Operator assign Value to Address
*BitMapPtr{[BitPageSizeOffset]} = bitPos
BitMap Operator assign Value to Address
*BitMapPtr{bitPos, …[BitPageSizeOffset,..,...,..], stride = 2} = 3
BitMap Operator assign Value to Address
*BitMapPtr{bitPos,[BitPageSizeOffset,..,..,..], stride = 2} = bitValue
BitMap Left merge
*{BitMapPtr, stride = 2} <& *{BitMapPtr, stride = 2}
*{BitMapPtr, stride = 2} <& *{BitMapPtr, [BitPageOffset], stride = 2}
BitMap merge new result
*{BitMapPtr, stride = 4} = *{BitMapPtr, stride = 2} & *{BitMapPtr, stride = 2}
*{BitMapPtr, [PageOffsetStart,..,..,..], stride = 4} = *{BitMapPtr, [PageOffsetStart], [PageOffsetStop], stride = 2} & *{BitMapPtr, stride = 2}
BitMap add new result
*{BitMapPtr, [PageOffsetStart,..,..,..], stride = 4} = *{BitMapPtr, [PageOffsetStart], [PageOffsetStop], stride = 2} + *{BitMapPtr, [PageOffsetStart], [PageOffsetStop], stride = 2}
BitMap sub new result
*{BitMapPtr, stride = 4} = *{BitMapPtr, stride = 2} - *{BitMapPtr, stride = 1}
*{BitMapPtr, [PageOffsetStart], stride = 4} = *{BitMapPtr,[PageOffsetStart], [PageOffsetStop], stride = 2} - *{BitMapPtr,[PageOffsetStart], [PageOffsetStop], stride = 1}
BitMap sub new result
*{BitMapPtr, stride = 3} = *{BitMapPtr, stride = 1} - *{BitMapPtr, stride = 2}
*{BitMapPtr, [PageOffsetStart], stride = 3} = *{BitMapPtr, [PageOffsetStart], [PageOffsetStop], stride = 1} - *{BitMapPtr, [PageOffsetStart], [PageOffsetStop], stride = 2}
BitMap sub new result
*{BitMapPtr, stride = 4} = *{BitMapPtr, stride = 3} - *{BitMapPtr, stride = 1}
*{BitMapPtr, [PageOffsetStart], stride = 4} = *{BitMapPtr, [PageOffsetStart], [PageOffsetStop],stride = 3} - *{BitMapPtr,[PageOffsetStart], [PageOffsetStop], stride = 1}
BitMap subset new result
*{BitMapPtr, stride = 3} = *{BitMapPtr, stride = 3} < *{BitMapPtr, stride = 1}
*{BitMapPtr, [PageOffsetStart], stride = 3} = *{BitMapPtr, [PageOffsetStart], [PageOffsetStop],stride = 3} < *{BitMapPtr,[PageOffsetStart], [PageOffsetStop], stride = 1}
BitMap Superset new result, keeps the commond set awnsers
*{BitMapPtr, stride = 3} = *{BitMapPtr, stride = 3} > *{BitMapPtr, stride = 1}
*{BitMapPtr, [PageOffsetStart], stride = 3} = *{BitMapPtr, [PageOffsetStart], [PageOffsetStop],stride = 3} > *{BitMapPtr,[PageOffsetStart], [PageOffsetStop], stride = 1}
BitMap Superset/Subset in place leftover write result.
*{BitMapPtr, stride = 3} > *{BitMapPtr, stride = 1}
*{BitMapPtr, [PageOffsetStart], [PageOffsetStop],stride = 3} < *{BitMapPtr,[PageOffsetStart], [PageOffsetStop], stride = 1}