#mmap #vec #memory-buffer #file #memmap2 #read-write

memvec

Memory-backed vector, not buffer. Designed for for mmap. Not MemMap, but MemVec!

5 releases

0.1.0 Aug 22, 2022
0.0.5 Jun 18, 2022
0.0.3 May 5, 2022

#805 in Data structures

Download history 57/week @ 2023-12-15 28/week @ 2023-12-22 81/week @ 2023-12-29 144/week @ 2024-01-05 29/week @ 2024-01-12 5/week @ 2024-01-19 34/week @ 2024-02-02 4/week @ 2024-02-23 3/week @ 2024-03-01 9/week @ 2024-03-08 2/week @ 2024-03-15 26/week @ 2024-03-22 72/week @ 2024-03-29

109 downloads per month

BSD-2-Clause

42KB
932 lines

MemVec

MemVec is a Vec-like interface for continuous memory buffer. Mostly designed to be used with mmap.

VecFile is a simple linear database. For the database, a file is a collection of records. VecFile is the Vec interface of a file of records without read, write, and seek but using mmap.

VecFile + MemVec

use memvec::{MemVec, VecFile};

#[derive(Copy, Clone)]
#[repr(C, packed)]
struct Record {
    time: std::time::Instant,
    event_id: u32,
    _payload: [u8; 50], // we will not use it
}

fn main() {
    let mut path = std::env::temp_dir();
    path.push("vecfile.memvec");

    let vec_file = VecFile::open(&path).expect("file open failed");
    let mut vec =
        unsafe { MemVec::<Record, _>::try_from_memory(vec_file) }.expect("vec file is corrupted");

    if vec.len() == 0 {
        // creating a new file
        println!("creating a new file: {path:?}");
        for i in 0..10 {
            vec.push(Record {
                time: std::time::Instant::now(),
                event_id: '1' as u32 + (i % 3),
                _payload: unsafe { std::mem::zeroed() },
            })
        }
    } else {
        // found an existing file
        for (i, item) in vec.iter().enumerate() {
            println!(
                "idx: {i} time: {time:?} event_id: {event_id}",
                time = item.time,
                event_id = item.event_id
            );
        }
        vec.clear();
        println!("deleted existing file: {path:?}");
    }
}

Dependencies

~165KB