functionalscript 0.3.7 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/com/cpp/module.f.js +0 -1
- package/com/cs/module.f.js +5 -6
- package/com/rust/module.f.d.ts +3 -3
- package/com/rust/module.f.js +24 -29
- package/com/test/build.f.js +2 -2
- package/com/types/module.f.d.ts +1 -1
- package/com/types/module.f.js +1 -2
- package/com/types/testlib.f.js +0 -1
- package/commonjs/build/module.f.d.ts +2 -2
- package/commonjs/build/module.f.js +3 -6
- package/commonjs/build/test.f.js +0 -4
- package/commonjs/module/function/module.f.d.ts +1 -1
- package/commonjs/module/function/module.f.js +1 -1
- package/commonjs/module/module.f.d.ts +1 -1
- package/commonjs/module/module.f.js +2 -3
- package/commonjs/path/module.f.d.ts +5 -5
- package/commonjs/path/module.f.js +6 -8
- package/commonjs/path/test.f.js +1 -2
- package/crypto/prime_field/module.f.d.ts +1 -1
- package/crypto/prime_field/module.f.js +1 -1
- package/crypto/secp/module.f.d.ts +1 -1
- package/crypto/secp/module.f.js +2 -2
- package/crypto/sha2/module.f.d.ts +75 -12
- package/crypto/sha2/module.f.js +246 -139
- package/crypto/sha2/test.f.d.ts +22 -3
- package/crypto/sha2/test.f.js +120 -67
- package/dev/test/module.f.d.ts +1 -1
- package/dev/test/module.f.js +4 -5
- package/dev/test.f.js +0 -4
- package/djs/module.f.d.ts +1 -1
- package/djs/module.f.js +0 -1
- package/djs/parser/module.f.d.ts +1 -1
- package/djs/parser/module.f.js +0 -2
- package/djs/serializer/module.f.d.ts +2 -2
- package/djs/serializer/module.f.js +0 -2
- package/djs/tokenizer/module.f.js +0 -1
- package/fsc/test.f.js +0 -1
- package/js/tokenizer/module.f.d.ts +1 -1
- package/js/tokenizer/module.f.js +1 -1
- package/json/parser/module.f.d.ts +2 -2
- package/json/parser/module.f.js +0 -3
- package/json/serializer/module.f.js +0 -2
- package/json/tokenizer/module.f.js +0 -1
- package/package.json +1 -1
- package/text/ascii/module.f.d.ts +1 -1
- package/text/ascii/module.f.js +2 -3
- package/text/ascii/test.f.js +2 -4
- package/text/module.f.d.ts +18 -3
- package/text/module.f.js +22 -6
- package/text/sgr/module.f.js +1 -1
- package/text/test.f.d.ts +4 -1
- package/text/test.f.js +24 -16
- package/text/utf16/module.f.d.ts +5 -6
- package/text/utf16/module.f.js +9 -10
- package/text/utf16/test.f.js +29 -30
- package/text/utf8/module.f.d.ts +8 -5
- package/text/utf8/module.f.js +3 -5
- package/text/utf8/test.f.js +34 -35
- package/types/bigfloat/module.f.js +1 -1
- package/types/bigint/module.f.d.ts +36 -7
- package/types/bigint/module.f.js +40 -11
- package/types/bigint/test.f.d.ts +8 -0
- package/types/bigint/test.f.js +81 -2
- package/types/bit_vec/module.f.d.ts +103 -83
- package/types/bit_vec/module.f.js +68 -110
- package/types/bit_vec/test.f.d.ts +20 -8
- package/types/bit_vec/test.f.js +110 -117
- package/types/btree/find/module.f.d.ts +11 -10
- package/types/btree/find/module.f.js +1 -5
- package/types/btree/find/test.f.js +4 -6
- package/types/btree/module.f.d.ts +3 -3
- package/types/btree/module.f.js +2 -5
- package/types/btree/remove/module.f.d.ts +2 -2
- package/types/btree/remove/module.f.js +0 -3
- package/types/btree/remove/test.f.js +4 -7
- package/types/btree/set/module.f.d.ts +2 -2
- package/types/btree/set/module.f.js +2 -6
- package/types/btree/set/test.f.js +3 -6
- package/types/btree/test.f.js +9 -13
- package/types/btree/types/module.f.d.ts +1 -3
- package/types/byte_set/module.f.d.ts +3 -3
- package/types/byte_set/module.f.js +1 -4
- package/types/byte_set/test.f.js +2 -4
- package/types/function/compare/module.f.d.ts +1 -5
- package/types/function/compare/module.f.js +0 -1
- package/types/function/compare/test.f.js +1 -2
- package/types/function/module.f.d.ts +1 -1
- package/types/function/module.f.js +1 -1
- package/types/function/operator/module.f.d.ts +2 -3
- package/types/function/operator/module.f.js +5 -5
- package/types/function/test.f.js +1 -2
- package/types/list/module.f.d.ts +1 -1
- package/types/list/module.f.js +9 -9
- package/types/list/test.f.js +2 -4
- package/types/map/module.f.d.ts +7 -9
- package/types/map/module.f.js +6 -15
- package/types/map/test.f.js +3 -4
- package/types/nibble_set/module.f.d.ts +2 -3
- package/types/nibble_set/test.f.js +26 -27
- package/types/nullable/test.f.js +2 -2
- package/types/number/module.f.d.ts +2 -2
- package/types/number/module.f.js +1 -2
- package/types/number/test.f.js +1 -2
- package/types/object/module.f.d.ts +5 -5
- package/types/object/module.f.js +2 -4
- package/types/object/test.f.js +3 -3
- package/types/range/test.f.js +6 -6
- package/types/range_map/module.f.d.ts +8 -8
- package/types/range_map/module.f.js +3 -9
- package/types/range_map/test.f.js +2 -4
- package/types/result/module.f.d.ts +2 -3
- package/types/sorted_list/module.f.d.ts +8 -8
- package/types/sorted_list/module.f.js +2 -6
- package/types/sorted_list/test.f.js +12 -17
- package/types/sorted_set/module.f.d.ts +2 -2
- package/types/sorted_set/module.f.js +2 -5
- package/types/sorted_set/test.f.js +14 -19
- package/types/string/module.f.d.ts +5 -5
- package/types/string/module.f.js +2 -4
- package/types/string/test.f.js +2 -4
- package/types/string_set/module.f.d.ts +2 -2
- package/types/string_set/module.f.js +5 -11
- package/types/string_set/test.f.js +25 -25
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { type List, type Thunk } from '../list/module.f.ts';
|
|
1
2
|
/**
|
|
2
3
|
* A vector of bits represented as a `bigint`.
|
|
3
4
|
*/
|
|
4
|
-
type Vec = bigint;
|
|
5
|
+
export type Vec = bigint;
|
|
5
6
|
/**
|
|
6
7
|
* An empty vector of bits.
|
|
7
8
|
*/
|
|
@@ -22,6 +23,10 @@ export declare const length: (v: bigint) => bigint;
|
|
|
22
23
|
* ```
|
|
23
24
|
*/
|
|
24
25
|
export declare const vec: (len: bigint) => (ui: bigint) => Vec;
|
|
26
|
+
/**
|
|
27
|
+
* Creates an 8 bit vector from an unsigned integer.
|
|
28
|
+
*/
|
|
29
|
+
export declare const vec8: (u: bigint) => Vec;
|
|
25
30
|
/**
|
|
26
31
|
* Returns the unsigned integer of the given vector by removing a stop bit.
|
|
27
32
|
*
|
|
@@ -34,101 +39,116 @@ export declare const vec: (len: bigint) => (ui: bigint) => Vec;
|
|
|
34
39
|
*/
|
|
35
40
|
export declare const uint: (v: Vec) => bigint;
|
|
36
41
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
42
|
+
* Represents operations for handling bit vectors with a specific bit order.
|
|
40
43
|
*
|
|
41
|
-
*
|
|
42
|
-
* const vector = vec(8n)(0xF5n) // 0x1F5n
|
|
43
|
-
* const result = uintLsb(4n)(vector); // result is 5n
|
|
44
|
-
* const result2 = uintLsb(16n)(vector); // result2 is 0xF5n
|
|
45
|
-
* ```
|
|
44
|
+
* https://en.wikipedia.org/wiki/Bit_numbering
|
|
46
45
|
*/
|
|
47
|
-
export
|
|
46
|
+
export type BitOrder = {
|
|
47
|
+
/**
|
|
48
|
+
* Retrieves the first unsigned integer of the specified length from the given vector.
|
|
49
|
+
*
|
|
50
|
+
* @param len - The number of bits to read from the start of the vector.
|
|
51
|
+
* @returns A function that takes a vector and returns the extracted unsigned integer.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
*
|
|
55
|
+
* ```js
|
|
56
|
+
* const vector = vec(8n)(0xF5n) // 0x1F5n
|
|
57
|
+
*
|
|
58
|
+
* const resultL0 = lsb.front(4n)(vector) // resultL0 is 5n
|
|
59
|
+
* const resultL1 = lsb.front(16n)(vector) // resultL1 is 0xF5n
|
|
60
|
+
*
|
|
61
|
+
* const resultM0 = msb.front(4n)(vector) // resultM0 is 0xFn
|
|
62
|
+
* const resultM1 = msb.front(16n)(vector) // resultM1 is 0xF500n
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
readonly front: (len: bigint) => (v: Vec) => bigint;
|
|
66
|
+
/**
|
|
67
|
+
* Removes a specified number of bits from the start of the given vector.
|
|
68
|
+
*
|
|
69
|
+
* @param len - The number of bits to remove from the vector.
|
|
70
|
+
* @returns A function that takes a vector and returns the remaining vector.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
*
|
|
74
|
+
* ```js
|
|
75
|
+
* const v = vec(16n)(0x3456n) // 0x13456n
|
|
76
|
+
*
|
|
77
|
+
* const rL0 = lsb.removeFront(4n)(v) // 0x1345n
|
|
78
|
+
* const rL1 = lsb.removeFront(24n)(v) // 0x1n
|
|
79
|
+
*
|
|
80
|
+
* const rM0 = msb.removeFront(4n)(v) // 0x1456n
|
|
81
|
+
* const rM1 = msb.removeFront(24n)(v) // 0x1n
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
readonly removeFront: (len: bigint) => (v: Vec) => Vec;
|
|
85
|
+
/**
|
|
86
|
+
* Removes a specified number of bits from the start of the vector and returns
|
|
87
|
+
* the removed bits and the remaining vector.
|
|
88
|
+
*
|
|
89
|
+
* @param len - The number of bits to remove from the vector.
|
|
90
|
+
* @returns A function that takes a vector and returns
|
|
91
|
+
* a tuple containing the removed bits as an unsigned integer and the remaining vector.
|
|
92
|
+
*
|
|
93
|
+
* ```js
|
|
94
|
+
* const vector = vec(8n)(0xF5n) // 0x1F5n
|
|
95
|
+
*
|
|
96
|
+
* const [uL0, rL0] = lsb.popFront(4n)(vector) // [5n, 0x1Fn]
|
|
97
|
+
* const [uL1, rL1] = lsb.popFront(16n)(vector) // [0xF5n, 1n]
|
|
98
|
+
*
|
|
99
|
+
* const [uM0, rM0] = msb.popFront(4n)(vector) // [0xFn, 0x15n]
|
|
100
|
+
* const [uM1, rM1] = msb.popFront(16n)(vector) // [0xF500n, 1n]
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
readonly popFront: (len: bigint) => (v: Vec) => readonly [bigint, Vec];
|
|
104
|
+
/**
|
|
105
|
+
* Concatenates two vectors.
|
|
106
|
+
*
|
|
107
|
+
* @param a - The first vector.
|
|
108
|
+
* @returns A function that takes a second vector and returns the concatenated vector.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
*
|
|
112
|
+
* ```js
|
|
113
|
+
* const u8 = vec(8n)
|
|
114
|
+
* const a = u8(0x45n) // 0x145n
|
|
115
|
+
* const b = u8(0x89n) // 0x189n
|
|
116
|
+
*
|
|
117
|
+
* const abL = lsb.concat(a)(b) // 0x18945n
|
|
118
|
+
* const abM = msb.concat(a)(b) // 0x14589n
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
readonly concat: (a: Vec) => (b: Vec) => Vec;
|
|
122
|
+
};
|
|
48
123
|
/**
|
|
49
|
-
*
|
|
124
|
+
* Implements operations for handling vectors in a least-significant-bit (LSb) first order.
|
|
50
125
|
*
|
|
51
|
-
*
|
|
126
|
+
* https://en.wikipedia.org/wiki/Bit_numbering#LSb_0_bit_numbering
|
|
52
127
|
*
|
|
53
|
-
*
|
|
54
|
-
* const v = vec(16n)(0x3456n) // 0x13456n
|
|
55
|
-
* const r = removeLsb(4n)(v) // 0x1345n
|
|
56
|
-
* const r2 = removeLsb(24n)(v) // 0x1n
|
|
57
|
-
* ```
|
|
128
|
+
* Usually associated with Little-Endian (LE) byte order.
|
|
58
129
|
*/
|
|
59
|
-
export declare const
|
|
130
|
+
export declare const lsb: BitOrder;
|
|
60
131
|
/**
|
|
61
|
-
*
|
|
132
|
+
* Implements operations for handling vectors in a most-significant-bit (MSb) first order.
|
|
62
133
|
*
|
|
63
|
-
*
|
|
134
|
+
* https://en.wikipedia.org/wiki/Bit_numbering#MSb_0_bit_numbering
|
|
64
135
|
*
|
|
65
|
-
*
|
|
66
|
-
* const vector = vec(8n)(0xF5n) // 0x1F5n
|
|
67
|
-
* const [result, rest] = popUintLsb(4n)(vector); // result is 5n, rest is 0x1Fn
|
|
68
|
-
* const [result2, rest2] = popUintLsb(16n)(vector); // result2 is 0xF5n, rest2 is 1n
|
|
69
|
-
* ```
|
|
136
|
+
* Usually associated with Big-Endian (BE) byte order.
|
|
70
137
|
*/
|
|
71
|
-
export declare const
|
|
138
|
+
export declare const msb: BitOrder;
|
|
72
139
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
* @example
|
|
140
|
+
* Converts a list of unsigned 8-bit integers to a bit vector.
|
|
76
141
|
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* const result2 = uintMsb(16n)(vector); // result2 is 0xF500n
|
|
81
|
-
* ```
|
|
142
|
+
* @param bo The bit order for the conversion
|
|
143
|
+
* @param list The list of unsigned 8-bit integers to be converted.
|
|
144
|
+
* @returns The resulting vector based on the provided bit order.
|
|
82
145
|
*/
|
|
83
|
-
export declare const
|
|
146
|
+
export declare const u8ListToVec: (bo: BitOrder) => (list: List<number>) => Vec;
|
|
84
147
|
/**
|
|
85
|
-
*
|
|
148
|
+
* Converts a bit vector to a list of unsigned 8-bit integers based on the provided bit order.
|
|
86
149
|
*
|
|
87
|
-
* @
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* const v = vec(16n)(0x3456n) // 0x13456n
|
|
91
|
-
* const r = removeMsb(4n)(v) // 0x1456n
|
|
92
|
-
* const r2 = removeMsb(24n)(v) // 0x1n
|
|
93
|
-
* ```
|
|
94
|
-
*/
|
|
95
|
-
export declare const removeMsb: (len: bigint) => (v: Vec) => Vec;
|
|
96
|
-
/**
|
|
97
|
-
* Extracts the most significant unsigned integer and removes it from the vector.
|
|
98
|
-
*
|
|
99
|
-
* @example
|
|
100
|
-
*
|
|
101
|
-
* ```js
|
|
102
|
-
* const vector = vec(8n)(0xF5n) // 0x1F5n
|
|
103
|
-
* const [result, rest] = popUintMsb(4n)(vector); // [0xFn, 0x15n]
|
|
104
|
-
* const [result2, rest2] = popUintMsb(16n)(vector); // [0xF500n, 1n]
|
|
105
|
-
* ```
|
|
106
|
-
*/
|
|
107
|
-
export declare const popUintMsb: (len: bigint) => (v: Vec) => readonly [bigint, Vec];
|
|
108
|
-
/**
|
|
109
|
-
* Concat the given vectors of bits. The first vector is the least significant.
|
|
110
|
-
*
|
|
111
|
-
* @example
|
|
112
|
-
*
|
|
113
|
-
* ```js
|
|
114
|
-
* const u8 = vec(8n)
|
|
115
|
-
* const a = u8(0x45n) // 0x145n
|
|
116
|
-
* const b = u8(0x89n) // 0x189n
|
|
117
|
-
* const ab = concatLsb(a)(b) // 0x18945n
|
|
118
|
-
* ```
|
|
119
|
-
*/
|
|
120
|
-
export declare const concatLsb: (a: Vec) => (b: Vec) => Vec;
|
|
121
|
-
/**
|
|
122
|
-
* Concat the given vectors of bits. The first vector is the most significant.
|
|
123
|
-
*
|
|
124
|
-
* @example
|
|
125
|
-
*
|
|
126
|
-
* ```js
|
|
127
|
-
* const u8 = vec(8n)
|
|
128
|
-
* const a = u8(0x45n) // 0x145n
|
|
129
|
-
* const b = u8(0x89n) // 0x189n
|
|
130
|
-
* const ab = concatMsb(a)(b) // 0x14589n
|
|
131
|
-
* ```
|
|
150
|
+
* @param bitOrder The bit order for the conversion.
|
|
151
|
+
* @param v The vector to be converted.
|
|
152
|
+
* @returns A thunk that produces a list of unsigned 8-bit integers.
|
|
132
153
|
*/
|
|
133
|
-
export declare const
|
|
134
|
-
export {};
|
|
154
|
+
export declare const u8List: ({ popFront }: BitOrder) => (v: Vec) => Thunk<number>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { log2 } from "../bigint/module.f.js";
|
|
1
|
+
import { log2, mask } from "../bigint/module.f.js";
|
|
2
2
|
import { flip } from "../function/module.f.js";
|
|
3
|
+
import { fold } from "../list/module.f.js";
|
|
3
4
|
/**
|
|
4
5
|
* An empty vector of bits.
|
|
5
6
|
*/
|
|
@@ -27,7 +28,10 @@ export const vec = (len) => {
|
|
|
27
28
|
const mask = stop - 1n;
|
|
28
29
|
return data => stop | (data & mask);
|
|
29
30
|
};
|
|
30
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Creates an 8 bit vector from an unsigned integer.
|
|
33
|
+
*/
|
|
34
|
+
export const vec8 = vec(8n);
|
|
31
35
|
/**
|
|
32
36
|
* Returns the unsigned integer of the given vector by removing a stop bit.
|
|
33
37
|
*
|
|
@@ -40,128 +44,82 @@ const mask = (len) => (1n << len) - 1n;
|
|
|
40
44
|
*/
|
|
41
45
|
export const uint = (v) => v ^ (1n << length(v));
|
|
42
46
|
/**
|
|
43
|
-
*
|
|
47
|
+
* Implements operations for handling vectors in a least-significant-bit (LSb) first order.
|
|
44
48
|
*
|
|
45
|
-
*
|
|
49
|
+
* https://en.wikipedia.org/wiki/Bit_numbering#LSb_0_bit_numbering
|
|
46
50
|
*
|
|
47
|
-
*
|
|
48
|
-
* const vector = vec(8n)(0xF5n) // 0x1F5n
|
|
49
|
-
* const result = uintLsb(4n)(vector); // result is 5n
|
|
50
|
-
* const result2 = uintLsb(16n)(vector); // result2 is 0xF5n
|
|
51
|
-
* ```
|
|
51
|
+
* Usually associated with Little-Endian (LE) byte order.
|
|
52
52
|
*/
|
|
53
|
-
export const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
*
|
|
80
|
-
* ```js
|
|
81
|
-
* const vector = vec(8n)(0xF5n) // 0x1F5n
|
|
82
|
-
* const [result, rest] = popUintLsb(4n)(vector); // result is 5n, rest is 0x1Fn
|
|
83
|
-
* const [result2, rest2] = popUintLsb(16n)(vector); // result2 is 0xF5n, rest2 is 1n
|
|
84
|
-
* ```
|
|
85
|
-
*/
|
|
86
|
-
export const popUintLsb = (len) => {
|
|
87
|
-
const m = mask(len);
|
|
88
|
-
return v => {
|
|
89
|
-
const result = v & m;
|
|
90
|
-
return result === v ? [uint(v), empty] : [result, v >> len];
|
|
91
|
-
};
|
|
53
|
+
export const lsb = {
|
|
54
|
+
front: len => {
|
|
55
|
+
const m = mask(len);
|
|
56
|
+
return v => {
|
|
57
|
+
const result = v & m;
|
|
58
|
+
return result === v ? uint(v) : result;
|
|
59
|
+
};
|
|
60
|
+
},
|
|
61
|
+
removeFront: len => v => {
|
|
62
|
+
const r = v >> len;
|
|
63
|
+
return r === 0n ? empty : r;
|
|
64
|
+
},
|
|
65
|
+
popFront: len => {
|
|
66
|
+
const m = mask(len);
|
|
67
|
+
return v => {
|
|
68
|
+
const result = v & m;
|
|
69
|
+
return result === v ? [uint(v), empty] : [result, v >> len];
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
concat: a => {
|
|
73
|
+
const aLen = length(a);
|
|
74
|
+
const m = mask(aLen);
|
|
75
|
+
return b => (b << aLen) | (a & m);
|
|
76
|
+
}
|
|
92
77
|
};
|
|
93
78
|
/**
|
|
94
|
-
*
|
|
79
|
+
* Implements operations for handling vectors in a most-significant-bit (MSb) first order.
|
|
95
80
|
*
|
|
96
|
-
*
|
|
81
|
+
* https://en.wikipedia.org/wiki/Bit_numbering#MSb_0_bit_numbering
|
|
97
82
|
*
|
|
98
|
-
*
|
|
99
|
-
* const vector = vec(8n)(0xF5n) // 0x1F5n
|
|
100
|
-
* const result = uintMsb(4n)(vector); // result is 0xFn
|
|
101
|
-
* const result2 = uintMsb(16n)(vector); // result2 is 0xF500n
|
|
102
|
-
* ```
|
|
83
|
+
* Usually associated with Big-Endian (BE) byte order.
|
|
103
84
|
*/
|
|
104
|
-
export const
|
|
105
|
-
|
|
106
|
-
|
|
85
|
+
export const msb = {
|
|
86
|
+
front: len => {
|
|
87
|
+
const m = mask(len);
|
|
88
|
+
return v => (v >> (length(v) - len)) & m;
|
|
89
|
+
},
|
|
90
|
+
removeFront: len => v => vec(length(v) - len)(v),
|
|
91
|
+
popFront: len => {
|
|
92
|
+
const m = mask(len);
|
|
93
|
+
return v => {
|
|
94
|
+
const d = length(v) - len;
|
|
95
|
+
return [(v >> d) & m, vec(d)(v)];
|
|
96
|
+
};
|
|
97
|
+
},
|
|
98
|
+
concat: flip(lsb.concat)
|
|
107
99
|
};
|
|
100
|
+
const appendU8 = ({ concat }) => (u8) => (a) => concat(a)(vec8(BigInt(u8)));
|
|
108
101
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* @example
|
|
102
|
+
* Converts a list of unsigned 8-bit integers to a bit vector.
|
|
112
103
|
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
* const r2 = removeMsb(24n)(v) // 0x1n
|
|
117
|
-
* ```
|
|
104
|
+
* @param bo The bit order for the conversion
|
|
105
|
+
* @param list The list of unsigned 8-bit integers to be converted.
|
|
106
|
+
* @returns The resulting vector based on the provided bit order.
|
|
118
107
|
*/
|
|
119
|
-
export const
|
|
108
|
+
export const u8ListToVec = (bo) => fold(appendU8(bo))(empty);
|
|
120
109
|
/**
|
|
121
|
-
*
|
|
110
|
+
* Converts a bit vector to a list of unsigned 8-bit integers based on the provided bit order.
|
|
122
111
|
*
|
|
123
|
-
* @
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
* const vector = vec(8n)(0xF5n) // 0x1F5n
|
|
127
|
-
* const [result, rest] = popUintMsb(4n)(vector); // [0xFn, 0x15n]
|
|
128
|
-
* const [result2, rest2] = popUintMsb(16n)(vector); // [0xF500n, 1n]
|
|
129
|
-
* ```
|
|
112
|
+
* @param bitOrder The bit order for the conversion.
|
|
113
|
+
* @param v The vector to be converted.
|
|
114
|
+
* @returns A thunk that produces a list of unsigned 8-bit integers.
|
|
130
115
|
*/
|
|
131
|
-
export const
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
116
|
+
export const u8List = ({ popFront }) => {
|
|
117
|
+
const f = (v) => () => {
|
|
118
|
+
if (v === empty) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
const [first, tail] = popFront(8n)(v);
|
|
122
|
+
return { first: Number(first), tail: f(tail) };
|
|
136
123
|
};
|
|
124
|
+
return f;
|
|
137
125
|
};
|
|
138
|
-
/**
|
|
139
|
-
* Concat the given vectors of bits. The first vector is the least significant.
|
|
140
|
-
*
|
|
141
|
-
* @example
|
|
142
|
-
*
|
|
143
|
-
* ```js
|
|
144
|
-
* const u8 = vec(8n)
|
|
145
|
-
* const a = u8(0x45n) // 0x145n
|
|
146
|
-
* const b = u8(0x89n) // 0x189n
|
|
147
|
-
* const ab = concatLsb(a)(b) // 0x18945n
|
|
148
|
-
* ```
|
|
149
|
-
*/
|
|
150
|
-
export const concatLsb = (a) => {
|
|
151
|
-
const aLen = length(a);
|
|
152
|
-
const m = mask(aLen);
|
|
153
|
-
return b => (b << aLen) | (a & m);
|
|
154
|
-
};
|
|
155
|
-
/**
|
|
156
|
-
* Concat the given vectors of bits. The first vector is the most significant.
|
|
157
|
-
*
|
|
158
|
-
* @example
|
|
159
|
-
*
|
|
160
|
-
* ```js
|
|
161
|
-
* const u8 = vec(8n)
|
|
162
|
-
* const a = u8(0x45n) // 0x145n
|
|
163
|
-
* const b = u8(0x89n) // 0x189n
|
|
164
|
-
* const ab = concatMsb(a)(b) // 0x14589n
|
|
165
|
-
* ```
|
|
166
|
-
*/
|
|
167
|
-
export const concatMsb = flip(concatLsb);
|
|
@@ -2,14 +2,26 @@ declare const _default: {
|
|
|
2
2
|
examples: {
|
|
3
3
|
vec: () => void;
|
|
4
4
|
uint: () => void;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
front: () => void;
|
|
6
|
+
removeFront: () => void;
|
|
7
|
+
popFront: () => void;
|
|
8
|
+
concat: () => void;
|
|
9
|
+
};
|
|
10
|
+
front: {
|
|
11
|
+
lsbf: () => void;
|
|
12
|
+
msbf: () => void;
|
|
13
|
+
};
|
|
14
|
+
popFront: {
|
|
15
|
+
lsbm: () => void;
|
|
16
|
+
msbm: () => void;
|
|
17
|
+
};
|
|
18
|
+
removeFront: {
|
|
19
|
+
lsbm: () => void;
|
|
20
|
+
msbm: () => void;
|
|
21
|
+
};
|
|
22
|
+
concat: {
|
|
23
|
+
lsbm: () => void;
|
|
24
|
+
msbm: () => void;
|
|
13
25
|
};
|
|
14
26
|
uintLsb: () => void;
|
|
15
27
|
uintSmall: () => void;
|