Pure Go Brotli encoder and decoder
Go to file
Andy Balholm 57434b5091 Encoder: check for empty block
Fixes #51
2024-07-29 09:56:04 -07:00
matchfinder matchfinder.M4: some refinements to scoring 2024-01-24 16:11:21 -08:00
testdata Add test for issue 22. 2021-07-15 12:01:31 -07:00
LICENSE Add LICENSE. 2019-03-06 17:11:20 -08:00
README.md Make my matchfinder work more accessible. 2024-01-11 17:31:05 -08:00
backward_references.go Reuse buffers and objects using sync.Pool 2020-05-10 10:36:19 +02:00
backward_references_hq.go Use len and cap instead of num_commands_ and cmd_alloc_size_. 2020-05-08 16:48:16 -07:00
bit_cost.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
bit_reader.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
bitwriter.go matchfinder: replace Score function with DistanceBitCost 2024-01-09 05:40:40 -08:00
block_splitter.go Reuse buffers and objects using sync.Pool 2020-05-10 10:36:19 +02:00
block_splitter_command.go Use len and cap instead of num_commands_ and cmd_alloc_size_. 2020-05-08 16:48:16 -07:00
block_splitter_distance.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
block_splitter_literal.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
brotli_bit_stream.go Add matchfinder package. 2023-12-28 16:09:32 -08:00
brotli_test.go Encoder: check for empty block 2024-07-29 09:56:04 -07:00
cluster.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
cluster_command.go Follow some advice from staticcheck. 2021-08-12 12:37:09 -07:00
cluster_distance.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
cluster_literal.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
command.go Use len and cap instead of num_commands_ and cmd_alloc_size_. 2020-05-08 16:48:16 -07:00
compress_fragment.go Follow some advice from staticcheck. 2021-08-12 12:37:09 -07:00
compress_fragment_two_pass.go Add matchfinder package. 2023-12-28 16:09:32 -08:00
constants.go Un-export some more symbols 2019-03-15 17:24:40 -07:00
context.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
decode.go Reuse ringbuffer in Reader. 2022-05-18 12:06:45 -07:00
dictionary.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
dictionary_hash.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
encode.go More staticcheck advice. 2021-08-18 18:04:51 -07:00
encoder.go Encoder: check for empty block 2024-07-29 09:56:04 -07:00
encoder_dict.go Finish un-exporting symbols. 2019-03-15 18:00:20 -07:00
entropy_encode.go Revert "Use sort.Sort to sort Huffman trees." 2020-05-08 13:52:56 -07:00
entropy_encode_static.go Add matchfinder package. 2023-12-28 16:09:32 -08:00
example_test.go Add an example for Writer.Reset. 2022-05-03 10:55:39 -07:00
fast_log.go Optimize log2FloorNonZero with math/bits. 2021-09-22 11:21:01 -07:00
find_match_length.go Read multiple bytes in findMatchLengthWithLimit 2020-05-15 10:43:19 -07:00
go.mod Encoder: check for empty block 2024-07-29 09:56:04 -07:00
go.sum Encoder: check for empty block 2024-07-29 09:56:04 -07:00
h5.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
h6.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
h10.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
hash.go More staticcheck advice. 2021-08-18 18:04:51 -07:00
hash_composite.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
hash_forgetful_chain.go More staticcheck advice. 2021-08-18 18:04:51 -07:00
hash_longest_match_quickly.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
hash_rolling.go More staticcheck advice. 2021-08-18 18:04:51 -07:00
histogram.go Check size of split.lengths instead of a nil check 2020-07-17 09:24:47 -07:00
http.go Make my matchfinder work more accessible. 2024-01-11 17:31:05 -08:00
huffman.go Fix warnings from go vet. 2019-03-26 06:05:46 -04:00
literal_cost.go Finish un-exporting symbols. 2019-03-15 18:00:20 -07:00
memory.go Reuse buffers and objects using sync.Pool 2020-05-10 10:36:19 +02:00
metablock.go Reuse buffers and objects using sync.Pool 2020-05-10 10:36:19 +02:00
metablock_command.go Reuse buffers and objects using sync.Pool 2020-05-10 10:36:19 +02:00
metablock_distance.go Reuse buffers and objects using sync.Pool 2020-05-10 10:36:19 +02:00
metablock_literal.go Reuse buffers and objects using sync.Pool 2020-05-10 10:36:19 +02:00
params.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
platform.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
prefix.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
prefix_dec.go Finish un-exporting symbols. 2019-03-15 18:00:20 -07:00
quality.go Finish un-exporting symbols. 2019-03-15 18:00:20 -07:00
reader.go Reader.Reset: recover from errors. 2022-09-23 19:39:05 -07:00
ringbuffer.go Reuse buffers and objects using sync.Pool 2020-05-10 10:36:19 +02:00
state.go Reuse ringbuffer in Reader. 2022-05-18 12:06:45 -07:00
static_dict.go More staticcheck advice. 2021-08-18 18:04:51 -07:00
static_dict_lut.go Use const for constants. 2019-03-21 16:15:39 -07:00
symbol_list.go Clean up duplicate and misplaced comments. 2019-03-21 15:34:30 -07:00
transform.go Fix warnings from go vet. 2019-03-26 06:05:46 -04:00
utf8_util.go More staticcheck advice. 2021-08-18 18:04:51 -07:00
util.go Use some Go library functions. 2019-03-08 19:45:16 -08:00
write_bits.go Revert "Faster bit writing." 2021-04-27 10:48:28 -07:00
writer.go Make my matchfinder work more accessible. 2024-01-11 17:31:05 -08:00

README.md

This package is a brotli compressor and decompressor implemented in Go. It was translated from the reference implementation (https://github.com/google/brotli) with the c2go tool at https://github.com/andybalholm/c2go.

I have been working on new compression algorithms (not translated from C) in the matchfinder package. You can use them with the NewWriterV2 function. Currently they give better results than the old implementation (at least for compressing my test file, Newtons Opticks) on levels 2 to 6.

I am using it in production with https://github.com/andybalholm/redwood.

API documentation is found at https://pkg.go.dev/github.com/andybalholm/brotli?tab=doc.