rasterizeddb_core 0.0.8

A schemaless, high-performance database written in Rust, designed for speed and scalability.
Documentation
use std::io::{Read, Seek, SeekFrom};

use super::{db_type::DbType, support_types::CursorVector};

#[inline(always)]
pub fn extent_non_string_buffer(
    data_buffer: &mut Vec<u8>,
    db_type: &DbType,
    cursor_vector: &mut CursorVector,
    position: &mut u64,
) {
    let db_size = db_type.get_size();

    if db_size == 1 {
        let preset_array: [u8; 1] = [cursor_vector.vector[*position as usize]];
        *position += 1;

        data_buffer.copy_from_slice(&preset_array);
    } else if db_size == 2 {
        let preset_array: [u8; 2] = [
            cursor_vector.vector[*position as usize],
            cursor_vector.vector[(*position + 1) as usize],
        ];
        *position += 2;

        data_buffer.copy_from_slice(&preset_array);
    } else if db_size == 4 {
        let preset_array: [u8; 4] = [
            cursor_vector.vector[*position as usize],
            cursor_vector.vector[(*position + 1) as usize],
            cursor_vector.vector[(*position + 2) as usize],
            cursor_vector.vector[(*position + 3) as usize],
        ];
        *position += 4;

        data_buffer.copy_from_slice(&preset_array);
    } else if db_size == 8 {
        let preset_array: [u8; 8] = [
            cursor_vector.vector[*position as usize],
            cursor_vector.vector[(*position + 1) as usize],
            cursor_vector.vector[(*position + 2) as usize],
            cursor_vector.vector[(*position + 3) as usize],
            cursor_vector.vector[(*position + 4) as usize],
            cursor_vector.vector[(*position + 5) as usize],
            cursor_vector.vector[(*position + 6) as usize],
            cursor_vector.vector[(*position + 7) as usize],
        ];
        *position += 8;

        data_buffer.copy_from_slice(&preset_array);
    } else if db_size == 16 {
        let preset_array: [u8; 16] = [
            cursor_vector.vector[*position as usize],
            cursor_vector.vector[(*position + 1) as usize],
            cursor_vector.vector[(*position + 2) as usize],
            cursor_vector.vector[(*position + 3) as usize],
            cursor_vector.vector[(*position + 4) as usize],
            cursor_vector.vector[(*position + 5) as usize],
            cursor_vector.vector[(*position + 6) as usize],
            cursor_vector.vector[(*position + 7) as usize],
            cursor_vector.vector[(*position + 8) as usize],
            cursor_vector.vector[(*position + 9) as usize],
            cursor_vector.vector[(*position + 10) as usize],
            cursor_vector.vector[(*position + 11) as usize],
            cursor_vector.vector[(*position + 12) as usize],
            cursor_vector.vector[(*position + 13) as usize],
            cursor_vector.vector[(*position + 14) as usize],
            cursor_vector.vector[(*position + 15) as usize],
        ];
        *position += 16;

        data_buffer.copy_from_slice(&preset_array);
    } else {
        let cursor = &mut cursor_vector.cursor;
        cursor.seek(SeekFrom::Start(*position)).unwrap();
        let mut preset_buffer = vec![0; db_size as usize];
        cursor.read(&mut preset_buffer).unwrap();
        data_buffer.append(&mut preset_buffer);
        *position += db_size as u64;
    }
}