Documentation ¶
Overview ¶
Package bitutil 该文件定义了若干对01比特的操作方法:
- 异或运算
- 与运算
- 或运算
- 检查给定字节切片中是否存在值为非0的字节
Package bitutil 该文件定义了对字节切片进行解压缩的方法:
- 压缩:CompressBytes
- 解压:DecompressBytes
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ANDBytes ¶
ANDBytes ♏ |作者:吴翔宇| 🍁 |日期:2022/10/27|
ANDBytes 方法接受3个入参,分别是dst、a、b三个字节切片,该方法实现对给定的a、b两个字节切片进行与运算,并将结果 存储到dst中,如果运行该方法的计算机架构属于{386、amd64、ppc64、ppc64le、s390x}这其中的某一个,则执行快速算 法 fastANDBytes 来进行与运算,否则采用常规的算法 safeANDBytes。该方法的返回值表示对a或b中多少个字节进行了与 运算。
例如:输入a=[12 34 28] b=[3 67 98 55],经过运算,dst=[0 2 0] 12 xor 3 -> 1100 & 0011 -> 0000 -> 0 34 xor 67 -> 0100010 & 1000011 -> 0000010 -> 2 28 xor 98 -> 0011100 & 1100010 -> 0000000 -> 0
func CompressBytes ¶
CompressBytes ♏ |作者:吴翔宇| 🍁 |日期:2022/10/28|
CompressBytes 调用 bitsetEncodeBytes 方法实现对给定字节切片进行压缩,压缩过程分三种情况:
- 如果给定的data是一个空切片,压缩结果就是nil
- 如果给定的data长度等于1,并且里面唯一的字节等于0,压缩结果就是nil,否则就是data本身
- 如果给定的data长度大于1,那么压缩结果的结构如下 |...|标记nonZeroBitset_1中非0字节位置的比特数组nonZeroBitset_2|标记data中非0字节位置的比特数组nonZeroBitset_1|data中非0字节拼接在一起| 例如data是一个长度为32的字节切片,它的第4、14、24下标处的值分别等于1、2、3,其余位置的值都等于0,即 data = [0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0] 压缩结果:[208 1 2 128 1 2 3]
func DecompressBytes ¶
DecompressBytes ♏ |作者:吴翔宇| 🍁 |日期:2022/10/28|
DecompressBytes 方法接受两个参数,第一个参数是经过压缩后的字节切片,第二个参数表示压缩前原始字节切片的长度, 该方法实际上是调用 bitsetDecodePartialBytes 方法来解压数据。
func ORBytes ¶
ORBytes ♏ |作者:吴翔宇| 🍁 |日期:2022/10/27|
ORBytes 方法接受3个入参,分别是dst、a、b三个字节切片,该方法实现对给定的a、b两个字节切片进行或运算,并将结果 存储到dst中,如果运行该方法的计算机架构属于{386、amd64、ppc64、ppc64le、s390x}这其中的某一个,则执行快速算 法 fastORBytes 来进行与运算,否则采用常规的算法 safeORBytes。该方法的返回值表示对a或b中多少个字节进行了或 运算。
例如:输入a=[12 34 28] b=[3 67 98 55],经过运算,dst=[15 99 126] 12 xor 3 -> 1100 | 0011 -> 0000 -> 15 34 xor 67 -> 0100010 | 1000011 -> 0000010 -> 99 28 xor 98 -> 0011100 | 1100010 -> 0000000 -> 126
func TestBytes ¶
TestBytes ♏ |作者:吴翔宇| 🍁 |日期:2022/10/27|
TestBytes 方法接受一个字节切片p作为输入参数,该方法实现对给定的字节切片p进行检查,判断p中 是否存在值为非0的字节,如果存在,直接返回true,否则返回false。如果运行该方法的计算机架构属 于{386、amd64、ppc64、ppc64le、s390x}这其中的某一个,则执行快速算法 fastTestBytes 进行计算,否则采用常规的算法 safeTestBytes。
func XORBytes ¶
XORBytes ♏ |作者:吴翔宇| 🍁 |日期:2022/10/27|
XORBytes 方法接受三个入参,分别是dst、a、b三个字节切片,该方法实现对给定的a、b两个字节切片进行异或运算,并将结果 存储到dst中,如果运行该方法的计算机架构属于{386、amd64、ppc64、ppc64le、s390x}这其中的某一个,则执行快速算法 fastXORBytes 来进行异或运算,否则采用常规的算法 safeXORBytes。该方法的返回值表示对a或b中多少个字节进行了异或运算。
例如:输入a=[12 34 28] b=[3 67 98 55],经过运算,dst=[15 97 126] 12 xor 3 -> 1100 ^ 0011 -> 1111 -> 15 34 xor 67 -> 0100010 ^ 1000011 -> 1100001 -> 97 28 xor 98 -> 0011100 ^ 1100010 -> 1111110 -> 126
Types ¶
This section is empty.