Skip to main content

yo_common/
lib.rs

1//! Shared vocabulary for the whole engine: addresses, ids, the error model,
2//! the two hash families, the geohash arithmetic and the cache hint the batch
3//! walk is built on.
4//!
5//! Everything here is used on the hot path, so the rules are strict. No
6//! allocation outside the error path, no dependencies, and every constant that
7//! another crate assumes is asserted in a test here rather than assumed twice.
8
9#![deny(missing_docs)]
10
11pub mod addr;
12pub mod blake3;
13pub mod crc;
14pub mod dtoa;
15pub mod entropy;
16pub mod eq;
17pub mod error;
18pub mod geo;
19pub mod glob;
20pub mod lock;
21pub mod num;
22pub mod prefetch;
23pub mod re;
24pub mod rng;
25pub mod sha1;
26pub mod sha256;
27pub mod small;
28pub(crate) mod sync;
29pub mod wyhash;
30pub mod xxh3;
31
32pub use addr::{ADDR_BITS, Addr, MAX_OFFSET, OFFSET_BITS, SPACE_BITS, ShardId, Space};
33pub use crc::{SLOT_COUNT, crc16, crc32c, hash_tag, slot_of};
34pub use eq::bytes_eq;
35pub use error::{Code, Error, Result};
36pub use glob::matches as glob_matches;
37pub use lock::{Held, Lock};
38pub use num::{
39    DIGITS_MAX, i64_digits, i64_len, parse_i64, push_double, push_i64, push_u64, u64_digits,
40};
41pub use prefetch::{prefetch, prefetch_read};
42pub use rng::Rng;
43pub use small::Small;
44pub use wyhash::{hash_key, tag_of, wyhash};
45pub use xxh3::hash64;
46
47/// The size of an index bucket, and the cache line the engine is built around.
48///
49/// Everything that claims to be one cache line asserts against this rather than
50/// writing 64 twice.
51pub const CACHE_LINE: usize = 64;
52
53/// The largest batch the shard loop drains in one pass (`04` section 3).
54///
55/// This is also the C ABI's `BATCH_MAX` and the size of every `_many` form, so
56/// it is here rather than in the shard crate.
57pub const BATCH_MAX: usize = 64;