An open API service indexing awesome lists of open source software.

https://github.com/0xpr03/linebuffer

(circular) ringbuffer for lines of bytes (IO buffer over [u8] with line count)
https://github.com/0xpr03/linebuffer

circular linebuffer performance ringbuffer rust

Last synced: 4 months ago
JSON representation

(circular) ringbuffer for lines of bytes (IO buffer over [u8] with line count)

Awesome Lists containing this project

README

          

#### LineBuffer - ringbuffer but for elements of different sizes

[![crates.io](https://img.shields.io/crates/v/linebuffer.svg)](https://crates.io/crates/linebuffer)
[![docs.rs](https://docs.rs/linebuffer/badge.svg)](https://docs.rs/linebuffer)
[![Build Status](https://travis-ci.com/0xpr03/linebuffer.svg?branch=master)](https://travis-ci.com/0xpr03/linebuffer)

This crate is specifically for the following use case:

- high throughput of data
- infrequent read of entries or the whole buffer
- entries are distinguishable arrays of bytes
- data has dynamic size
- numbering is infinite

You can use it for example to buffer the stdout of a process per line.
It allows setting the amount of last lines to store and the size of bytes before wrapping.

#### Example

```rust
use linebuffer::{typenum, LineBuffer};

// create a buffer of max 2048 entries/lines and 512KB data cache
// with the additional flag type ()
let mut buffer: LineBuffer<(), typenum::U2048> = LineBuffer::new(512_000);

let data = String::from("Some data stuff");
buffer.insert(data.as_bytes(),());
assert_eq!(buffer.get(0),Some((data.as_bytes(), &())));
```