Expand description
§FrozenCore
Custom implementations and core utilities for frozen codebases.
§Index
§Usage
Add following to your Cargo.toml,
[dependencies]
frozen-core = { version = "0.0.8", default-features = true }[!TIP] All the features available by default. To disable this, set
default-features = false
§FrozenFile
FrozenFile is a custom implementation of std::fs::File.
To use the ffile module, add it as a dependency in your Cargo.toml:
[dependencies]
frozen-core = { version = "0.0.8", default-features = false, features = ["ffile"] }FrozenFile is currently available on the following platforms,
| Platform | Support |
|---|---|
aarch64-unknown-linux-gnu | ✅ |
x86_64-unknown-linux-gnu | ✅ |
aarch64-pc-windows-msvc | ❌ |
x86_64-pc-windows-msvc | ❌ |
aarch64-apple-darwin | ✅ |
x86_64-apple-darwin | ✅ |
See following example for more details.
§FrozenMMap
FrozenMMap is a custom implementation of mmap.
To use the fmmap module, add it as a dependency in your Cargo.toml:
[dependencies]
frozen-core = { version = "0.0.8", default-features = false, features = ["fmmap"] }FrozenMMap is currently available on the following platforms,
| Platform | Support |
|---|---|
aarch64-unknown-linux-gnu | ✅ |
x86_64-unknown-linux-gnu | ✅ |
aarch64-pc-windows-msvc | ❌ |
x86_64-pc-windows-msvc | ❌ |
aarch64-apple-darwin | ✅ |
x86_64-apple-darwin | ✅ |
Read the example below for usage details,
use frozen_core::fmmap::{FMCfg, FrozenMMap};
const MID: u8 = 0;
#[repr(C)]
#[derive(Debug)]
struct Meta(u64);
unsafe impl Send for Meta {}
unsafe impl Sync for Meta {}
fn main() {
let dir = std::path::PathBuf::from("./target/examples");
let path = dir.join("fm_example.bin");
let _ = std::fs::remove_file(&path);
std::fs::create_dir_all(&dir).unwrap();
let cfg = FMCfg {
mid: MID,
initial_count: 1,
path: path.clone(),
flush_duration: std::time::Duration::from_micros(100),
};
let mmap = FrozenMMap::<Meta>::new(cfg.clone()).unwrap();
assert_eq!(mmap.slots(), 1);
let (_, epoch) = mmap.write(0, |m| m.0 = 0x0A).unwrap();
mmap.wait_for_durability(epoch).unwrap();
let val = mmap.read(0, |m| m.0).unwrap();
assert_eq!(val, 10);
mmap.grow(1).unwrap();
assert_eq!(mmap.slots(), 2);
mmap.write(1, |m| m.0 = 0x0F).unwrap();
drop(mmap); // syncs data
// reopen & verify
let reopened = FrozenMMap::<Meta>::new(cfg).unwrap();
let v0 = reopened.read(0, |m| m.0).unwrap();
let v1 = reopened.read(1, |m| m.0).unwrap();
assert_eq!(v0, 0x0A);
assert_eq!(v1, 0x0F);
}§FrozenErr
FRes & FErr are custom implementation’s for result and error propogation.
To use the error module, add it as a dependency in your Cargo.toml:
[dependencies]
frozen-core = { version = "0.0.8", default-features = false, features = ["error"] }§Hints
The hints module provides stable friendly implementations of likely and unlikely branch hints functions.
To use the hints module, add it as a dependency in your Cargo.toml:
[dependencies]
frozen-core = { version = "0.0.8", default-features = false, features = ["hints"] }§Crc
Implementation of CRC32C (Castagnoli polynomial) to compute a 32-bit cyclic redundancy check (CRC) using Castagnoli polynomial, intended for data integrity verification for torn writes and curruption detection
[!WARNING] We assume little-endian target architecture, as big-endian architectures are not supported
[!IMPORTANT] The generated 32-bit CRC is not cryptographically secure, it’s intended use only is for data integrity in IO ops
To use the crc module, add it as a dependency in your Cargo.toml:
[dependencies]
frozen-core = { version = "0.0.8", default-features = false, features = ["crc"] }Crc32C is available on following architectires,
| Architecture | Support |
|---|---|
aarch64 | ✅ |
x86_64 | ✅ |
Read the example below for usage details,
use frozen_core::crc::Crc32C;
fn main() {
let crc = Crc32C::new();
let b0: [u8; 8] = *b"12345678";
let b1: [u8; 8] = *b"ABCDEFGH";
let b2: [u8; 8] = *b"abcdefgh";
let b3: [u8; 8] = *b"zyxwvuts";
assert_eq!(crc.crc(&b0), crc.crc(&b0));
assert_eq!(crc.crc_2x([&b0, &b1]), crc.crc_2x([&b0, &b1]));
assert_eq!(crc.crc_4x([&b0, &b1, &b2, &b3]), crc.crc_4x([&b0, &b1, &b2, &b3]));
}§Notes
[!IMPORTANT]
frozen-coreis primarily created for frozen-lab projects. External use is discouraged, but not prohibited, given you asume all the risks.
This project is licensed under the Apache-2.0 and MIT License. See the LICENSE-APACHE and LICENSE-MIT file for more details.
Contributions are welcome! Please feel free to submit a PR or open an issue if you have any feedback or suggestions.
Modules§
- crc
- Implementation of CRC32C (Castagnoli polynomial) to compute a 32-bit cyclic redundancy check (CRC) using Castagnoli polynomial, intended for data integrity verification for torn writes and curruption detection
- error
- Custom implementations for
Result<T>andErr<T> - ffile
- Custom implementation of
std::fs::File - fmmap
- Custom implementation of
mmap(2) - hints
- Implementation of branch preditor hints