extlzham 0.0.1.PROTOTYPE3-x86-mingw32

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.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.md +27 -0
  3. data/README.md +74 -0
  4. data/Rakefile +152 -0
  5. data/contrib/lzham/LICENSE +22 -0
  6. data/contrib/lzham/README.md +209 -0
  7. data/contrib/lzham/include/lzham.h +781 -0
  8. data/contrib/lzham/lzhamcomp/lzham_comp.h +38 -0
  9. data/contrib/lzham/lzhamcomp/lzham_lzbase.cpp +244 -0
  10. data/contrib/lzham/lzhamcomp/lzham_lzbase.h +45 -0
  11. data/contrib/lzham/lzhamcomp/lzham_lzcomp.cpp +608 -0
  12. data/contrib/lzham/lzhamcomp/lzham_lzcomp_internal.cpp +1966 -0
  13. data/contrib/lzham/lzhamcomp/lzham_lzcomp_internal.h +472 -0
  14. data/contrib/lzham/lzhamcomp/lzham_lzcomp_state.cpp +1413 -0
  15. data/contrib/lzham/lzhamcomp/lzham_match_accel.cpp +562 -0
  16. data/contrib/lzham/lzhamcomp/lzham_match_accel.h +146 -0
  17. data/contrib/lzham/lzhamcomp/lzham_null_threading.h +97 -0
  18. data/contrib/lzham/lzhamcomp/lzham_pthreads_threading.cpp +229 -0
  19. data/contrib/lzham/lzhamcomp/lzham_pthreads_threading.h +520 -0
  20. data/contrib/lzham/lzhamcomp/lzham_threading.h +12 -0
  21. data/contrib/lzham/lzhamcomp/lzham_win32_threading.cpp +220 -0
  22. data/contrib/lzham/lzhamcomp/lzham_win32_threading.h +368 -0
  23. data/contrib/lzham/lzhamdecomp/lzham_assert.cpp +66 -0
  24. data/contrib/lzham/lzhamdecomp/lzham_assert.h +40 -0
  25. data/contrib/lzham/lzhamdecomp/lzham_checksum.cpp +73 -0
  26. data/contrib/lzham/lzhamdecomp/lzham_checksum.h +13 -0
  27. data/contrib/lzham/lzhamdecomp/lzham_config.h +23 -0
  28. data/contrib/lzham/lzhamdecomp/lzham_core.h +264 -0
  29. data/contrib/lzham/lzhamdecomp/lzham_decomp.h +37 -0
  30. data/contrib/lzham/lzhamdecomp/lzham_helpers.h +54 -0
  31. data/contrib/lzham/lzhamdecomp/lzham_huffman_codes.cpp +262 -0
  32. data/contrib/lzham/lzhamdecomp/lzham_huffman_codes.h +14 -0
  33. data/contrib/lzham/lzhamdecomp/lzham_lzdecomp.cpp +1527 -0
  34. data/contrib/lzham/lzhamdecomp/lzham_lzdecompbase.cpp +131 -0
  35. data/contrib/lzham/lzhamdecomp/lzham_lzdecompbase.h +89 -0
  36. data/contrib/lzham/lzhamdecomp/lzham_math.h +142 -0
  37. data/contrib/lzham/lzhamdecomp/lzham_mem.cpp +284 -0
  38. data/contrib/lzham/lzhamdecomp/lzham_mem.h +112 -0
  39. data/contrib/lzham/lzhamdecomp/lzham_platform.cpp +157 -0
  40. data/contrib/lzham/lzhamdecomp/lzham_platform.h +284 -0
  41. data/contrib/lzham/lzhamdecomp/lzham_prefix_coding.cpp +351 -0
  42. data/contrib/lzham/lzhamdecomp/lzham_prefix_coding.h +146 -0
  43. data/contrib/lzham/lzhamdecomp/lzham_symbol_codec.cpp +1484 -0
  44. data/contrib/lzham/lzhamdecomp/lzham_symbol_codec.h +556 -0
  45. data/contrib/lzham/lzhamdecomp/lzham_timer.cpp +147 -0
  46. data/contrib/lzham/lzhamdecomp/lzham_timer.h +99 -0
  47. data/contrib/lzham/lzhamdecomp/lzham_traits.h +141 -0
  48. data/contrib/lzham/lzhamdecomp/lzham_types.h +97 -0
  49. data/contrib/lzham/lzhamdecomp/lzham_utils.h +58 -0
  50. data/contrib/lzham/lzhamdecomp/lzham_vector.cpp +75 -0
  51. data/contrib/lzham/lzhamdecomp/lzham_vector.h +588 -0
  52. data/contrib/lzham/lzhamlib/lzham_lib.cpp +179 -0
  53. data/examples/basic.rb +48 -0
  54. data/ext/constants.c +64 -0
  55. data/ext/decoder.c +313 -0
  56. data/ext/depend +5 -0
  57. data/ext/encoder.c +372 -0
  58. data/ext/error.c +80 -0
  59. data/ext/extconf.rb +29 -0
  60. data/ext/extlzham.c +34 -0
  61. data/ext/extlzham.h +62 -0
  62. data/gemstub.rb +22 -0
  63. data/lib/2.0/extlzham.so +0 -0
  64. data/lib/2.1/extlzham.so +0 -0
  65. data/lib/2.2/extlzham.so +0 -0
  66. data/lib/extlzham.rb +158 -0
  67. data/lib/extlzham/version.rb +5 -0
  68. data/test/test_extlzham.rb +35 -0
  69. metadata +156 -0
@@ -0,0 +1,38 @@
1
+ // File: lzham_comp.h
2
+ // See Copyright Notice and license at the end of include/lzham.h
3
+ #pragma once
4
+ #include "lzham.h"
5
+
6
+ namespace lzham
7
+ {
8
+ lzham_compress_state_ptr LZHAM_CDECL lzham_lib_compress_init(const lzham_compress_params *pParams);
9
+
10
+ lzham_compress_state_ptr LZHAM_CDECL lzham_lib_compress_reinit(lzham_compress_state_ptr p);
11
+
12
+ lzham_uint32 LZHAM_CDECL lzham_lib_compress_deinit(lzham_compress_state_ptr p);
13
+
14
+ lzham_compress_status_t LZHAM_CDECL lzham_lib_compress(
15
+ lzham_compress_state_ptr p,
16
+ const lzham_uint8 *pIn_buf, size_t *pIn_buf_size,
17
+ lzham_uint8 *pOut_buf, size_t *pOut_buf_size,
18
+ lzham_bool no_more_input_bytes_flag);
19
+
20
+ lzham_compress_status_t LZHAM_CDECL lzham_lib_compress2(
21
+ lzham_compress_state_ptr p,
22
+ const lzham_uint8 *pIn_buf, size_t *pIn_buf_size,
23
+ lzham_uint8 *pOut_buf, size_t *pOut_buf_size,
24
+ lzham_flush_t flush_type);
25
+
26
+ lzham_compress_status_t LZHAM_CDECL lzham_lib_compress_memory(const lzham_compress_params *pParams, lzham_uint8* pDst_buf, size_t *pDst_len, const lzham_uint8* pSrc_buf, size_t src_len, lzham_uint32 *pAdler32);
27
+
28
+ int lzham_lib_z_deflateInit(lzham_z_streamp pStream, int level);
29
+ int lzham_lib_z_deflateInit2(lzham_z_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy);
30
+ int lzham_lib_z_deflateReset(lzham_z_streamp pStream);
31
+ int lzham_lib_z_deflate(lzham_z_streamp pStream, int flush);
32
+ int lzham_lib_z_deflateEnd(lzham_z_streamp pStream);
33
+ lzham_z_ulong lzham_lib_z_deflateBound(lzham_z_streamp pStream, lzham_z_ulong source_len);
34
+ int lzham_lib_z_compress2(unsigned char *pDest, lzham_z_ulong *pDest_len, const unsigned char *pSource, lzham_z_ulong source_len, int level);
35
+ int lzham_lib_z_compress(unsigned char *pDest, lzham_z_ulong *pDest_len, const unsigned char *pSource, lzham_z_ulong source_len);
36
+ lzham_z_ulong lzham_lib_z_compressBound(lzham_z_ulong source_len);
37
+
38
+ } // namespace lzham
@@ -0,0 +1,244 @@
1
+ // File: lzham_lzbase.cpp
2
+ // See Copyright Notice and license at the end of include/lzham.h
3
+ #include "lzham_core.h"
4
+ #include "lzham_lzbase.h"
5
+
6
+ namespace lzham
7
+ {
8
+ uint8 CLZBase::m_slot_tab0[4096] =
9
+ {
10
+ 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
11
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
12
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
13
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
14
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
15
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
16
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
17
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
18
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
19
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
20
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
21
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
22
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
23
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
24
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
25
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
26
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
27
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
28
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
29
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
30
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
31
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
32
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
33
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
34
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
35
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
36
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
37
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
38
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
39
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
40
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
41
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
42
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
43
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
44
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
45
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
46
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
47
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
48
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
49
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
50
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
51
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
52
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
53
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
54
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
55
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
56
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
57
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
58
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
59
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
60
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
61
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
62
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
63
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
64
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
65
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
66
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
67
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
68
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
69
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
70
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
71
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
72
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
73
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
74
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
75
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
76
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
77
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
78
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
79
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
80
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
81
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
82
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
83
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
84
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
85
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
86
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
87
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
88
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
89
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
90
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
91
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
92
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
93
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
94
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
95
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
96
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
97
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
98
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
99
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
100
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
101
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
102
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
103
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
104
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
105
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
106
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
107
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
108
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
109
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
110
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
111
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
112
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
113
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
114
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
115
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
116
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
117
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
118
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
119
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
120
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
121
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
122
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
123
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
124
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
125
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
126
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
127
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
128
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
129
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
130
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
131
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
132
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
133
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
134
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
135
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
136
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
137
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23
138
+ };
139
+
140
+ uint8 CLZBase::m_slot_tab1[512] =
141
+ {
142
+ 0, 0, 24, 25, 26, 26, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31,
143
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
144
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
145
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
146
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
147
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
148
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
149
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
150
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
151
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
152
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
153
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
154
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
155
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
156
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
157
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39
158
+ };
159
+
160
+ uint8 CLZBase::m_slot_tab2[256] =
161
+ {
162
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41,
163
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
164
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
165
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
166
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
167
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
168
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
169
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47
170
+ };
171
+
172
+ void CLZBase::init_slot_tabs()
173
+ {
174
+ #if 0
175
+ for (uint i = 0; i < m_num_lzx_slots; i++)
176
+ {
177
+ //printf("%u: 0x%08X - 0x%08X, %u\n", i, m_lzx_position_base[i], m_lzx_position_base[i] + (1 << m_lzx_position_extra_bits[i]) - 1, m_lzx_position_extra_bits[i]);
178
+
179
+ uint lo = m_lzx_position_base[i];
180
+ uint hi = lo + m_lzx_position_extra_mask[i];
181
+
182
+ uint8* pTab;
183
+ uint shift;
184
+ uint n; LZHAM_NOTE_UNUSED(n);
185
+
186
+ if (hi < 0x1000)
187
+ {
188
+ pTab = m_slot_tab0;
189
+ shift = 0;
190
+ n = sizeof(m_slot_tab0);
191
+ }
192
+ else if (hi < 0x100000)
193
+ {
194
+ pTab = m_slot_tab1;
195
+ shift = 11;
196
+ n = sizeof(m_slot_tab1);
197
+ }
198
+ else if (hi < 0x1000000)
199
+ {
200
+ pTab = m_slot_tab2;
201
+ shift = 16;
202
+ n = sizeof(m_slot_tab2);
203
+ }
204
+ else
205
+ break;
206
+
207
+ lo >>= shift;
208
+ hi >>= shift;
209
+
210
+ LZHAM_ASSERT(hi < n);
211
+ memset(pTab + lo, (uint8)i, hi - lo + 1);
212
+ }
213
+
214
+ for (uint i = 0; i < 256; i++)
215
+ {
216
+ printf("%u, ", m_slot_tab2[i]);
217
+ if ((i & 31) == 31) printf("\n");
218
+ }
219
+ #endif
220
+
221
+ #ifdef LZHAM_BUILD_DEBUG
222
+ uint slot, ofs;
223
+ for (uint i = 1; i < m_num_lzx_slots; i++)
224
+ {
225
+ compute_lzx_position_slot(m_lzx_position_base[i], slot, ofs);
226
+ LZHAM_ASSERT(slot == i);
227
+
228
+ compute_lzx_position_slot(m_lzx_position_base[i] + m_lzx_position_extra_mask[i], slot, ofs);
229
+ LZHAM_ASSERT(slot == i);
230
+ }
231
+
232
+ for (uint i = 1; i <= (m_dict_size-1); i += 512U*1024U)
233
+ {
234
+ compute_lzx_position_slot(i, slot, ofs);
235
+ LZHAM_ASSERT(i == m_lzx_position_base[slot] + ofs);
236
+ }
237
+
238
+ compute_lzx_position_slot(m_dict_size - 1, slot, ofs);
239
+ LZHAM_ASSERT((m_dict_size - 1) == m_lzx_position_base[slot] + ofs);
240
+ #endif
241
+ }
242
+
243
+ } //namespace lzham
244
+
@@ -0,0 +1,45 @@
1
+ // File: lzham_lzbase.h
2
+ // See Copyright Notice and license at the end of include/lzham.h
3
+ #pragma once
4
+
5
+ #include "lzham_lzdecompbase.h"
6
+
7
+ //#define LZHAM_LZVERIFY
8
+ //#define LZHAM_DISABLE_RAW_BLOCKS
9
+
10
+ namespace lzham
11
+ {
12
+ struct CLZBase : CLZDecompBase
13
+ {
14
+ static uint8 m_slot_tab0[4096];
15
+ static uint8 m_slot_tab1[512];
16
+ static uint8 m_slot_tab2[256];
17
+
18
+ void init_slot_tabs();
19
+
20
+ inline void compute_lzx_position_slot(uint dist, uint& slot, uint& ofs)
21
+ {
22
+ uint s;
23
+ if (dist < 0x1000)
24
+ s = m_slot_tab0[dist];
25
+ else if (dist < 0x100000)
26
+ s = m_slot_tab1[dist >> 11];
27
+ else if (dist < 0x1000000)
28
+ s = m_slot_tab2[dist >> 16];
29
+ else if (dist < 0x2000000)
30
+ s = 48 + ((dist - 0x1000000) >> 23);
31
+ else if (dist < 0x4000000)
32
+ s = 50 + ((dist - 0x2000000) >> 24);
33
+ else
34
+ s = 52 + ((dist - 0x4000000) >> 25);
35
+
36
+ ofs = (dist - m_lzx_position_base[s]) & m_lzx_position_extra_mask[s];
37
+ slot = s;
38
+
39
+ LZHAM_ASSERT(s < m_num_lzx_slots);
40
+ LZHAM_ASSERT((m_lzx_position_base[slot] + ofs) == dist);
41
+ LZHAM_ASSERT(ofs < (1U << m_lzx_position_extra_bits[slot]));
42
+ }
43
+ };
44
+
45
+ } // namespace lzham
@@ -0,0 +1,608 @@
1
+ // File: lzham_lzcomp.cpp
2
+ // See Copyright Notice and license at the end of include/lzham.h
3
+ #include "lzham_core.h"
4
+ #include "lzham.h"
5
+ #include "lzham_comp.h"
6
+ #include "lzham_lzcomp_internal.h"
7
+
8
+ using namespace lzham;
9
+
10
+ namespace lzham
11
+ {
12
+ struct lzham_compress_state
13
+ {
14
+ // task_pool requires 8 or 16 alignment
15
+ task_pool m_tp;
16
+ lzcompressor m_compressor;
17
+
18
+ uint m_dict_size_log2;
19
+
20
+ const uint8 *m_pIn_buf;
21
+ size_t *m_pIn_buf_size;
22
+ uint8 *m_pOut_buf;
23
+ size_t *m_pOut_buf_size;
24
+
25
+ size_t m_comp_data_ofs;
26
+
27
+ bool m_finished_compression;
28
+
29
+ lzham_compress_params m_params;
30
+
31
+ lzham_compress_status_t m_status;
32
+ };
33
+
34
+ static lzham_compress_status_t create_internal_init_params(lzcompressor::init_params &internal_params, const lzham_compress_params *pParams)
35
+ {
36
+ if ((pParams->m_dict_size_log2 < CLZBase::cMinDictSizeLog2) || (pParams->m_dict_size_log2 > CLZBase::cMaxDictSizeLog2))
37
+ return LZHAM_COMP_STATUS_INVALID_PARAMETER;
38
+
39
+ internal_params.m_dict_size_log2 = pParams->m_dict_size_log2;
40
+
41
+ if (pParams->m_max_helper_threads < 0)
42
+ internal_params.m_max_helper_threads = lzham_get_max_helper_threads();
43
+ else
44
+ internal_params.m_max_helper_threads = pParams->m_max_helper_threads;
45
+ internal_params.m_max_helper_threads = LZHAM_MIN(LZHAM_MAX_HELPER_THREADS, internal_params.m_max_helper_threads);
46
+
47
+ internal_params.m_lzham_compress_flags = pParams->m_compress_flags;
48
+
49
+ if (pParams->m_num_seed_bytes)
50
+ {
51
+ if ((!pParams->m_pSeed_bytes) || (pParams->m_num_seed_bytes > (1U << pParams->m_dict_size_log2)))
52
+ return LZHAM_COMP_STATUS_INVALID_PARAMETER;
53
+
54
+ internal_params.m_num_seed_bytes = pParams->m_num_seed_bytes;
55
+ internal_params.m_pSeed_bytes = pParams->m_pSeed_bytes;
56
+ }
57
+
58
+ switch (pParams->m_level)
59
+ {
60
+ case LZHAM_COMP_LEVEL_FASTEST: internal_params.m_compression_level = cCompressionLevelFastest; break;
61
+ case LZHAM_COMP_LEVEL_FASTER: internal_params.m_compression_level = cCompressionLevelFaster; break;
62
+ case LZHAM_COMP_LEVEL_DEFAULT: internal_params.m_compression_level = cCompressionLevelDefault; break;
63
+ case LZHAM_COMP_LEVEL_BETTER: internal_params.m_compression_level = cCompressionLevelBetter; break;
64
+ case LZHAM_COMP_LEVEL_UBER: internal_params.m_compression_level = cCompressionLevelUber; break;
65
+ default:
66
+ return LZHAM_COMP_STATUS_INVALID_PARAMETER;
67
+ };
68
+
69
+ if (pParams->m_table_max_update_interval || pParams->m_table_update_interval_slow_rate)
70
+ {
71
+ internal_params.m_table_max_update_interval = pParams->m_table_max_update_interval;
72
+ internal_params.m_table_update_interval_slow_rate = pParams->m_table_update_interval_slow_rate;
73
+ }
74
+ else
75
+ {
76
+ uint rate = pParams->m_table_update_rate;
77
+ if (!rate)
78
+ rate = LZHAM_DEFAULT_TABLE_UPDATE_RATE;
79
+ rate = math::clamp<uint>(rate, 1, LZHAM_FASTEST_TABLE_UPDATE_RATE) - 1;
80
+ internal_params.m_table_max_update_interval = g_table_update_settings[rate].m_max_update_interval;
81
+ internal_params.m_table_update_interval_slow_rate = g_table_update_settings[rate].m_slow_rate;
82
+ }
83
+
84
+ return LZHAM_COMP_STATUS_SUCCESS;
85
+ }
86
+
87
+ lzham_compress_state_ptr LZHAM_CDECL lzham_lib_compress_init(const lzham_compress_params *pParams)
88
+ {
89
+ if ((!pParams) || (pParams->m_struct_size != sizeof(lzham_compress_params)))
90
+ return NULL;
91
+
92
+ if ((pParams->m_dict_size_log2 < CLZBase::cMinDictSizeLog2) || (pParams->m_dict_size_log2 > CLZBase::cMaxDictSizeLog2))
93
+ return NULL;
94
+
95
+ lzcompressor::init_params internal_params;
96
+ lzham_compress_status_t status = create_internal_init_params(internal_params, pParams);
97
+ if (status != LZHAM_COMP_STATUS_SUCCESS)
98
+ return NULL;
99
+
100
+ lzham_compress_state *pState = lzham_new<lzham_compress_state>();
101
+ if (!pState)
102
+ return NULL;
103
+
104
+ pState->m_params = *pParams;
105
+
106
+ pState->m_pIn_buf = NULL;
107
+ pState->m_pIn_buf_size = NULL;
108
+ pState->m_pOut_buf = NULL;
109
+ pState->m_pOut_buf_size = NULL;
110
+ pState->m_status = LZHAM_COMP_STATUS_NOT_FINISHED;
111
+ pState->m_comp_data_ofs = 0;
112
+ pState->m_finished_compression = false;
113
+
114
+ if (internal_params.m_max_helper_threads)
115
+ {
116
+ if (!pState->m_tp.init(internal_params.m_max_helper_threads))
117
+ {
118
+ lzham_delete(pState);
119
+ return NULL;
120
+ }
121
+ if (pState->m_tp.get_num_threads() >= internal_params.m_max_helper_threads)
122
+ {
123
+ internal_params.m_pTask_pool = &pState->m_tp;
124
+ }
125
+ else
126
+ {
127
+ internal_params.m_max_helper_threads = 0;
128
+ }
129
+ }
130
+
131
+ if (!pState->m_compressor.init(internal_params))
132
+ {
133
+ lzham_delete(pState);
134
+ return NULL;
135
+ }
136
+
137
+ return pState;
138
+ }
139
+
140
+ lzham_compress_state_ptr LZHAM_CDECL lzham_lib_compress_reinit(lzham_compress_state_ptr p)
141
+ {
142
+ lzham_compress_state *pState = static_cast<lzham_compress_state*>(p);
143
+ if (pState)
144
+ {
145
+ if (!pState->m_compressor.reset())
146
+ return NULL;
147
+
148
+ pState->m_pIn_buf = NULL;
149
+ pState->m_pIn_buf_size = NULL;
150
+ pState->m_pOut_buf = NULL;
151
+ pState->m_pOut_buf_size = NULL;
152
+ pState->m_status = LZHAM_COMP_STATUS_NOT_FINISHED;
153
+ pState->m_comp_data_ofs = 0;
154
+ pState->m_finished_compression = false;
155
+ }
156
+
157
+ return pState;
158
+ }
159
+
160
+ lzham_uint32 LZHAM_CDECL lzham_lib_compress_deinit(lzham_compress_state_ptr p)
161
+ {
162
+ lzham_compress_state *pState = static_cast<lzham_compress_state *>(p);
163
+ if (!pState)
164
+ return 0;
165
+
166
+ uint32 adler32 = pState->m_compressor.get_src_adler32();
167
+
168
+ lzham_delete(pState);
169
+
170
+ return adler32;
171
+ }
172
+
173
+ lzham_compress_status_t LZHAM_CDECL lzham_lib_compress(
174
+ lzham_compress_state_ptr p,
175
+ const lzham_uint8 *pIn_buf, size_t *pIn_buf_size,
176
+ lzham_uint8 *pOut_buf, size_t *pOut_buf_size,
177
+ lzham_bool no_more_input_bytes_flag)
178
+ {
179
+ return lzham_lib_compress2(p, pIn_buf, pIn_buf_size, pOut_buf, pOut_buf_size, no_more_input_bytes_flag ? LZHAM_FINISH : LZHAM_NO_FLUSH);
180
+ }
181
+
182
+ lzham_compress_status_t LZHAM_CDECL lzham_lib_compress2(
183
+ lzham_compress_state_ptr p,
184
+ const lzham_uint8 *pIn_buf, size_t *pIn_buf_size,
185
+ lzham_uint8 *pOut_buf, size_t *pOut_buf_size,
186
+ lzham_flush_t flush_type)
187
+ {
188
+ lzham_compress_state *pState = static_cast<lzham_compress_state*>(p);
189
+
190
+ if ((!pState) || (!pState->m_params.m_dict_size_log2) || (pState->m_status >= LZHAM_COMP_STATUS_FIRST_SUCCESS_OR_FAILURE_CODE) || (!pIn_buf_size) || (!pOut_buf_size))
191
+ return LZHAM_COMP_STATUS_INVALID_PARAMETER;
192
+
193
+ if ((*pIn_buf_size) && (!pIn_buf))
194
+ return LZHAM_COMP_STATUS_INVALID_PARAMETER;
195
+
196
+ if ((!*pOut_buf_size) || (!pOut_buf))
197
+ return LZHAM_COMP_STATUS_INVALID_PARAMETER;
198
+
199
+ byte_vec &comp_data = pState->m_compressor.get_compressed_data();
200
+ size_t num_bytes_written_to_out_buf = 0;
201
+ if (pState->m_comp_data_ofs < comp_data.size())
202
+ {
203
+ size_t n = LZHAM_MIN(comp_data.size() - pState->m_comp_data_ofs, *pOut_buf_size);
204
+
205
+ memcpy(pOut_buf, comp_data.get_ptr() + pState->m_comp_data_ofs, n);
206
+
207
+ pState->m_comp_data_ofs += n;
208
+
209
+ const bool has_no_more_output = (pState->m_comp_data_ofs >= comp_data.size());
210
+ if (has_no_more_output)
211
+ {
212
+ pOut_buf += n;
213
+ *pOut_buf_size -= n;
214
+ num_bytes_written_to_out_buf += n;
215
+ }
216
+ else
217
+ {
218
+ *pIn_buf_size = 0;
219
+ *pOut_buf_size = n;
220
+ pState->m_status = LZHAM_COMP_STATUS_HAS_MORE_OUTPUT;
221
+ return pState->m_status;
222
+ }
223
+ }
224
+
225
+ comp_data.try_resize(0);
226
+ pState->m_comp_data_ofs = 0;
227
+
228
+ if (pState->m_finished_compression)
229
+ {
230
+ if ((*pIn_buf_size) || (flush_type != LZHAM_FINISH))
231
+ {
232
+ pState->m_status = LZHAM_COMP_STATUS_INVALID_PARAMETER;
233
+ return pState->m_status;
234
+ }
235
+
236
+ *pIn_buf_size = 0;
237
+ *pOut_buf_size = num_bytes_written_to_out_buf;
238
+
239
+ pState->m_status = LZHAM_COMP_STATUS_SUCCESS;
240
+ return pState->m_status;
241
+ }
242
+
243
+ const size_t cMaxBytesToPutPerIteration = 4*1024*1024;
244
+ size_t bytes_to_put = LZHAM_MIN(cMaxBytesToPutPerIteration, *pIn_buf_size);
245
+ const bool consumed_entire_input_buf = (bytes_to_put == *pIn_buf_size);
246
+
247
+ if (bytes_to_put)
248
+ {
249
+ if (!pState->m_compressor.put_bytes(pIn_buf, (uint)bytes_to_put))
250
+ {
251
+ *pIn_buf_size = 0;
252
+ *pOut_buf_size = num_bytes_written_to_out_buf;
253
+ pState->m_status = LZHAM_COMP_STATUS_FAILED;
254
+ return pState->m_status;
255
+ }
256
+ }
257
+
258
+ if ((consumed_entire_input_buf) && (flush_type != LZHAM_NO_FLUSH))
259
+ {
260
+ if ((flush_type == LZHAM_SYNC_FLUSH) || (flush_type == LZHAM_FULL_FLUSH) || (flush_type == LZHAM_TABLE_FLUSH))
261
+ {
262
+ if (!pState->m_compressor.flush(flush_type))
263
+ {
264
+ *pIn_buf_size = 0;
265
+ *pOut_buf_size = num_bytes_written_to_out_buf;
266
+ pState->m_status = LZHAM_COMP_STATUS_FAILED;
267
+ return pState->m_status;
268
+ }
269
+ }
270
+ else if (!pState->m_finished_compression)
271
+ {
272
+ if (!pState->m_compressor.put_bytes(NULL, 0))
273
+ {
274
+ *pIn_buf_size = 0;
275
+ *pOut_buf_size = num_bytes_written_to_out_buf;
276
+ pState->m_status = LZHAM_COMP_STATUS_FAILED;
277
+ return pState->m_status;
278
+ }
279
+ pState->m_finished_compression = true;
280
+ }
281
+ }
282
+
283
+ size_t num_comp_bytes_to_output = LZHAM_MIN(comp_data.size() - pState->m_comp_data_ofs, *pOut_buf_size);
284
+ if (num_comp_bytes_to_output)
285
+ {
286
+ memcpy(pOut_buf, comp_data.get_ptr() + pState->m_comp_data_ofs, num_comp_bytes_to_output);
287
+
288
+ pState->m_comp_data_ofs += num_comp_bytes_to_output;
289
+ }
290
+
291
+ *pIn_buf_size = bytes_to_put;
292
+ *pOut_buf_size = num_bytes_written_to_out_buf + num_comp_bytes_to_output;
293
+
294
+ const bool has_no_more_output = (pState->m_comp_data_ofs >= comp_data.size());
295
+ if ((has_no_more_output) && (flush_type == LZHAM_FINISH) && (pState->m_finished_compression))
296
+ pState->m_status = LZHAM_COMP_STATUS_SUCCESS;
297
+ else if ((has_no_more_output) && (consumed_entire_input_buf) && (flush_type == LZHAM_NO_FLUSH))
298
+ pState->m_status = LZHAM_COMP_STATUS_NEEDS_MORE_INPUT;
299
+ else
300
+ pState->m_status = has_no_more_output ? LZHAM_COMP_STATUS_NOT_FINISHED : LZHAM_COMP_STATUS_HAS_MORE_OUTPUT;
301
+
302
+ return pState->m_status;
303
+ }
304
+
305
+ lzham_compress_status_t LZHAM_CDECL lzham_lib_compress_memory(const lzham_compress_params *pParams, lzham_uint8* pDst_buf, size_t *pDst_len, const lzham_uint8* pSrc_buf, size_t src_len, lzham_uint32 *pAdler32)
306
+ {
307
+ if ((!pParams) || (!pDst_len))
308
+ return LZHAM_COMP_STATUS_INVALID_PARAMETER;
309
+
310
+ if (src_len)
311
+ {
312
+ if (!pSrc_buf)
313
+ return LZHAM_COMP_STATUS_INVALID_PARAMETER;
314
+ }
315
+
316
+ if (sizeof(size_t) > sizeof(uint32))
317
+ {
318
+ if (src_len > UINT32_MAX)
319
+ return LZHAM_COMP_STATUS_INVALID_PARAMETER;
320
+ }
321
+
322
+ lzcompressor::init_params internal_params;
323
+ lzham_compress_status_t status = create_internal_init_params(internal_params, pParams);
324
+ if (status != LZHAM_COMP_STATUS_SUCCESS)
325
+ return status;
326
+
327
+ task_pool *pTP = NULL;
328
+ if (internal_params.m_max_helper_threads)
329
+ {
330
+ pTP = lzham_new<task_pool>();
331
+ if (!pTP->init(internal_params.m_max_helper_threads))
332
+ return LZHAM_COMP_STATUS_FAILED;
333
+
334
+ internal_params.m_pTask_pool = pTP;
335
+ }
336
+
337
+ lzcompressor *pCompressor = lzham_new<lzcompressor>();
338
+ if (!pCompressor)
339
+ {
340
+ lzham_delete(pTP);
341
+ return LZHAM_COMP_STATUS_FAILED;
342
+ }
343
+
344
+ if (!pCompressor->init(internal_params))
345
+ {
346
+ lzham_delete(pTP);
347
+ lzham_delete(pCompressor);
348
+ return LZHAM_COMP_STATUS_INVALID_PARAMETER;
349
+ }
350
+
351
+ if (src_len)
352
+ {
353
+ if (!pCompressor->put_bytes(pSrc_buf, static_cast<uint32>(src_len)))
354
+ {
355
+ *pDst_len = 0;
356
+ lzham_delete(pTP);
357
+ lzham_delete(pCompressor);
358
+ return LZHAM_COMP_STATUS_FAILED;
359
+ }
360
+ }
361
+
362
+ if (!pCompressor->put_bytes(NULL, 0))
363
+ {
364
+ *pDst_len = 0;
365
+ lzham_delete(pTP);
366
+ lzham_delete(pCompressor);
367
+ return LZHAM_COMP_STATUS_FAILED;
368
+ }
369
+
370
+ const byte_vec &comp_data = pCompressor->get_compressed_data();
371
+
372
+ size_t dst_buf_size = *pDst_len;
373
+ *pDst_len = comp_data.size();
374
+
375
+ if (pAdler32)
376
+ *pAdler32 = pCompressor->get_src_adler32();
377
+
378
+ if (comp_data.size() > dst_buf_size)
379
+ {
380
+ lzham_delete(pTP);
381
+ lzham_delete(pCompressor);
382
+ return LZHAM_COMP_STATUS_OUTPUT_BUF_TOO_SMALL;
383
+ }
384
+
385
+ memcpy(pDst_buf, comp_data.get_ptr(), comp_data.size());
386
+
387
+ lzham_delete(pTP);
388
+ lzham_delete(pCompressor);
389
+ return LZHAM_COMP_STATUS_SUCCESS;
390
+ }
391
+
392
+ // ----------------- zlib-style API's
393
+
394
+ int lzham_lib_z_deflateInit(lzham_z_streamp pStream, int level)
395
+ {
396
+ return lzham_lib_z_deflateInit2(pStream, level, LZHAM_Z_LZHAM, LZHAM_Z_DEFAULT_WINDOW_BITS, 9, LZHAM_Z_DEFAULT_STRATEGY);
397
+ }
398
+
399
+ int lzham_lib_z_deflateInit2(lzham_z_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy)
400
+ {
401
+ LZHAM_NOTE_UNUSED(strategy);
402
+
403
+ if (!pStream)
404
+ return LZHAM_Z_STREAM_ERROR;
405
+ if ((mem_level < 1) || (mem_level > 9))
406
+ return LZHAM_Z_PARAM_ERROR;
407
+ if ((method != LZHAM_Z_DEFLATED) && (method != LZHAM_Z_LZHAM))
408
+ return LZHAM_Z_PARAM_ERROR;
409
+
410
+ if (level == LZHAM_Z_DEFAULT_COMPRESSION)
411
+ level = 9;
412
+
413
+ if (method == LZHAM_Z_DEFLATED)
414
+ {
415
+ // Force Deflate to LZHAM with default window_bits.
416
+ method = LZHAM_Z_LZHAM;
417
+ window_bits = LZHAM_Z_DEFAULT_WINDOW_BITS;
418
+ }
419
+
420
+ #ifdef LZHAM_Z_API_FORCE_WINDOW_BITS
421
+ window_bits = LZHAM_Z_API_FORCE_WINDOW_BITS;
422
+ #endif
423
+
424
+ int max_window_bits = LZHAM_64BIT_POINTERS ? LZHAM_MAX_DICT_SIZE_LOG2_X64 : LZHAM_MAX_DICT_SIZE_LOG2_X86;
425
+ if ((labs(window_bits) < LZHAM_MIN_DICT_SIZE_LOG2) || (labs(window_bits) > max_window_bits))
426
+ return LZHAM_Z_PARAM_ERROR;
427
+
428
+ lzham_compress_params comp_params;
429
+
430
+ utils::zero_object(comp_params);
431
+ comp_params.m_struct_size = sizeof(lzham_compress_params);
432
+
433
+ comp_params.m_level = LZHAM_COMP_LEVEL_UBER;
434
+ if (level <= 1)
435
+ comp_params.m_level = LZHAM_COMP_LEVEL_FASTEST;
436
+ else if (level <= 3)
437
+ comp_params.m_level = LZHAM_COMP_LEVEL_FASTER;
438
+ else if (level <= 5)
439
+ comp_params.m_level = LZHAM_COMP_LEVEL_DEFAULT;
440
+ else if (level <= 7)
441
+ comp_params.m_level = LZHAM_COMP_LEVEL_BETTER;
442
+
443
+ if (level == 10)
444
+ comp_params.m_compress_flags |= LZHAM_COMP_FLAG_EXTREME_PARSING;
445
+
446
+ // Use all CPU's. TODO: This is not always the best idea depending on the dictionary size and the # of bytes to compress.
447
+ comp_params.m_max_helper_threads = -1;
448
+
449
+ comp_params.m_dict_size_log2 = static_cast<lzham_uint32>(labs(window_bits));
450
+
451
+ if (window_bits > 0)
452
+ comp_params.m_compress_flags |= LZHAM_COMP_FLAG_WRITE_ZLIB_STREAM;
453
+
454
+ pStream->data_type = 0;
455
+ pStream->adler = LZHAM_Z_ADLER32_INIT;
456
+ pStream->msg = NULL;
457
+ pStream->reserved = 0;
458
+ pStream->total_in = 0;
459
+ pStream->total_out = 0;
460
+
461
+ lzham_compress_state_ptr pComp = lzham_lib_compress_init(&comp_params);
462
+ if (!pComp)
463
+ return LZHAM_Z_PARAM_ERROR;
464
+
465
+ pStream->state = (struct lzham_z_internal_state *)pComp;
466
+
467
+ return LZHAM_Z_OK;
468
+ }
469
+
470
+ int lzham_lib_z_deflateReset(lzham_z_streamp pStream)
471
+ {
472
+ if (!pStream)
473
+ return LZHAM_Z_STREAM_ERROR;
474
+
475
+ lzham_compress_state_ptr pComp = (lzham_compress_state_ptr)pStream->state;
476
+ if (!pComp)
477
+ return LZHAM_Z_STREAM_ERROR;
478
+
479
+ pComp = lzham_lib_compress_reinit(pComp);
480
+ if (!pComp)
481
+ return LZHAM_Z_STREAM_ERROR;
482
+
483
+ pStream->state = (struct lzham_z_internal_state *)pComp;
484
+
485
+ return LZHAM_Z_OK;
486
+ }
487
+
488
+ int lzham_lib_z_deflate(lzham_z_streamp pStream, int flush)
489
+ {
490
+ if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > LZHAM_Z_FINISH) || (!pStream->next_out))
491
+ return LZHAM_Z_STREAM_ERROR;
492
+
493
+ if (!pStream->avail_out)
494
+ return LZHAM_Z_BUF_ERROR;
495
+
496
+ if (flush == LZHAM_Z_PARTIAL_FLUSH)
497
+ flush = LZHAM_Z_SYNC_FLUSH;
498
+
499
+ int lzham_status = LZHAM_Z_OK;
500
+ lzham_z_ulong orig_total_in = pStream->total_in, orig_total_out = pStream->total_out;
501
+ for ( ; ; )
502
+ {
503
+ size_t in_bytes = pStream->avail_in, out_bytes = pStream->avail_out;
504
+
505
+ lzham_compress_state_ptr pComp = (lzham_compress_state_ptr)pStream->state;
506
+ lzham_compress_state *pState = static_cast<lzham_compress_state*>(pComp);
507
+
508
+ lzham_compress_status_t status = lzham_lib_compress2(
509
+ pComp,
510
+ pStream->next_in, &in_bytes,
511
+ pStream->next_out, &out_bytes,
512
+ (lzham_flush_t)flush);
513
+
514
+ pStream->next_in += (uint)in_bytes;
515
+ pStream->avail_in -= (uint)in_bytes;
516
+ pStream->total_in += (uint)in_bytes;
517
+
518
+ pStream->next_out += (uint)out_bytes;
519
+ pStream->avail_out -= (uint)out_bytes;
520
+ pStream->total_out += (uint)out_bytes;
521
+
522
+ pStream->adler = pState->m_compressor.get_src_adler32();
523
+
524
+ if (status >= LZHAM_COMP_STATUS_FIRST_FAILURE_CODE)
525
+ {
526
+ lzham_status = LZHAM_Z_STREAM_ERROR;
527
+ break;
528
+ }
529
+ else if (status == LZHAM_COMP_STATUS_SUCCESS)
530
+ {
531
+ lzham_status = LZHAM_Z_STREAM_END;
532
+ break;
533
+ }
534
+ else if (!pStream->avail_out)
535
+ break;
536
+ else if ((!pStream->avail_in) && (flush != LZHAM_Z_FINISH))
537
+ {
538
+ if ((flush) || (pStream->total_in != orig_total_in) || (pStream->total_out != orig_total_out))
539
+ break;
540
+ return LZHAM_Z_BUF_ERROR; // Can't make forward progress without some input.
541
+ }
542
+ }
543
+ return lzham_status;
544
+ }
545
+
546
+ int lzham_lib_z_deflateEnd(lzham_z_streamp pStream)
547
+ {
548
+ if (!pStream)
549
+ return LZHAM_Z_STREAM_ERROR;
550
+
551
+ lzham_compress_state_ptr pComp = (lzham_compress_state_ptr)pStream->state;
552
+ if (pComp)
553
+ {
554
+ pStream->adler = lzham_lib_compress_deinit(pComp);
555
+
556
+ pStream->state = NULL;
557
+ }
558
+
559
+ return LZHAM_Z_OK;
560
+ }
561
+
562
+ lzham_z_ulong lzham_lib_z_deflateBound(lzham_z_streamp pStream, lzham_z_ulong source_len)
563
+ {
564
+ LZHAM_NOTE_UNUSED(pStream);
565
+ return 64 + source_len + ((source_len + 4095) / 4096) * 4;
566
+ }
567
+
568
+ int lzham_lib_z_compress2(unsigned char *pDest, lzham_z_ulong *pDest_len, const unsigned char *pSource, lzham_z_ulong source_len, int level)
569
+ {
570
+ int status;
571
+ lzham_z_stream stream;
572
+ memset(&stream, 0, sizeof(stream));
573
+
574
+ // In case lzham_z_ulong is 64-bits (argh I hate longs).
575
+ if ((source_len | *pDest_len) > 0xFFFFFFFFU)
576
+ return LZHAM_Z_PARAM_ERROR;
577
+
578
+ stream.next_in = pSource;
579
+ stream.avail_in = (uint)source_len;
580
+ stream.next_out = pDest;
581
+ stream.avail_out = (uint)*pDest_len;
582
+
583
+ status = lzham_lib_z_deflateInit(&stream, level);
584
+ if (status != LZHAM_Z_OK)
585
+ return status;
586
+
587
+ status = lzham_lib_z_deflate(&stream, LZHAM_Z_FINISH);
588
+ if (status != LZHAM_Z_STREAM_END)
589
+ {
590
+ lzham_lib_z_deflateEnd(&stream);
591
+ return (status == LZHAM_Z_OK) ? LZHAM_Z_BUF_ERROR : status;
592
+ }
593
+
594
+ *pDest_len = stream.total_out;
595
+ return lzham_lib_z_deflateEnd(&stream);
596
+ }
597
+
598
+ int lzham_lib_z_compress(unsigned char *pDest, lzham_z_ulong *pDest_len, const unsigned char *pSource, lzham_z_ulong source_len)
599
+ {
600
+ return lzham_lib_z_compress2(pDest, pDest_len, pSource, source_len, (int)LZHAM_Z_DEFAULT_COMPRESSION);
601
+ }
602
+
603
+ lzham_z_ulong lzham_lib_z_compressBound(lzham_z_ulong source_len)
604
+ {
605
+ return lzham_lib_z_deflateBound(NULL, source_len);
606
+ }
607
+
608
+ } // namespace lzham