Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

THE fastest way to implement any kind of decoding for Run Length Encoded data in Rust.

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE-APACHE
MIT
LICENSE-MIT
NotificationsYou must be signed in to change notification settings

WanzenBug/rle-decode-helper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

The same functionallityis available in stable Rust since 1.53, use that instead

THE fastest way to implement any kind of decoding forRunLengthEncoded data in Rust.

Writing a fast decoder that is also safe can be quite challenging, so this crate is here to save you thehassle of maintaining and testing your own implementation.

Usage

Of course, you need to depend on this crate:

rle-decode-fast ="1.0"

There is only a single function to use,rle_decode<T>(&mut Vec<T>, lookbehind_size: usize, fill_length: usize).It takes :

  • a vector to modify,
  • the number of items to copy from said vector (basicallyvector[(vector.len() - lookbehind)..])
  • the number of items to append.Afterwards the vector will contain an extrafill_length items.
use rle_decode_fast::rle_decode;letmut decode_buffer =vec![0,0,1,1,0,2,3];let lookbehind_length =4;let output_length =10;rle_decode(&mut decode_buffer, lookbehind_length, output_length);assert_eq!(decode_buffer,[0,0,1,1,0,2,3,1,0,2,3,1,0,2,3,1,0]);

Panics

There are cases where the decode functions panics

  • The lookbehind length is 0
  • The lookbehind length is bigger than the Vec's length
  • The output length + Vec's length would overflow

Background

The idea for this crate first originated fromthis pre-RFC.It brought to attention a weak-point in the standard library, which lead some crates writing their own unsafe by-pass.

During the exploration happening in the pre-RFC, some experimentation was conducted. For examples seehere andhere.

Some Stats

There is a benchmark comparing a naive (repeated push) implementation, a vulnerable implementation that might lead touninitialized memory and this crate.

The results for a very small fill lengthlookbehind=333and for a bigger fill lengthslookbehind=2

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submittedfor inclusion in the work by you, as defined in the Apache-2.0 license, shall bedual licensed as above, without any additional terms or conditions.

About

THE fastest way to implement any kind of decoding for Run Length Encoded data in Rust.

Topics

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp