#[cfg(not(unix))]
pub mod platform {
pub const BUFFER_SIZE: usize = 16 * 1024; }
#[cfg(unix)]
pub mod platform {
pub const BUFFER_SIZE: usize = 64 * 1024; }
use std::io::{StdoutLock, Write};
use self::platform::BUFFER_SIZE;
pub struct StdoutBuffer {
pub data: [u8; BUFFER_SIZE],
pub capacity: usize,
}
impl StdoutBuffer {
pub fn new() -> StdoutBuffer {
StdoutBuffer { data: [0u8; BUFFER_SIZE], capacity: 0 }
}
pub fn write_and_clear(&mut self, stdout: &mut StdoutLock) {
let _ = stdout.write_all(&self.data[..]);
self.data = [0u8; BUFFER_SIZE];
self.capacity = 0;
}
pub fn write(&mut self, data: &[u8]) {
let cap = data.len();
self.data[self.capacity..self.capacity + cap].clone_from_slice(data);
self.capacity += cap;
}
pub fn push(&mut self, data: u8) {
self.data[self.capacity] = data;
self.capacity += 1;
}
}