1
0
mirror of https://github.com/chylex/Brotli-Builder.git synced 2024-11-24 22:42:50 +01:00
Commit Graph

284 Commits

Author SHA1 Message Date
04a23663b0 Reorganize HuffmanTree & BlockSwitchTracker 2019-10-31 19:13:08 +01:00
974541b937 Minor BrotliLib refactoring (ranges, exceptions, formatting) 2019-10-31 19:13:08 +01:00
2f22139125 Fix window size crash & inefficiency when generating copy markers 2019-10-30 19:42:56 +01:00
f9838bca04 Improve efficiency of encoding Huffman tree repetition codes 2019-10-21 00:16:20 +02:00
4dc334cae9 Add information about bit counts to markers 2019-10-20 23:17:23 +02:00
94f3288bb7 Reimplement complex distance code construction & update documentation 2019-10-20 22:07:23 +02:00
87011bc853 Rewrite AlphabetSize.BitsPerSymbol to use Log2 utility class 2019-10-20 06:40:37 +02:00
79a96735a5 Move various log2(int) implementations into a utility class 2019-10-20 06:29:43 +02:00
cd2c37764e Make MetaBlock classes (mostly) immutable 2019-10-19 15:27:39 +02:00
611fac1525 Properly implement and cleanup GetHashCode & Equals in BrotliLib 2019-10-19 15:27:39 +02:00
e84dcd4ac9 Address IDE suggestions (C# 8.0) & minor refactoring 2019-10-19 01:43:54 +02:00
b07c707759 Upgrade libraries to .NET Standard 2.1 and UI/test projects to .NET Core 3.0 2019-10-18 20:11:44 +02:00
53ed337a56 Fix typo in MultiTrie equality checking, causing broken cache 2019-10-06 07:08:45 +02:00
9d4fe1e47e Update MultiTrie to use ValueTuple instead of KeyValuePair 2019-10-05 08:14:58 +02:00
271b43630e Implement MultiTrie.Node caching for Brotli dictionary index 2019-10-05 08:14:47 +02:00
8ecdd90caa Fix recently introduced crash w/ implicit distance code zero
Caused by d8a6713392
2019-10-05 04:19:24 +02:00
3294ac800e Improve how CR/LF characters are displayed in markers 2019-10-04 16:47:55 +02:00
5b44cefe68 Update markers to include backreference & dictionary output 2019-10-04 16:18:05 +02:00
eb3833e4da Fix off-by-x bug when generating dictionary references after hitting window size 2019-10-04 15:30:15 +02:00
d8a6713392 Fix broken generation of explicit distance codes 0 2019-10-04 15:15:27 +02:00
e18cede896 Add new Brotli dictionary index system 2019-10-03 21:56:17 +02:00
65dbe29dc6 Add a few utilities to CollectionHelper (ContainsAt, Skip) 2019-10-03 21:23:02 +02:00
b111f9bd25 Rework MultiTrie structure (less mess, less memory, more performance) 2019-10-03 18:59:37 +02:00
9da921fe52 Remove inefficient dictionary index 2019-10-03 17:17:21 +02:00
806c97748a Fix Brotli insert&copy command serialization not picking distance codes efficiently 2019-07-09 15:55:27 +02:00
0b7aaec69d Optimize complex distance codes (with no postfix) w/ unit tests 2019-07-09 15:00:21 +02:00
50035519f8 Make most marker values lazy 2019-07-08 23:46:26 +02:00
c3b66b50e9 Tweaks for minor performance improvements 2019-07-08 23:36:10 +02:00
05690a1bea Improve marker memory usage by interning strings 2019-07-08 18:13:11 +02:00
895609c3f1 Use dummy writer to improve performance in transformations 2019-06-18 15:13:09 +02:00
8b289812bc Add dummy BitWriter implementation 2019-06-18 15:08:30 +02:00
da910cc147 Refactor BitWriter, BitReader, and MarkedBitReader into interfaces 2019-06-18 15:06:39 +02:00
8c5ae6a960 Separate IBitSerializer into serializer & deserializer delegates 2019-06-18 05:00:33 +02:00
d59ea83f6e Add license files for Brotli & FCTB 2019-05-30 17:40:30 +02:00
52d435dece Fix invalid complex Huffman tree length codes generated for incomplete trees 2019-05-24 14:11:52 +02:00
6baa782fb9 Make DistanceParameters a readonly struct 2019-05-23 16:24:40 +02:00
82f212a4b8 Add marker for Brotli block-switch type value 2019-05-23 15:30:12 +02:00
1370231216 Add utility Set methods to ContextMap builder 2019-05-23 15:29:43 +02:00
74969f8c92 Implement Brotli block-switch command builder 2019-05-23 15:28:30 +02:00
f289bb2660 Update CompressedMetaBlockBuilder to use FrequencyLists 2019-05-23 14:18:55 +02:00
b90240c180 Update HuffmanTree.FromSymbols to use FrequencyList 2019-05-23 14:15:21 +02:00
2bfa048532 Add FrequencyList collection 2019-05-23 14:11:00 +02:00
62b5236455 Remove category parameter from CategoryMap.Select 2019-05-23 13:11:52 +02:00
9ab0520997 Determine BlockSwitchCommand type codes during serialization instead of storing them 2019-05-23 11:10:59 +02:00
ea0453f3cb Implement workaround for incomplete Huffman tree generation 2019-05-22 21:52:28 +02:00
978725d5db Change Range.ToString 2019-05-22 08:52:12 +02:00
6bb29382ec Update exe & dll metadata 2019-05-20 12:12:19 +02:00
e39ddf5e27 Make ContextMap builder clone the final array 2019-05-20 09:48:05 +02:00
7e7b58e533 Fix broken implicit distance code 0 and dictionary distances in CompressedMetaBlockBuilder 2019-05-19 23:18:04 +02:00
5148994de4 Fix incorrect RingBuffer state after cloning 2019-05-19 22:46:31 +02:00
d4fa203f4f Add MetaBlockSizeTracker utility for meta-block size minimization 2019-05-18 02:41:44 +02:00
e349cf112b Move byte array slicing/cloning into a utility CollectionHelper class 2019-05-18 00:38:48 +02:00
35ca0e1fb8 Move existing Brotli encoder & transformer implementations to BrotliImpl 2019-05-17 23:06:41 +02:00
bc708a3646 Keep only AnyCPU w/ 32bit disabled, fix mismatched C# version settings 2019-05-17 20:05:22 +02:00
143b79aecf Add convenience method for dictionary references to CompressedMetaBlockBuilder 2019-05-17 18:54:55 +02:00
dee0e6c240 Add DictionaryIndexEntry & refactor index serialization 2019-05-17 18:54:55 +02:00
417b2b0eed Add IMultiTrie, move tries to different namespace, revert trie value sorting 2019-05-17 18:54:55 +02:00
34d801a70b Slightly improve strategy for picking Brotli distance codes 2019-05-17 06:35:26 +02:00
304fa1dd7c Implement Brotli dictionary trie serialization & include word length in index 2019-05-17 03:41:10 +02:00
94263295b5 Abstract out stuff from MultiTrie into a base class 2019-05-17 02:38:50 +02:00
78052590df Split Brotli distance codes into multiple files 2019-05-16 21:01:18 +02:00
768f2e9ac0 Work on Brotli component validation, constants, and minor refactoring 2019-05-16 19:09:58 +02:00
632f94eef9 Refactor Brotli element construction to guard mutability 2019-05-16 18:25:30 +02:00
d85badda47 Add a few TODOs 2019-04-22 22:59:15 +02:00
6b169a66bd Add a simple transformer to rebuild Brotli files made by official compressor 2019-04-22 17:07:13 +02:00
f736e837e3 Update EncodeLiterals for the updated interfaces 2019-04-22 17:02:19 +02:00
22640d473b Add IBrotliTransformer and utilities for transforming Brotli structures 2019-04-22 16:52:10 +02:00
c6c55fcc97 Automatically fixup structures from IBrotliEncoder so encoders don't have to 2019-04-22 16:47:32 +02:00
b38f6c3485 Implement compressed meta-block reconstruction and chained building 2019-04-22 16:45:30 +02:00
d6c3b5b743 Allow cloning global Brotli state 2019-04-22 16:45:30 +02:00
0d9e7f91f2 Add block-switch command support in CompressedMetaBlockBuilder 2019-04-22 16:45:30 +02:00
d78202b3a5 Fix broken encoding of direct distances 2019-03-28 20:10:59 +01:00
230b4c95b1 Add BrotliFileParameters as a parameter to IBrotliEncoder 2019-03-28 04:26:23 +01:00
18d8f1bff0 Replace references to window size + dictionary w/ BrotliFileParameters 2019-03-28 04:20:08 +01:00
caf2ca9c19 Implement window output strategy for when full output isn't necessary 2019-03-28 04:06:11 +01:00
e7b8d4ce20 Move BrotliGlobalState into a different namespace 2019-03-28 04:01:25 +01:00
9b59e6a988 Move output handling from BrotliGlobalState into a new interface 2019-03-28 03:58:31 +01:00
4ec79e2d5f Add cloning constructor to RingBuffer 2019-03-28 03:31:28 +01:00
1e552c2ef1 Add EncodeLiterals w/ UI menu item 2019-03-14 17:12:09 +01:00
329b066017 Add WIP class to help construct compressed meta-blocks 2019-03-14 16:46:24 +01:00
63fceb9e6e Move distance context ID calculation & tweak parts of InsertCopyCommand 2019-03-14 16:38:10 +01:00
e74fbb323d Move IBrotliEncoder implementations into a different namespace 2019-03-14 13:40:20 +01:00
17287c1e9b Improve performance of MultiTrie and dictionary transformations 2019-03-14 13:01:10 +01:00
0c88dc7086 Fix wrong Range.First/Last property values when not initialized 2019-03-14 09:07:58 +01:00
10366592fc Work on Brotli context map construction and utilities 2019-03-14 08:37:30 +01:00
6c4d5dd2c2 Update BrotliDictionary.GenerateLookup to use default Range parameters 2019-03-14 04:54:36 +01:00
548e44bee2 Make Range a struct & add utility construction methods 2019-03-14 04:54:35 +01:00
b88fe3f6bd Implement a ghetto way to construct Brotli distance codes 2019-03-14 03:49:31 +01:00
c9b28433d3 Move writing copies and dictionary words to BrotliGlobalState 2019-03-13 12:05:17 +01:00
9fdd2a2389 Add WindowSize as a parameter to IBrotliEncoder.GenerateMetaBlocks 2019-03-13 10:44:11 +01:00
4180882a3f Fix BitDepthFormat.GetPackedValue 2019-03-13 10:00:46 +01:00
1226b78736 Fix DistanceCode.Complex.ToString 2019-03-13 08:22:39 +01:00
6db6dc2bc0 Explain complex distance codes & guard constructors 2019-03-13 08:22:02 +01:00
a9131a3efb Add utilities to help constructing Brotli components & general cleanup 2019-03-13 01:17:09 +01:00
1a18808976 Fix typo in InsertCopyLengthCode constructor 2019-03-12 23:51:38 +01:00
4ce74b4c68 Simplify HuffmanTree construction 2019-03-12 22:20:06 +01:00
943c02d89c Add methods to generate Brotli dictionary lookup tries 2019-03-12 09:39:27 +01:00
68c3d42783 Add a MultiTrie implementation 2019-03-12 08:13:37 +01:00
835cfdcdaf Refactor distance code zero handling to fix distance buffer push logic 2019-03-12 00:17:40 +01:00
4c0083579a Fix distance encoding using wrong trees w/ postfix bits 2019-03-11 23:26:38 +01:00
b760d566bd Minor refactoring 2019-03-11 10:29:11 +01:00
d21af05280 Remove references to siblings in MarkerNode 2019-03-11 10:18:08 +01:00
7d34bc8e98 Optimize memory usage of insert&copy commands 2019-03-11 09:27:53 +01:00
64d19061b2 Add a dummy MarkedBitReader to allow disabling markers 2019-03-11 09:16:08 +01:00
dd4d973e57 Make BitReader.Index an integer (BitStream was already limited to 256 MB) 2019-03-11 09:01:18 +01:00
be32999273 Update C# version to latest (currently 7.3) 2019-03-11 08:40:51 +01:00
360ed52eba Fix literal context modes breaking across meta-block boundaries 2019-03-11 06:19:53 +01:00
d8746572d4 Add a way to construct insert&copy length codes from length values w/ unit tests 2019-03-09 03:36:41 +01:00
ab05269704 Add Range class for inclusive integer ranges 2019-03-09 03:30:51 +01:00
a46cb9457f Remove unused methods from Category and HuffmanNode 2019-03-09 03:16:14 +01:00
607cfeba64 Include category in BlockTypeInfo to refactor serialization contexts 2019-03-09 03:07:37 +01:00
f7c8e203a9 Update to .NET Standard 2.0 2019-03-09 02:39:44 +01:00
b08283a8db Improve markers for complex Huffman trees 2019-03-09 01:22:58 +01:00
f98f386b4c Add MarkedBitReader.ReadValue w/ huffman tree and value mapper parameters 2019-03-09 01:22:44 +01:00
285612a1bd Cleanup unused methods and imports 2019-03-07 02:55:48 +01:00
cce96a2567 Fix massive performance issues with MarkerNode 2019-03-06 12:51:50 +01:00
95acb299e1 Implement repeat/skip codes in complex Huffman trees 2019-03-04 17:34:41 +01:00
5a6f4b2ede Implement encoding of RLE and IMTF in Brotli context maps 2019-03-04 11:57:30 +01:00
3d511172a7 Implement markers for all Brotli deserializers 2019-03-03 19:53:42 +01:00
46eb57428c Update ToString (DistanceCode, ComplexLengthCode, HuffmanGenerator.Entry) 2019-03-03 19:53:42 +01:00
6e20da13de Enable deserialization with markers in BrotliFileStructure 2019-03-03 18:47:00 +01:00
7044313e04 Add MarkedBitReader and MarkedBitSerializer w/ a few marker types 2019-03-03 18:47:00 +01:00
07d96290b7 Add Literal to represent literal bytes 2019-03-03 17:27:27 +01:00
03c5f040f6 Redo all Equals/GetHashCode/ToString & add a few missing ones 2019-03-02 11:02:36 +01:00
2c251eb4be Add a basic marker node system 2019-02-25 15:49:23 +01:00
577786223e Allow BitReader to be wrapped and extended 2019-02-08 10:52:07 +01:00
86e25692b8 Implement Brotli compressed meta-block contents and insert&copy command serialization 2019-02-08 10:52:07 +01:00
cf11a7c0f1 Implement Brotli block-switch command serialization & block tracking 2019-02-08 10:52:07 +01:00
5ffb4bf0be Implement Brotli compressed meta-block header serialization 2019-02-08 10:52:07 +01:00
a7b6d7047d Implement Brotli block type and block length code serialization 2019-02-08 09:24:51 +01:00
66b8795135 Reassign ISLAST bit on meta-blocks after modifying their structure 2019-02-07 02:01:10 +01:00
dcb2f9c99d Add AnyCPU because Visual Studio still can't figure out 64bit UserControls 2019-02-07 01:53:13 +01:00
f3295167b8 Implement basic serialization for Brotli context maps 2018-12-29 02:53:45 +01:00
f81568d95a Make AlphabetSize.BitsPerSymbol return a byte & add default max tree depth constant 2018-12-29 02:48:38 +01:00
5d1823acb0 Implement Brotli distance code and distance value serialization 2018-12-28 22:49:01 +01:00
f23359ccd5 Implement Brotli insert&copy length code alphabet and length serialization 2018-12-15 02:20:46 +01:00
791f31e2d9 Implement basic serialization for Brotli Huffman trees w/ unit tests 2018-12-15 02:01:23 +01:00
0add08098e Implement limited-depth Huffman tree generation from frequency map w/ unit tests 2018-12-14 21:46:03 +01:00
693109a90a Enforce symbol order when genering Huffman trees from bit counts 2018-12-14 21:45:44 +01:00
a8dcf45861 Add utilities for Brotli insert&copy command code categories 2018-12-14 18:36:58 +01:00
b3d81c67f1 Add PriorityQueue 2018-12-14 11:55:22 +01:00
24efbdfe74 Fix extra bit when writing padded empty meta-block header 2018-12-14 06:04:16 +01:00
895414df2d Fix BitStream getting misaligned when adding many whole bytes & fix typo 2018-12-13 22:29:28 +01:00
4ce1554e4b Fix missing bit when writing compressed meta-block header 2018-12-13 14:39:09 +01:00
a3e4983bc5 Implement Move-to-front & inverse transformation w/ unit tests 2018-12-12 23:05:23 +01:00
235f3684a3 Fix BitStream.Add causing every 63rd bit to be zero w/ new unit tests 2018-12-06 08:00:35 +01:00
9dcacebfb7 Finish implementing global (de)compression state 2018-12-06 07:07:50 +01:00
6b98e1c2c3 Add default Brotli dictionary file as an embedded resource 2018-12-04 17:24:48 +01:00
8610d6d1cf Add IDictionarySource implementation that can take any Stream 2018-12-04 17:21:51 +01:00
db1bc5ac48 Add BitWriter method that takes a BitStream w/ unit tests 2018-12-04 16:06:15 +01:00