use std::cell::RefCell;
use minimap2_sys::{mm_tbuf_destroy, mm_tbuf_init, mm_tbuf_t};
thread_local! {
pub(crate) static BUF: RefCell<ThreadLocalBuffer> = RefCell::new(ThreadLocalBuffer::new());
}
#[derive(Debug)]
pub(crate) struct ThreadLocalBuffer {
buf: *mut mm_tbuf_t,
uses: usize,
}
impl ThreadLocalBuffer {
pub fn new() -> Self {
let buf = unsafe { mm_tbuf_init() };
Self { buf, uses: 0 }
}
pub fn get_buf(&mut self) -> *mut mm_tbuf_t {
self.uses += 1;
self.buf
}
}
impl Drop for ThreadLocalBuffer {
fn drop(&mut self) {
unsafe { mm_tbuf_destroy(self.buf) };
}
}
impl Default for ThreadLocalBuffer {
fn default() -> Self {
Self::new()
}
}