1 module squiz_box.c.lzma;
2 
3 version (HaveSquizLzma)
4 {
5 }
6 else
7 {
8     static assert(false, "LZMA and XZ support is disabled");
9 }
10 
11 import std.traits : isIntegral;
12 
13 private alias uint8_t = ubyte;
14 private alias uint32_t = uint;
15 private alias uint64_t = ulong;
16 
17 // lzma/version.h
18 
19 enum LZMA_VERSION_MAJOR = 5;
20 enum LZMA_VERSION_MINOR = 2;
21 enum LZMA_VERSION_PATCH = 5;
22 enum LZMA_VERSION_STABILITY = LZMA_VERSION_STABILITY_STABLE;
23 
24 /*
25  * Map symbolic stability levels to integers.
26  */
27 enum LZMA_VERSION_STABILITY_ALPHA = 0;
28 enum LZMA_VERSION_STABILITY_BETA = 1;
29 enum LZMA_VERSION_STABILITY_STABLE = 2;
30 
31 enum uint LZMA_VERSION = LZMA_VERSION_MAJOR * 10_000_000
32     + LZMA_VERSION_MINOR * 10_000
33     + LZMA_VERSION_PATCH * 10
34     + LZMA_VERSION_STABILITY;
35 
36 enum LZMA_VERSION_STRING = "5.2.5";
37 
38 extern (C) uint lzma_version_number() nothrow;
39 
40 extern (C) const(char)* lzma_version_string() nothrow;
41 
42 // lzma/base.h
43 
44 alias lzma_bool = bool;
45 
46 static assert(lzma_bool.sizeof == 1);
47 
48 enum lzma_reserved_enum
49 {
50     LZMA_RESERVED_ENUM = 0,
51 }
52 
53 enum lzma_ret
54 {
55     OK = 0,
56     STREAM_END = 1,
57     NO_CHECK = 2,
58     UNSUPPORTED_CHECK = 3,
59     GET_CHECK = 4,
60     MEM_ERROR = 5,
61     MEMLIMIT_ERROR = 6,
62     FORMAT_ERROR = 7,
63     OPTIONS_ERROR = 8,
64     DATA_ERROR = 9,
65     BUF_ERROR = 10,
66     PROG_ERROR = 11,
67 }
68 
69 enum lzma_action
70 {
71     RUN = 0,
72     SYNC_FLUSH = 1,
73     FULL_FLUSH = 2,
74     FULL_BARRIER = 4,
75     FINISH = 3
76 }
77 
78 struct lzma_allocator
79 {
80     extern (C) void* function(void* opaque, size_t nmemb, size_t size) alloc;
81     extern (C) void function(void* opaque, void* ptr) free;
82     void* opaque;
83 }
84 
85 struct lzma_internal;
86 
87 struct lzma_stream
88 {
89     const(uint8_t)* next_in;
90     size_t avail_in;
91     uint64_t total_in;
92 
93     uint8_t* next_out;
94     size_t avail_out;
95     uint64_t total_out;
96 
97     const(lzma_allocator)* allocator;
98 
99     lzma_internal* internal;
100 
101     void* reserved_ptr1;
102     void* reserved_ptr2;
103     void* reserved_ptr3;
104     void* reserved_ptr4;
105     uint64_t reserved_int1;
106     uint64_t reserved_int2;
107     size_t reserved_int3;
108     size_t reserved_int4;
109     lzma_reserved_enum reserved_enum1;
110     lzma_reserved_enum reserved_enum2;
111 }
112 
113 extern (C) lzma_ret lzma_code(lzma_stream* strm, lzma_action action) nothrow;
114 
115 extern (C) void lzma_end(lzma_stream* strm) nothrow;
116 
117 extern (C) void lzma_get_progress(lzma_stream* strm,
118     uint64_t* progress_in, uint64_t* progress_out) nothrow;
119 
120 extern (C) uint64_t lzma_memusage(const(lzma_stream)* strm)
121 nothrow pure;
122 
123 extern (C) uint64_t lzma_memlimit_get(const(lzma_stream)* strm)
124 nothrow pure;
125 
126 extern (C) lzma_ret lzma_memlimit_set(
127     lzma_stream* strm, uint64_t memlimit) nothrow;
128 
129 // lzma/vli.h
130 
131 enum LZMA_VLI_MAX = uint64_t.max / 2;
132 
133 enum LZMA_VLI_UNKNOWN = uint64_t.max;
134 
135 enum LZMA_VLI_BYTES_MAX = 9;
136 
137 lzma_vli LZMA_VLI_C(N)(N n) if (isIntegral!N)
138 {
139     return n;
140 }
141 
142 alias lzma_vli = uint64_t;
143 
144 bool lzma_vli_is_valid(lzma_vli vli)
145 {
146     return vli <= LZMA_VLI_MAX || vli == LZMA_VLI_UNKNOWN;
147 }
148 
149 extern (C) lzma_ret lzma_vli_encode(lzma_vli vli, size_t* vli_pos,
150     uint8_t* out_, size_t* out_pos, size_t out_size) nothrow;
151 
152 extern (C) lzma_ret lzma_vli_decode(lzma_vli* vli, size_t* vli_pos,
153     const uint8_t* in_, size_t* in_pos, size_t in_size)
154 nothrow;
155 
156 extern (C) uint32_t lzma_vli_size(lzma_vli vli)
157 nothrow pure;
158 
159 // lzma/check.h
160 
161 enum lzma_check
162 {
163     NONE = 0,
164     CRC32 = 1,
165     CRC64 = 4,
166     SHA256 = 10
167 }
168 
169 enum LZMA_CHECK_ID_MAX = 15;
170 
171 extern (C) lzma_bool lzma_check_is_supported(lzma_check check)
172 nothrow;
173 
174 extern (C) uint32_t lzma_check_size(lzma_check check)
175 nothrow;
176 
177 enum LZMA_CHECK_SIZE_MAX = 64;
178 
179 extern (C) uint32_t lzma_crc32(
180     const uint8_t* buf, size_t size, uint32_t crc)
181 nothrow pure;
182 
183 extern (C) uint64_t lzma_crc64(
184     const uint8_t* buf, size_t size, uint64_t crc)
185 nothrow pure;
186 
187 extern (C) lzma_check lzma_get_check(const lzma_stream* strm)
188 nothrow;
189 
190 // lzma/filter.h
191 enum LZMA_FILTERS_MAX = 4;
192 
193 struct lzma_filter
194 {
195     lzma_vli id;
196     void* options;
197 }
198 
199 extern (C) lzma_bool lzma_filter_encoder_is_supported(lzma_vli id)
200 nothrow;
201 
202 extern (C) lzma_bool lzma_filter_decoder_is_supported(lzma_vli id)
203 nothrow;
204 
205 extern (C) lzma_ret lzma_filters_copy(
206     const lzma_filter* src, lzma_filter* dest,
207     const lzma_allocator* allocator) nothrow;
208 
209 extern (C) uint64_t lzma_raw_encoder_memusage(const lzma_filter* filters)
210 nothrow pure;
211 
212 extern (C) uint64_t lzma_raw_decoder_memusage(const lzma_filter* filters)
213 nothrow pure;
214 
215 extern (C) lzma_ret lzma_raw_encoder(
216     lzma_stream* strm, const lzma_filter* filters)
217 nothrow;
218 
219 extern (C) lzma_ret lzma_raw_decoder(
220     lzma_stream* strm, const lzma_filter* filters)
221 nothrow;
222 
223 extern (C) lzma_ret lzma_filters_update(
224     lzma_stream* strm, const lzma_filter* filters) nothrow;
225 
226 extern (C) lzma_ret lzma_raw_buffer_encode(
227     const lzma_filter* filters, const lzma_allocator* allocator,
228     const uint8_t* in_, size_t in_size, uint8_t* out_,
229     size_t* out_pos, size_t out_size) nothrow;
230 
231 extern (C) lzma_ret lzma_raw_buffer_decode(
232     const lzma_filter* filters, const lzma_allocator* allocator,
233     const uint8_t* in_, size_t* in_pos, size_t in_size,
234     uint8_t* out_, size_t* out_pos, size_t out_size) nothrow;
235 
236 extern (C) lzma_ret lzma_properties_size(
237     uint32_t* size, const lzma_filter* filter) nothrow;
238 
239 extern (C) lzma_ret lzma_properties_encode(
240     const lzma_filter* filter, uint8_t* props) nothrow;
241 
242 extern (C) lzma_ret lzma_properties_decode(
243     lzma_filter* filter, const lzma_allocator* allocator,
244     const uint8_t* props, size_t props_size) nothrow;
245 
246 extern (C) lzma_ret lzma_filter_flags_size(
247     uint32_t* size, const lzma_filter* filter)
248 nothrow;
249 
250 extern (C) lzma_ret lzma_filter_flags_encode(const lzma_filter* filter,
251     uint8_t* out_, size_t* out_pos, size_t out_size)
252 nothrow;
253 
254 extern (C) lzma_ret lzma_filter_flags_decode(
255     lzma_filter* filter, const lzma_allocator* allocator,
256     const uint8_t* in_, size_t* in_pos, size_t in_size)
257 nothrow;
258 
259 // lzma/bcj.h
260 
261 enum LZMA_FILTER_X86 = LZMA_VLI_C(0x04);
262 
263 enum LZMA_FILTER_POWERPC = LZMA_VLI_C(0x05);
264 
265 enum LZMA_FILTER_IA64 = LZMA_VLI_C(0x06);
266 
267 enum LZMA_FILTER_ARM = LZMA_VLI_C(0x07);
268 
269 enum LZMA_FILTER_ARMTHUMB = LZMA_VLI_C(0x08);
270 
271 enum LZMA_FILTER_SPARC = LZMA_VLI_C(0x09);
272 
273 struct lzma_options_bcj
274 {
275     uint32_t start_offset;
276 }
277 
278 // lzma/delta.h
279 
280 enum LZMA_FILTER_DELTA = LZMA_VLI_C(0x03);
281 
282 enum lzma_delta_type
283 {
284     LZMA_DELTA_TYPE_BYTE
285 }
286 
287 enum LZMA_DELTA_DIST_MIN = 1;
288 enum LZMA_DELTA_DIST_MAX = 256;
289 
290 struct lzma_options_delta
291 {
292     lzma_delta_type type;
293 
294     uint32_t dist;
295     uint32_t reserved_int1;
296     uint32_t reserved_int2;
297     uint32_t reserved_int3;
298     uint32_t reserved_int4;
299     void* reserved_ptr1;
300     void* reserved_ptr2;
301 }
302 
303 // lzma/lzma12.h
304 
305 enum LZMA_FILTER_LZMA1 = LZMA_VLI_C(0x4000000000000001);
306 
307 enum LZMA_FILTER_LZMA2 = LZMA_VLI_C(0x21);
308 
309 enum lzma_match_finder
310 {
311     LZMA_MF_HC3 = 0x03,
312     LZMA_MF_HC4 = 0x04,
313 
314     LZMA_MF_BT2 = 0x12,
315 
316     LZMA_MF_BT3 = 0x13,
317 
318     LZMA_MF_BT4 = 0x14
319 }
320 
321 extern (C) lzma_bool lzma_mf_is_supported(lzma_match_finder match_finder)
322 nothrow;
323 
324 enum lzma_mode
325 {
326     LZMA_MODE_FAST = 1,
327     LZMA_MODE_NORMAL = 2
328 }
329 
330 extern (C) lzma_bool lzma_mode_is_supported(lzma_mode mode)
331 nothrow;
332 
333 enum LZMA_DICT_SIZE_MIN = 4096;
334 enum LZMA_DICT_SIZE_DEFAULT = 1 << 23;
335 enum LZMA_LCLP_MIN = 0;
336 enum LZMA_LCLP_MAX = 4;
337 enum LZMA_LC_DEFAULT = 3;
338 enum LZMA_LP_DEFAULT = 0;
339 enum LZMA_PB_MIN = 0;
340 enum LZMA_PB_MAX = 4;
341 enum LZMA_PB_DEFAULT = 2;
342 
343 struct lzma_options_lzma
344 {
345     uint32_t dict_size;
346 
347     const uint8_t* preset_dict;
348 
349     uint32_t preset_dict_size;
350 
351     uint32_t lc;
352 
353     uint32_t lp;
354 
355     uint32_t pb;
356     lzma_mode mode;
357 
358     uint32_t nice_len;
359 
360     lzma_match_finder mf;
361 
362     uint32_t depth;
363 
364     uint32_t reserved_int1;
365     uint32_t reserved_int2;
366     uint32_t reserved_int3;
367     uint32_t reserved_int4;
368     uint32_t reserved_int5;
369     uint32_t reserved_int6;
370     uint32_t reserved_int7;
371     uint32_t reserved_int8;
372     lzma_reserved_enum reserved_enum1;
373     lzma_reserved_enum reserved_enum2;
374     lzma_reserved_enum reserved_enum3;
375     lzma_reserved_enum reserved_enum4;
376     void* reserved_ptr1;
377     void* reserved_ptr2;
378 }
379 
380 extern (C) lzma_bool lzma_lzma_preset(
381     lzma_options_lzma* options, uint32_t preset) nothrow;
382 
383 // lzma/containers.h
384 /************
385  * Encoding *
386  ************/
387 
388 enum uint32_t LZMA_PRESET_DEFAULT = 6;
389 
390 enum uint32_t LZMA_PRESET_LEVEL_MASK = 0x1F;
391 
392 enum uint32_t LZMA_PRESET_EXTREME = 1 << 31;
393 
394 struct lzma_mt
395 {
396     uint32_t flags;
397 
398     uint32_t threads;
399 
400     uint64_t block_size;
401 
402     uint32_t timeout;
403 
404     uint32_t preset;
405 
406     const lzma_filter* filters;
407 
408     lzma_check check;
409 
410     lzma_reserved_enum reserved_enum1;
411     lzma_reserved_enum reserved_enum2;
412     lzma_reserved_enum reserved_enum3;
413     uint32_t reserved_int1;
414     uint32_t reserved_int2;
415     uint32_t reserved_int3;
416     uint32_t reserved_int4;
417     uint64_t reserved_int5;
418     uint64_t reserved_int6;
419     uint64_t reserved_int7;
420     uint64_t reserved_int8;
421     void* reserved_ptr1;
422     void* reserved_ptr2;
423     void* reserved_ptr3;
424     void* reserved_ptr4;
425 }
426 
427 extern (C) uint64_t lzma_easy_encoder_memusage(uint32_t preset)
428 nothrow pure;
429 
430 extern (C) uint64_t lzma_easy_decoder_memusage(uint32_t preset)
431 nothrow pure;
432 
433 extern (C) lzma_ret lzma_easy_encoder(
434     lzma_stream* strm, uint32_t preset, lzma_check check)
435 nothrow;
436 
437 extern (C) lzma_ret lzma_easy_buffer_encode(
438     uint32_t preset, lzma_check check,
439     const lzma_allocator* allocator,
440     const uint8_t* in_, size_t in_size,
441     uint8_t* out_, size_t* out_pos, size_t out_size) nothrow;
442 
443 extern (C) lzma_ret lzma_stream_encoder(lzma_stream* strm,
444     const lzma_filter* filters, lzma_check check)
445 nothrow;
446 
447 extern (C) uint64_t lzma_stream_encoder_mt_memusage(
448     const lzma_mt* options) nothrow pure;
449 
450 extern (C) lzma_ret lzma_stream_encoder_mt(
451     lzma_stream* strm, const lzma_mt* options)
452 nothrow;
453 
454 extern (C) lzma_ret lzma_alone_encoder(
455     lzma_stream* strm, const lzma_options_lzma* options)
456 nothrow;
457 
458 extern (C) size_t lzma_stream_buffer_bound(size_t uncompressed_size)
459 nothrow;
460 
461 extern (C) lzma_ret lzma_stream_buffer_encode(
462     lzma_filter* filters, lzma_check check,
463     const lzma_allocator* allocator,
464     const uint8_t* in_, size_t in_size,
465     uint8_t* out_, size_t* out_pos, size_t out_size)
466 nothrow;
467 
468 /************
469  * Decoding *
470  ************/
471 enum uint32_t LZMA_TELL_NO_CHECK = 0x01;
472 
473 enum uint32_t LZMA_TELL_UNSUPPORTED_CHECK = 0x02;
474 
475 enum uint32_t LZMA_TELL_ANY_CHECK = 0x04;
476 
477 enum uint32_t LZMA_IGNORE_CHECK = 0x10;
478 
479 enum uint32_t LZMA_CONCATENATED = 0x08;
480 
481 extern (C) lzma_ret lzma_stream_decoder(
482     lzma_stream* strm, uint64_t memlimit, uint32_t flags)
483 nothrow;
484 
485 extern (C) lzma_ret lzma_auto_decoder(
486     lzma_stream* strm, uint64_t memlimit, uint32_t flags)
487 nothrow;
488 
489 extern (C) lzma_ret lzma_alone_decoder(
490     lzma_stream* strm, uint64_t memlimit)
491 nothrow;
492 
493 extern (C) lzma_ret lzma_stream_buffer_decode(
494     uint64_t* memlimit, uint32_t flags,
495     const lzma_allocator* allocator,
496     const uint8_t* in_, size_t* in_pos, size_t in_size,
497     uint8_t* out_, size_t* out_pos, size_t out_size)
498 nothrow;
499 
500 // lzma/stream_flags.h
501 
502 enum LZMA_STREAM_HEADER_SIZE = 12;
503 
504 enum LZMA_BACKWARD_SIZE_MIN = 4;
505 enum LZMA_BACKWARD_SIZE_MAX = (LZMA_VLI_C(1) << 34);
506 
507 struct lzma_stream_flags
508 {
509     uint32_t version_;
510     lzma_vli backward_size;
511     lzma_check check;
512 
513     lzma_reserved_enum reserved_enum1;
514     lzma_reserved_enum reserved_enum2;
515     lzma_reserved_enum reserved_enum3;
516     lzma_reserved_enum reserved_enum4;
517     lzma_bool reserved_bool1;
518     lzma_bool reserved_bool2;
519     lzma_bool reserved_bool3;
520     lzma_bool reserved_bool4;
521     lzma_bool reserved_bool5;
522     lzma_bool reserved_bool6;
523     lzma_bool reserved_bool7;
524     lzma_bool reserved_bool8;
525     uint32_t reserved_int1;
526     uint32_t reserved_int2;
527 }
528 
529 extern (C) lzma_ret lzma_stream_header_encode(
530     const lzma_stream_flags* options, uint8_t* out_)
531 nothrow;
532 
533 extern (C) lzma_ret lzma_stream_footer_encode(
534     const lzma_stream_flags* options, uint8_t* out_)
535 nothrow;
536 
537 extern (C) lzma_ret lzma_stream_header_decode(
538     lzma_stream_flags* options, const uint8_t* in_)
539 nothrow;
540 
541 extern (C) lzma_ret lzma_stream_footer_decode(
542     lzma_stream_flags* options, const uint8_t* in_)
543 nothrow;
544 
545 extern (C) lzma_ret lzma_stream_flags_compare(
546     const lzma_stream_flags* a, const lzma_stream_flags* b)
547 nothrow pure;
548 
549 // lzma/block.h
550 
551 enum LZMA_BLOCK_HEADER_SIZE_MIN = 8;
552 enum LZMA_BLOCK_HEADER_SIZE_MAX = 1024;
553 
554 struct lzma_block
555 {
556     uint32_t version_;
557 
558     uint32_t header_size;
559 
560     lzma_check check;
561 
562     lzma_vli compressed_size;
563 
564     lzma_vli uncompressed_size;
565 
566     lzma_filter* filters;
567 
568     uint8_t[LZMA_CHECK_SIZE_MAX] raw_check;
569 
570     void* reserved_ptr1;
571     void* reserved_ptr2;
572     void* reserved_ptr3;
573     uint32_t reserved_int1;
574     uint32_t reserved_int2;
575     lzma_vli reserved_int3;
576     lzma_vli reserved_int4;
577     lzma_vli reserved_int5;
578     lzma_vli reserved_int6;
579     lzma_vli reserved_int7;
580     lzma_vli reserved_int8;
581     lzma_reserved_enum reserved_enum1;
582     lzma_reserved_enum reserved_enum2;
583     lzma_reserved_enum reserved_enum3;
584     lzma_reserved_enum reserved_enum4;
585 
586     lzma_bool ignore_check;
587 
588     lzma_bool reserved_bool2;
589     lzma_bool reserved_bool3;
590     lzma_bool reserved_bool4;
591     lzma_bool reserved_bool5;
592     lzma_bool reserved_bool6;
593     lzma_bool reserved_bool7;
594     lzma_bool reserved_bool8;
595 }
596 
597 uint32_t lzma_block_header_size_decode(B)(B b)
598 {
599     return (b + 1) * 4;
600 }
601 
602 extern (C) lzma_ret lzma_block_header_size(lzma_block* block)
603 nothrow;
604 
605 extern (C) lzma_ret lzma_block_header_encode(
606     const lzma_block* block, uint8_t* out_)
607 nothrow;
608 
609 extern (C) lzma_ret lzma_block_header_decode(lzma_block* block,
610     const lzma_allocator* allocator, const uint8_t* in_)
611 nothrow;
612 
613 extern (C) lzma_ret lzma_block_compressed_size(
614     lzma_block* block, lzma_vli unpadded_size)
615 nothrow;
616 
617 extern (C) lzma_vli lzma_block_unpadded_size(const lzma_block* block)
618 nothrow pure;
619 
620 extern (C) lzma_vli lzma_block_total_size(const lzma_block* block)
621 nothrow pure;
622 
623 extern (C) lzma_ret lzma_block_encoder(
624     lzma_stream* strm, lzma_block* block)
625 nothrow;
626 
627 extern (C) lzma_ret lzma_block_decoder(
628     lzma_stream* strm, lzma_block* block)
629 nothrow;
630 
631 extern (C) size_t lzma_block_buffer_bound(size_t uncompressed_size)
632 nothrow;
633 
634 extern (C) lzma_ret lzma_block_buffer_encode(
635     lzma_block* block, const lzma_allocator* allocator,
636     const uint8_t* in_, size_t in_size,
637     uint8_t* out_, size_t* out_pos, size_t out_size)
638 nothrow;
639 
640 extern (C) lzma_ret lzma_block_uncomp_encode(lzma_block* block,
641     const uint8_t* in_, size_t in_size,
642     uint8_t* out_, size_t* out_pos, size_t out_size)
643 nothrow;
644 
645 extern (C) lzma_ret lzma_block_buffer_decode(
646     lzma_block* block, const lzma_allocator* allocator,
647     const uint8_t* in_, size_t* in_pos, size_t in_size,
648     uint8_t* out_, size_t* out_pos, size_t out_size)
649 nothrow;
650 
651 // lzma/index.h
652 
653 struct lzma_index;
654 
655 struct lzma_index_iter_stream
656 {
657     const lzma_stream_flags* flags;
658 
659     const void* reserved_ptr1;
660     const void* reserved_ptr2;
661     const void* reserved_ptr3;
662 
663     lzma_vli number;
664 
665     lzma_vli block_count;
666 
667     lzma_vli compressed_offset;
668 
669     lzma_vli uncompressed_offset;
670 
671     lzma_vli compressed_size;
672 
673     lzma_vli uncompressed_size;
674 
675     lzma_vli padding;
676 
677     lzma_vli reserved_vli1;
678     lzma_vli reserved_vli2;
679     lzma_vli reserved_vli3;
680     lzma_vli reserved_vli4;
681 }
682 
683 struct lzma_index_iter_block
684 {
685     lzma_vli number_in_file;
686 
687     lzma_vli compressed_file_offset;
688 
689     lzma_vli uncompressed_file_offset;
690 
691     lzma_vli number_in_stream;
692 
693     lzma_vli compressed_stream_offset;
694 
695     lzma_vli uncompressed_stream_offset;
696 
697     lzma_vli uncompressed_size;
698 
699     lzma_vli unpadded_size;
700 
701     lzma_vli total_size;
702 
703     lzma_vli reserved_vli1;
704     lzma_vli reserved_vli2;
705     lzma_vli reserved_vli3;
706     lzma_vli reserved_vli4;
707 
708     const void* reserved_ptr1;
709     const void* reserved_ptr2;
710     const void* reserved_ptr3;
711     const void* reserved_ptr4;
712 }
713 
714 union lzma_index_iter_internal
715 {
716     const void* p;
717     size_t s;
718     lzma_vli v;
719 }
720 
721 struct lzma_index_iter
722 {
723     lzma_index_iter_stream stream;
724     lzma_index_iter_block block;
725     lzma_index_iter_internal[6] internal;
726 }
727 
728 enum lzma_index_iter_mode
729 {
730     LZMA_INDEX_ITER_ANY = 0,
731 
732     LZMA_INDEX_ITER_STREAM = 1,
733 
734     LZMA_INDEX_ITER_BLOCK = 2,
735 
736     LZMA_INDEX_ITER_NONEMPTY_BLOCK = 3
737 }
738 
739 extern (C) uint64_t lzma_index_memusage(
740     lzma_vli streams, lzma_vli blocks) nothrow;
741 
742 extern (C) uint64_t lzma_index_memused(const lzma_index* i)
743 nothrow;
744 
745 extern (C) lzma_index* lzma_index_init(const lzma_allocator* allocator)
746 nothrow;
747 
748 extern (C) void lzma_index_end(
749     lzma_index* i, const lzma_allocator* allocator) nothrow;
750 
751 extern (C) lzma_ret lzma_index_append(
752     lzma_index* i, const lzma_allocator* allocator,
753     lzma_vli unpadded_size, lzma_vli uncompressed_size)
754 nothrow;
755 
756 extern (C) lzma_ret lzma_index_stream_flags(
757     lzma_index* i, const lzma_stream_flags* stream_flags)
758 nothrow;
759 
760 extern (C) uint32_t lzma_index_checks(const lzma_index* i)
761 nothrow pure;
762 
763 extern (C) lzma_ret lzma_index_stream_padding(
764     lzma_index* i, lzma_vli stream_padding)
765 nothrow;
766 
767 extern (C) lzma_vli lzma_index_stream_count(const lzma_index* i)
768 nothrow pure;
769 
770 extern (C) lzma_vli lzma_index_block_count(const lzma_index* i)
771 nothrow pure;
772 
773 extern (C) lzma_vli lzma_index_size(const lzma_index* i)
774 nothrow pure;
775 
776 extern (C) lzma_vli lzma_index_stream_size(const lzma_index* i)
777 nothrow pure;
778 
779 extern (C) lzma_vli lzma_index_total_size(const lzma_index* i)
780 nothrow pure;
781 
782 extern (C) lzma_vli lzma_index_file_size(const lzma_index* i)
783 nothrow pure;
784 
785 extern (C) lzma_vli lzma_index_uncompressed_size(const lzma_index* i)
786 nothrow pure;
787 
788 extern (C) void lzma_index_iter_init(
789     lzma_index_iter* iter, const lzma_index* i) nothrow;
790 
791 extern (C) void lzma_index_iter_rewind(lzma_index_iter* iter)
792 nothrow;
793 
794 extern (C) lzma_bool lzma_index_iter_next(
795     lzma_index_iter* iter, lzma_index_iter_mode mode)
796 nothrow;
797 
798 extern (C) lzma_bool lzma_index_iter_locate(
799     lzma_index_iter* iter, lzma_vli target) nothrow;
800 
801 extern (C) lzma_ret lzma_index_cat(lzma_index* dest, lzma_index* src,
802     const lzma_allocator* allocator)
803 nothrow;
804 
805 extern (C) lzma_index* lzma_index_dup(
806     const lzma_index* i, const lzma_allocator* allocator)
807 nothrow;
808 
809 extern (C) lzma_ret lzma_index_encoder(
810     lzma_stream* strm, const lzma_index* i)
811 nothrow;
812 
813 extern (C) lzma_ret lzma_index_decoder(
814     lzma_stream* strm, lzma_index** i, uint64_t memlimit)
815 nothrow;
816 
817 extern (C) lzma_ret lzma_index_buffer_encode(const lzma_index* i,
818     uint8_t* out_, size_t* out_pos, size_t out_size) nothrow;
819 
820 extern (C) lzma_ret lzma_index_buffer_decode(lzma_index** i,
821     uint64_t* memlimit, const lzma_allocator* allocator,
822     const uint8_t* in_, size_t* in_pos, size_t in_size)
823 nothrow;
824 
825 // lzma/index_hash.h
826 
827 struct lzma_index_hash;
828 
829 extern (C) lzma_index_hash* lzma_index_hash_init(
830     lzma_index_hash* index_hash, const lzma_allocator* allocator)
831 nothrow;
832 
833 extern (C) void lzma_index_hash_end(
834     lzma_index_hash* index_hash, const lzma_allocator* allocator)
835 nothrow;
836 
837 extern (C) lzma_ret lzma_index_hash_append(lzma_index_hash* index_hash,
838     lzma_vli unpadded_size, lzma_vli uncompressed_size)
839 nothrow;
840 
841 extern (C) lzma_ret lzma_index_hash_decode(lzma_index_hash* index_hash,
842     const uint8_t* in_, size_t* in_pos, size_t in_size)
843 nothrow;
844 
845 extern (C) lzma_vli lzma_index_hash_size(
846     const lzma_index_hash* index_hash)
847 nothrow pure;
848 
849 // lzma/hardware.h
850 
851 extern (C) uint64_t lzma_physmem() nothrow;
852 
853 extern (C) uint32_t lzma_cputhreads() nothrow;