pub fn next_id() -> u64 {
use std::sync::atomic::{AtomicU64, Ordering};
static COUNTER: AtomicU64 = AtomicU64::new(0);
COUNTER.fetch_add(1, Ordering::Relaxed)
}
pub fn align_to(value: usize, alignment: usize) -> usize {
(value + alignment - 1) & !(alignment - 1)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_next_id() {
let id1 = next_id();
let id2 = next_id();
assert_ne!(id1, id2);
}
#[test]
fn test_align_to() {
assert_eq!(align_to(0, 8), 0);
assert_eq!(align_to(1, 8), 8);
assert_eq!(align_to(7, 8), 8);
assert_eq!(align_to(8, 8), 8);
assert_eq!(align_to(9, 8), 16);
}
}