zeck 2.0.0 → 2.1.0
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/package.json +3 -2
- package/zeck.d.ts +175 -16
- package/zeck_bg.js +218 -16
- package/zeck_bg.wasm +0 -0
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"Peter Ryszkiewicz"
|
|
6
6
|
],
|
|
7
7
|
"description": "A Rust library for compressing and decompressing data using the Zeckendorf representation algorithm",
|
|
8
|
-
"version": "2.
|
|
8
|
+
"version": "2.1.0",
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
"zeck_bg.wasm",
|
|
16
16
|
"zeck.js",
|
|
17
17
|
"zeck_bg.js",
|
|
18
|
-
"zeck.d.ts"
|
|
18
|
+
"zeck.d.ts",
|
|
19
|
+
"LICENSE.txt"
|
|
19
20
|
],
|
|
20
21
|
"main": "zeck.js",
|
|
21
22
|
"types": "zeck.d.ts",
|
package/zeck.d.ts
CHANGED
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
/* tslint:disable */
|
|
2
2
|
/* eslint-disable */
|
|
3
|
+
/**
|
|
4
|
+
* Represents a .zeck file with its header information and compressed data.
|
|
5
|
+
*
|
|
6
|
+
* This struct holds all the information needed to reconstruct a .zeck file,
|
|
7
|
+
* including the format version, original file size, endianness flags, and
|
|
8
|
+
* the compressed data itself.
|
|
9
|
+
*/
|
|
10
|
+
export interface ZeckFile {
|
|
11
|
+
/**
|
|
12
|
+
* File format version
|
|
13
|
+
*/
|
|
14
|
+
version: number;
|
|
15
|
+
/**
|
|
16
|
+
* Original uncompressed file size in bytes
|
|
17
|
+
*/
|
|
18
|
+
original_size: number;
|
|
19
|
+
/**
|
|
20
|
+
* Flags byte (bit 0 = big endian, bits 1-7 reserved)
|
|
21
|
+
*/
|
|
22
|
+
flags: number;
|
|
23
|
+
/**
|
|
24
|
+
* Compressed data (without header)
|
|
25
|
+
*/
|
|
26
|
+
compressed_data: number[];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Result of best compression attempt, containing the best compressed zeck file and the size for the other endianness attempt, or if neither produced compression (both were larger than the original).
|
|
31
|
+
*/
|
|
32
|
+
export type BestCompressionResult = { BigEndianBest: { zeck_file: ZeckFile; le_size: number } } | { LittleEndianBest: { zeck_file: ZeckFile; be_size: number } } | { Neither: { be_size: number; le_size: number } };
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Errors that can occur when parsing or processing .zeck files.
|
|
36
|
+
*/
|
|
37
|
+
export type ZeckFormatError = { HeaderTooShort: { actual_length: number; required_length: number } } | { UnsupportedVersion: { found_version: number; supported_version: number } } | { ReservedFlagsSet: { flags: number } } | { CompressionFailed: { original_size: number; be_size: number; le_size: number } } | { DecompressedTooLarge: { expected_size: number; actual_size: number } } | { DataSizeTooLarge: { size: number } };
|
|
38
|
+
|
|
3
39
|
|
|
4
40
|
/**
|
|
5
41
|
* Returns the number of bits required to represent the given number. Returns 0 if the number is less than or equal to 0.
|
|
@@ -17,6 +53,129 @@
|
|
|
17
53
|
*/
|
|
18
54
|
export function bit_count_for_number(n: number): number;
|
|
19
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Compresses data using the Zeckendorf algorithm with big endian interpretation,
|
|
58
|
+
* and stores the result in a [`ZeckFile`] struct.
|
|
59
|
+
*
|
|
60
|
+
* # ⚠️ Warning
|
|
61
|
+
*
|
|
62
|
+
* **Compressing or decompressing data larger than 10KB (10,000 bytes) is unstable due to time and memory pressure.**
|
|
63
|
+
* The library may experience performance issues, excessive memory usage, or failures when processing data exceeding this size.
|
|
64
|
+
*
|
|
65
|
+
* # Examples
|
|
66
|
+
*
|
|
67
|
+
* ```
|
|
68
|
+
* # use zeck::zeck_file_format::compress::compress_zeck_be;
|
|
69
|
+
* let data = vec![1, 0];
|
|
70
|
+
* match compress_zeck_be(&data) {
|
|
71
|
+
* Ok(zeck_file) => {
|
|
72
|
+
* // Access file information
|
|
73
|
+
* println!("Original size: {} bytes", zeck_file.original_size);
|
|
74
|
+
* println!("Is big endian: {}", zeck_file.is_big_endian());
|
|
75
|
+
* // Serialize to bytes for writing to file
|
|
76
|
+
* let bytes = zeck_file.to_bytes();
|
|
77
|
+
* }
|
|
78
|
+
* Err(e) => {
|
|
79
|
+
* // Handle error (e.g., data size too large)
|
|
80
|
+
* }
|
|
81
|
+
* }
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export function compress_zeck_be(data: Uint8Array): ZeckFile;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Compresses data using the Zeckendorf algorithm with automatic endianness selection,
|
|
88
|
+
* and stores the result in a [`BestCompressionResult`] struct.
|
|
89
|
+
*
|
|
90
|
+
* This function attempts compression with both big endian and little endian interpretations,
|
|
91
|
+
* and returns the best result, or if neither produced compression (both were larger than the original).
|
|
92
|
+
*
|
|
93
|
+
* # ⚠️ Warning
|
|
94
|
+
*
|
|
95
|
+
* **Compressing or decompressing data larger than 10KB (10,000 bytes) is unstable due to time and memory pressure.**
|
|
96
|
+
* The library may experience performance issues, excessive memory usage, or failures when processing data exceeding this size.
|
|
97
|
+
*
|
|
98
|
+
* # Examples
|
|
99
|
+
*
|
|
100
|
+
* ```
|
|
101
|
+
* # use zeck::zeck_file_format::compress::compress_zeck_best;
|
|
102
|
+
* # use zeck::zeck_file_format::compress::BestCompressionResult;
|
|
103
|
+
* # use zeck::zeck_file_format::decompress::decompress_zeck_file;
|
|
104
|
+
* let data = vec![0, 1]; // Compresses best interpreted as a big endian integer
|
|
105
|
+
* match compress_zeck_best(&data) {
|
|
106
|
+
* Ok(best_compression_result) => {
|
|
107
|
+
* match best_compression_result {
|
|
108
|
+
* BestCompressionResult::BigEndianBest { zeck_file, le_size } => {
|
|
109
|
+
* let decompressed = decompress_zeck_file(&zeck_file).unwrap();
|
|
110
|
+
* assert_eq!(decompressed, data);
|
|
111
|
+
* }
|
|
112
|
+
* BestCompressionResult::LittleEndianBest { zeck_file, be_size } => {
|
|
113
|
+
* assert!(false);
|
|
114
|
+
* }
|
|
115
|
+
* BestCompressionResult::Neither { be_size, le_size } => {
|
|
116
|
+
* assert!(false);
|
|
117
|
+
* }
|
|
118
|
+
* }
|
|
119
|
+
* }
|
|
120
|
+
* Err(e) => {
|
|
121
|
+
* assert!(false);
|
|
122
|
+
* }
|
|
123
|
+
* }
|
|
124
|
+
*
|
|
125
|
+
* let data = vec![1, 0]; // Compresses best interpreted as a little endian integer
|
|
126
|
+
* match compress_zeck_best(&data) {
|
|
127
|
+
* Ok(best_compression_result) => {
|
|
128
|
+
* match best_compression_result {
|
|
129
|
+
* BestCompressionResult::BigEndianBest { zeck_file, le_size } => {
|
|
130
|
+
* assert!(false);
|
|
131
|
+
* }
|
|
132
|
+
* BestCompressionResult::LittleEndianBest { zeck_file, be_size } => {
|
|
133
|
+
* let decompressed = decompress_zeck_file(&zeck_file).unwrap();
|
|
134
|
+
* assert_eq!(decompressed, data);
|
|
135
|
+
* }
|
|
136
|
+
* BestCompressionResult::Neither { be_size, le_size } => {
|
|
137
|
+
* assert!(false);
|
|
138
|
+
* }
|
|
139
|
+
* }
|
|
140
|
+
* }
|
|
141
|
+
* Err(e) => {
|
|
142
|
+
* assert!(false);
|
|
143
|
+
* }
|
|
144
|
+
* }
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
export function compress_zeck_best(data: Uint8Array): BestCompressionResult;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Compresses data using the Zeckendorf algorithm with little endian interpretation,
|
|
151
|
+
* and stores the result in a [`ZeckFile`] struct.
|
|
152
|
+
*
|
|
153
|
+
* # ⚠️ Warning
|
|
154
|
+
*
|
|
155
|
+
* **Compressing or decompressing data larger than 10KB (10,000 bytes) is unstable due to time and memory pressure.**
|
|
156
|
+
* The library may experience performance issues, excessive memory usage, or failures when processing data exceeding this size.
|
|
157
|
+
*
|
|
158
|
+
* # Examples
|
|
159
|
+
*
|
|
160
|
+
* ```
|
|
161
|
+
* # use zeck::zeck_file_format::compress::compress_zeck_le;
|
|
162
|
+
* let data = vec![1, 0];
|
|
163
|
+
* match compress_zeck_le(&data) {
|
|
164
|
+
* Ok(zeck_file) => {
|
|
165
|
+
* // Access file information
|
|
166
|
+
* println!("Original size: {} bytes", zeck_file.original_size);
|
|
167
|
+
* println!("Compressed size: {} bytes", zeck_file.compressed_data.len());
|
|
168
|
+
* // Serialize to bytes for writing to file
|
|
169
|
+
* let bytes = zeck_file.to_bytes();
|
|
170
|
+
* }
|
|
171
|
+
* Err(e) => {
|
|
172
|
+
* // Handle error (e.g., data size too large)
|
|
173
|
+
* }
|
|
174
|
+
* }
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
export function compress_zeck_le(data: Uint8Array): ZeckFile;
|
|
178
|
+
|
|
20
179
|
/**
|
|
21
180
|
* Effective Fibonacci Index to Fibonacci Index: FI(efi) === efi + 2, where efi is the Effective Fibonacci Index
|
|
22
181
|
*
|
|
@@ -64,9 +223,9 @@ export function ezba_from_ezld(effective_zeckendorf_list_descending: BigUint64Ar
|
|
|
64
223
|
*
|
|
65
224
|
* ```
|
|
66
225
|
* # use zeck::ezba_to_ezla;
|
|
67
|
-
* assert_eq!(ezba_to_ezla(&[0, 0, 0, 0, 0, 0, 0, 0]), vec![]);
|
|
68
|
-
* assert_eq!(ezba_to_ezla(&[1, 0, 0, 0, 0, 0, 0, 0]), vec![
|
|
69
|
-
* assert_eq!(ezba_to_ezla(&[1, 1, 1, 0, 0, 0, 0, 0]), vec![
|
|
226
|
+
* assert_eq!(ezba_to_ezla(&[0, 0, 0, 0, 0, 0, 0, 0]), vec![] as Vec<u64>);
|
|
227
|
+
* assert_eq!(ezba_to_ezla(&[1, 0, 0, 0, 0, 0, 0, 0]), vec![0u64]);
|
|
228
|
+
* assert_eq!(ezba_to_ezla(&[1, 1, 1, 0, 0, 0, 0, 0]), vec![0u64, 2u64, 4u64]);
|
|
70
229
|
* ```
|
|
71
230
|
*/
|
|
72
231
|
export function ezba_to_ezla(ezba_bits: Uint8Array): BigUint64Array;
|
|
@@ -194,21 +353,21 @@ export function memoized_slow_fibonacci_recursive(fi: bigint): bigint;
|
|
|
194
353
|
* ```
|
|
195
354
|
* # use zeck::memoized_zeckendorf_list_descending_for_integer;
|
|
196
355
|
* // Base cases
|
|
197
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(0), vec![]);
|
|
198
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(1), vec![
|
|
199
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(2), vec![
|
|
356
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(0), vec![] as Vec<u64>);
|
|
357
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(1), vec![2u64]);
|
|
358
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(2), vec![3u64]);
|
|
200
359
|
*
|
|
201
360
|
* // Small Zeckendorf numbers
|
|
202
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(3), vec![
|
|
203
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(4), vec![
|
|
204
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(5), vec![
|
|
205
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(6), vec![
|
|
206
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(7), vec![
|
|
207
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(8), vec![
|
|
208
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(9), vec![
|
|
209
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(10), vec![
|
|
210
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(11), vec![
|
|
211
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(12), vec![
|
|
361
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(3), vec![4u64]);
|
|
362
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(4), vec![4u64, 2u64]);
|
|
363
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(5), vec![5u64]);
|
|
364
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(6), vec![5u64, 2u64]);
|
|
365
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(7), vec![5u64, 3u64]);
|
|
366
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(8), vec![6u64]);
|
|
367
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(9), vec![6u64, 2u64]);
|
|
368
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(10), vec![6u64, 3u64]);
|
|
369
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(11), vec![6u64, 4u64]);
|
|
370
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(12), vec![6u64, 4u64, 2u64]);
|
|
212
371
|
* ```
|
|
213
372
|
*/
|
|
214
373
|
export function memoized_zeckendorf_list_descending_for_integer(n: bigint): BigUint64Array;
|
package/zeck_bg.js
CHANGED
|
@@ -3,6 +3,12 @@ export function __wbg_set_wasm(val) {
|
|
|
3
3
|
wasm = val;
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
+
function addToExternrefTable0(obj) {
|
|
7
|
+
const idx = wasm.__externref_table_alloc();
|
|
8
|
+
wasm.__wbindgen_externrefs.set(idx, obj);
|
|
9
|
+
return idx;
|
|
10
|
+
}
|
|
11
|
+
|
|
6
12
|
function getArrayU64FromWasm0(ptr, len) {
|
|
7
13
|
ptr = ptr >>> 0;
|
|
8
14
|
return getBigUint64ArrayMemory0().subarray(ptr / 8, ptr / 8 + len);
|
|
@@ -21,6 +27,11 @@ function getBigUint64ArrayMemory0() {
|
|
|
21
27
|
return cachedBigUint64ArrayMemory0;
|
|
22
28
|
}
|
|
23
29
|
|
|
30
|
+
function getStringFromWasm0(ptr, len) {
|
|
31
|
+
ptr = ptr >>> 0;
|
|
32
|
+
return decodeText(ptr, len);
|
|
33
|
+
}
|
|
34
|
+
|
|
24
35
|
let cachedUint8ArrayMemory0 = null;
|
|
25
36
|
function getUint8ArrayMemory0() {
|
|
26
37
|
if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
|
|
@@ -29,6 +40,15 @@ function getUint8ArrayMemory0() {
|
|
|
29
40
|
return cachedUint8ArrayMemory0;
|
|
30
41
|
}
|
|
31
42
|
|
|
43
|
+
function handleError(f, args) {
|
|
44
|
+
try {
|
|
45
|
+
return f.apply(this, args);
|
|
46
|
+
} catch (e) {
|
|
47
|
+
const idx = addToExternrefTable0(e);
|
|
48
|
+
wasm.__wbindgen_exn_store(idx);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
32
52
|
function passArray64ToWasm0(arg, malloc) {
|
|
33
53
|
const ptr = malloc(arg.length * 8, 8) >>> 0;
|
|
34
54
|
getBigUint64ArrayMemory0().set(arg, ptr / 8);
|
|
@@ -43,6 +63,26 @@ function passArray8ToWasm0(arg, malloc) {
|
|
|
43
63
|
return ptr;
|
|
44
64
|
}
|
|
45
65
|
|
|
66
|
+
function takeFromExternrefTable0(idx) {
|
|
67
|
+
const value = wasm.__wbindgen_externrefs.get(idx);
|
|
68
|
+
wasm.__externref_table_dealloc(idx);
|
|
69
|
+
return value;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
|
|
73
|
+
cachedTextDecoder.decode();
|
|
74
|
+
const MAX_SAFARI_DECODE_BYTES = 2146435072;
|
|
75
|
+
let numBytesDecoded = 0;
|
|
76
|
+
function decodeText(ptr, len) {
|
|
77
|
+
numBytesDecoded += len;
|
|
78
|
+
if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {
|
|
79
|
+
cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
|
|
80
|
+
cachedTextDecoder.decode();
|
|
81
|
+
numBytesDecoded = len;
|
|
82
|
+
}
|
|
83
|
+
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
|
|
84
|
+
}
|
|
85
|
+
|
|
46
86
|
let WASM_VECTOR_LEN = 0;
|
|
47
87
|
|
|
48
88
|
/**
|
|
@@ -66,6 +106,159 @@ export function bit_count_for_number(n) {
|
|
|
66
106
|
return ret >>> 0;
|
|
67
107
|
}
|
|
68
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Compresses data using the Zeckendorf algorithm with big endian interpretation,
|
|
111
|
+
* and stores the result in a [`ZeckFile`] struct.
|
|
112
|
+
*
|
|
113
|
+
* # ⚠️ Warning
|
|
114
|
+
*
|
|
115
|
+
* **Compressing or decompressing data larger than 10KB (10,000 bytes) is unstable due to time and memory pressure.**
|
|
116
|
+
* The library may experience performance issues, excessive memory usage, or failures when processing data exceeding this size.
|
|
117
|
+
*
|
|
118
|
+
* # Examples
|
|
119
|
+
*
|
|
120
|
+
* ```
|
|
121
|
+
* # use zeck::zeck_file_format::compress::compress_zeck_be;
|
|
122
|
+
* let data = vec![1, 0];
|
|
123
|
+
* match compress_zeck_be(&data) {
|
|
124
|
+
* Ok(zeck_file) => {
|
|
125
|
+
* // Access file information
|
|
126
|
+
* println!("Original size: {} bytes", zeck_file.original_size);
|
|
127
|
+
* println!("Is big endian: {}", zeck_file.is_big_endian());
|
|
128
|
+
* // Serialize to bytes for writing to file
|
|
129
|
+
* let bytes = zeck_file.to_bytes();
|
|
130
|
+
* }
|
|
131
|
+
* Err(e) => {
|
|
132
|
+
* // Handle error (e.g., data size too large)
|
|
133
|
+
* }
|
|
134
|
+
* }
|
|
135
|
+
* ```
|
|
136
|
+
* @param {Uint8Array} data
|
|
137
|
+
* @returns {ZeckFile}
|
|
138
|
+
*/
|
|
139
|
+
export function compress_zeck_be(data) {
|
|
140
|
+
const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc);
|
|
141
|
+
const len0 = WASM_VECTOR_LEN;
|
|
142
|
+
const ret = wasm.compress_zeck_be(ptr0, len0);
|
|
143
|
+
if (ret[2]) {
|
|
144
|
+
throw takeFromExternrefTable0(ret[1]);
|
|
145
|
+
}
|
|
146
|
+
return takeFromExternrefTable0(ret[0]);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Compresses data using the Zeckendorf algorithm with automatic endianness selection,
|
|
151
|
+
* and stores the result in a [`BestCompressionResult`] struct.
|
|
152
|
+
*
|
|
153
|
+
* This function attempts compression with both big endian and little endian interpretations,
|
|
154
|
+
* and returns the best result, or if neither produced compression (both were larger than the original).
|
|
155
|
+
*
|
|
156
|
+
* # ⚠️ Warning
|
|
157
|
+
*
|
|
158
|
+
* **Compressing or decompressing data larger than 10KB (10,000 bytes) is unstable due to time and memory pressure.**
|
|
159
|
+
* The library may experience performance issues, excessive memory usage, or failures when processing data exceeding this size.
|
|
160
|
+
*
|
|
161
|
+
* # Examples
|
|
162
|
+
*
|
|
163
|
+
* ```
|
|
164
|
+
* # use zeck::zeck_file_format::compress::compress_zeck_best;
|
|
165
|
+
* # use zeck::zeck_file_format::compress::BestCompressionResult;
|
|
166
|
+
* # use zeck::zeck_file_format::decompress::decompress_zeck_file;
|
|
167
|
+
* let data = vec![0, 1]; // Compresses best interpreted as a big endian integer
|
|
168
|
+
* match compress_zeck_best(&data) {
|
|
169
|
+
* Ok(best_compression_result) => {
|
|
170
|
+
* match best_compression_result {
|
|
171
|
+
* BestCompressionResult::BigEndianBest { zeck_file, le_size } => {
|
|
172
|
+
* let decompressed = decompress_zeck_file(&zeck_file).unwrap();
|
|
173
|
+
* assert_eq!(decompressed, data);
|
|
174
|
+
* }
|
|
175
|
+
* BestCompressionResult::LittleEndianBest { zeck_file, be_size } => {
|
|
176
|
+
* assert!(false);
|
|
177
|
+
* }
|
|
178
|
+
* BestCompressionResult::Neither { be_size, le_size } => {
|
|
179
|
+
* assert!(false);
|
|
180
|
+
* }
|
|
181
|
+
* }
|
|
182
|
+
* }
|
|
183
|
+
* Err(e) => {
|
|
184
|
+
* assert!(false);
|
|
185
|
+
* }
|
|
186
|
+
* }
|
|
187
|
+
*
|
|
188
|
+
* let data = vec![1, 0]; // Compresses best interpreted as a little endian integer
|
|
189
|
+
* match compress_zeck_best(&data) {
|
|
190
|
+
* Ok(best_compression_result) => {
|
|
191
|
+
* match best_compression_result {
|
|
192
|
+
* BestCompressionResult::BigEndianBest { zeck_file, le_size } => {
|
|
193
|
+
* assert!(false);
|
|
194
|
+
* }
|
|
195
|
+
* BestCompressionResult::LittleEndianBest { zeck_file, be_size } => {
|
|
196
|
+
* let decompressed = decompress_zeck_file(&zeck_file).unwrap();
|
|
197
|
+
* assert_eq!(decompressed, data);
|
|
198
|
+
* }
|
|
199
|
+
* BestCompressionResult::Neither { be_size, le_size } => {
|
|
200
|
+
* assert!(false);
|
|
201
|
+
* }
|
|
202
|
+
* }
|
|
203
|
+
* }
|
|
204
|
+
* Err(e) => {
|
|
205
|
+
* assert!(false);
|
|
206
|
+
* }
|
|
207
|
+
* }
|
|
208
|
+
* ```
|
|
209
|
+
* @param {Uint8Array} data
|
|
210
|
+
* @returns {BestCompressionResult}
|
|
211
|
+
*/
|
|
212
|
+
export function compress_zeck_best(data) {
|
|
213
|
+
const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc);
|
|
214
|
+
const len0 = WASM_VECTOR_LEN;
|
|
215
|
+
const ret = wasm.compress_zeck_best(ptr0, len0);
|
|
216
|
+
if (ret[2]) {
|
|
217
|
+
throw takeFromExternrefTable0(ret[1]);
|
|
218
|
+
}
|
|
219
|
+
return takeFromExternrefTable0(ret[0]);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Compresses data using the Zeckendorf algorithm with little endian interpretation,
|
|
224
|
+
* and stores the result in a [`ZeckFile`] struct.
|
|
225
|
+
*
|
|
226
|
+
* # ⚠️ Warning
|
|
227
|
+
*
|
|
228
|
+
* **Compressing or decompressing data larger than 10KB (10,000 bytes) is unstable due to time and memory pressure.**
|
|
229
|
+
* The library may experience performance issues, excessive memory usage, or failures when processing data exceeding this size.
|
|
230
|
+
*
|
|
231
|
+
* # Examples
|
|
232
|
+
*
|
|
233
|
+
* ```
|
|
234
|
+
* # use zeck::zeck_file_format::compress::compress_zeck_le;
|
|
235
|
+
* let data = vec![1, 0];
|
|
236
|
+
* match compress_zeck_le(&data) {
|
|
237
|
+
* Ok(zeck_file) => {
|
|
238
|
+
* // Access file information
|
|
239
|
+
* println!("Original size: {} bytes", zeck_file.original_size);
|
|
240
|
+
* println!("Compressed size: {} bytes", zeck_file.compressed_data.len());
|
|
241
|
+
* // Serialize to bytes for writing to file
|
|
242
|
+
* let bytes = zeck_file.to_bytes();
|
|
243
|
+
* }
|
|
244
|
+
* Err(e) => {
|
|
245
|
+
* // Handle error (e.g., data size too large)
|
|
246
|
+
* }
|
|
247
|
+
* }
|
|
248
|
+
* ```
|
|
249
|
+
* @param {Uint8Array} data
|
|
250
|
+
* @returns {ZeckFile}
|
|
251
|
+
*/
|
|
252
|
+
export function compress_zeck_le(data) {
|
|
253
|
+
const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc);
|
|
254
|
+
const len0 = WASM_VECTOR_LEN;
|
|
255
|
+
const ret = wasm.compress_zeck_le(ptr0, len0);
|
|
256
|
+
if (ret[2]) {
|
|
257
|
+
throw takeFromExternrefTable0(ret[1]);
|
|
258
|
+
}
|
|
259
|
+
return takeFromExternrefTable0(ret[0]);
|
|
260
|
+
}
|
|
261
|
+
|
|
69
262
|
/**
|
|
70
263
|
* Effective Fibonacci Index to Fibonacci Index: FI(efi) === efi + 2, where efi is the Effective Fibonacci Index
|
|
71
264
|
*
|
|
@@ -127,9 +320,9 @@ export function ezba_from_ezld(effective_zeckendorf_list_descending) {
|
|
|
127
320
|
*
|
|
128
321
|
* ```
|
|
129
322
|
* # use zeck::ezba_to_ezla;
|
|
130
|
-
* assert_eq!(ezba_to_ezla(&[0, 0, 0, 0, 0, 0, 0, 0]), vec![]);
|
|
131
|
-
* assert_eq!(ezba_to_ezla(&[1, 0, 0, 0, 0, 0, 0, 0]), vec![
|
|
132
|
-
* assert_eq!(ezba_to_ezla(&[1, 1, 1, 0, 0, 0, 0, 0]), vec![
|
|
323
|
+
* assert_eq!(ezba_to_ezla(&[0, 0, 0, 0, 0, 0, 0, 0]), vec![] as Vec<u64>);
|
|
324
|
+
* assert_eq!(ezba_to_ezla(&[1, 0, 0, 0, 0, 0, 0, 0]), vec![0u64]);
|
|
325
|
+
* assert_eq!(ezba_to_ezla(&[1, 1, 1, 0, 0, 0, 0, 0]), vec![0u64, 2u64, 4u64]);
|
|
133
326
|
* ```
|
|
134
327
|
* @param {Uint8Array} ezba_bits
|
|
135
328
|
* @returns {BigUint64Array}
|
|
@@ -295,21 +488,21 @@ export function memoized_slow_fibonacci_recursive(fi) {
|
|
|
295
488
|
* ```
|
|
296
489
|
* # use zeck::memoized_zeckendorf_list_descending_for_integer;
|
|
297
490
|
* // Base cases
|
|
298
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(0), vec![]);
|
|
299
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(1), vec![
|
|
300
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(2), vec![
|
|
491
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(0), vec![] as Vec<u64>);
|
|
492
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(1), vec![2u64]);
|
|
493
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(2), vec![3u64]);
|
|
301
494
|
*
|
|
302
495
|
* // Small Zeckendorf numbers
|
|
303
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(3), vec![
|
|
304
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(4), vec![
|
|
305
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(5), vec![
|
|
306
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(6), vec![
|
|
307
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(7), vec![
|
|
308
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(8), vec![
|
|
309
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(9), vec![
|
|
310
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(10), vec![
|
|
311
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(11), vec![
|
|
312
|
-
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(12), vec![
|
|
496
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(3), vec![4u64]);
|
|
497
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(4), vec![4u64, 2u64]);
|
|
498
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(5), vec![5u64]);
|
|
499
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(6), vec![5u64, 2u64]);
|
|
500
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(7), vec![5u64, 3u64]);
|
|
501
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(8), vec![6u64]);
|
|
502
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(9), vec![6u64, 2u64]);
|
|
503
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(10), vec![6u64, 3u64]);
|
|
504
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(11), vec![6u64, 4u64]);
|
|
505
|
+
* assert_eq!(memoized_zeckendorf_list_descending_for_integer(12), vec![6u64, 4u64, 2u64]);
|
|
313
506
|
* ```
|
|
314
507
|
* @param {bigint} n
|
|
315
508
|
* @returns {BigUint64Array}
|
|
@@ -574,6 +767,15 @@ export function zl_to_ezl(zl) {
|
|
|
574
767
|
return v2;
|
|
575
768
|
}
|
|
576
769
|
|
|
770
|
+
export function __wbg___wbindgen_throw_dd24417ed36fc46e(arg0, arg1) {
|
|
771
|
+
throw new Error(getStringFromWasm0(arg0, arg1));
|
|
772
|
+
};
|
|
773
|
+
|
|
774
|
+
export function __wbg_parse_a09a54cf72639456() { return handleError(function (arg0, arg1) {
|
|
775
|
+
const ret = JSON.parse(getStringFromWasm0(arg0, arg1));
|
|
776
|
+
return ret;
|
|
777
|
+
}, arguments) };
|
|
778
|
+
|
|
577
779
|
export function __wbindgen_init_externref_table() {
|
|
578
780
|
const table = wasm.__wbindgen_externrefs;
|
|
579
781
|
const offset = table.grow(4);
|
package/zeck_bg.wasm
CHANGED
|
Binary file
|