clicktype_batch/
buffer.rs1use std::io::{self, Write};
4
5pub struct BatchBuffer {
7 inner: Vec<u8>,
8}
9
10impl BatchBuffer {
11 pub fn new(capacity: usize) -> Self {
13 Self {
14 inner: Vec::with_capacity(capacity),
15 }
16 }
17
18 pub fn len(&self) -> usize {
20 self.inner.len()
21 }
22
23 pub fn capacity(&self) -> usize {
25 self.inner.capacity()
26 }
27
28 pub fn is_empty(&self) -> bool {
30 self.inner.is_empty()
31 }
32
33 pub fn as_slice(&self) -> &[u8] {
35 &self.inner
36 }
37
38 pub fn smart_clear(&mut self, shrink_threshold: usize, initial_capacity: usize) {
44 if self.inner.capacity() > shrink_threshold {
45 self.inner = Vec::with_capacity(initial_capacity);
47 } else {
48 self.inner.clear();
50 }
51 }
52
53 pub fn clear(&mut self) {
55 self.inner.clear();
56 }
57}
58
59impl Write for BatchBuffer {
60 fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
61 self.inner.extend_from_slice(buf);
62 Ok(buf.len())
63 }
64
65 fn flush(&mut self) -> io::Result<()> {
66 Ok(())
67 }
68}