1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
use std::cmp::Ordering; use std::convert::TryInto; use crate::compressor::Compressor; use crate::decompressor::Decompressor; use crate::types::{DataType, NumberLike}; impl NumberLike for u32 { fn num_eq(&self, other: &Self) -> bool { self.eq(other) } fn num_cmp(&self, other: &Self) -> Ordering { self.cmp(other) } } pub struct U32DataType {} impl DataType<u32> for U32DataType { const HEADER_BYTE: u8 = 4; const BIT_SIZE: usize = 32; fn offset_diff(upper: u32, lower: u32) -> u64 { (upper - lower) as u64 } fn add_offset(lower: u32, off: u64) -> u32 { lower + off as u32 } fn bytes_from(num: u32) -> Vec<u8> { num.to_be_bytes().to_vec() } fn from_bytes(bytes: Vec<u8>) -> u32 { u32::from_be_bytes(bytes.try_into().unwrap()) } } pub type U32Compressor = Compressor<u32, U32DataType>; pub type U32Decompressor = Decompressor<u32, U32DataType>;