24 releases (6 stable)
1.1.2 | Jul 17, 2024 |
---|---|
0.7.0 | Jul 14, 2024 |
#408 in Algorithms
185 downloads per month
Used in 2 crates
22KB
615 lines
small_len
A simple enum and trait to ensure that the value returned by small_len() is always the smallest representation. This is meant to be used by fn_vm to support "infinite" commands, arguments, and registers.
NOTE: This is primarily meant for dynamic sized objects, String, [T], &[T], Vec, HashMap, and IndexMap (with feature indexmap); if you need an optimization for static bounds at compile time check out the smallnum crate.
For a generic number crate check out varnum.
Usage
use small_len::SmallLen;
fn main() {
let a = vec![1, 2, 3];
let c = a.small_len(); // Length::Byte(3)
let bytes = c.to_be_bytes();
let c = SmallLen::from_be_bytes(&bytes); // SmallLen::from_bytes() -> Length::Byte(3)
}
Features
default
: No extra features, includes Vec and HashMap<K, V> implementations.bumpalo
: AddsLen
implementation forbumpalo::Bump
.bytes
: AddsLen
implementation forbytes::Bytes
andbytes::BytesMut
.indexmap
: AddsLen
implementation forindexmap::IndexMap
.
Custom Types
If you need to add SmallLen to another type, you can implement the Len trait.
impl <T> Len for Vec<T> {
#[inline]
fn length(&self) -> Length {
self.len().into() // Length::new(self.len())
}
}
Additional Traits
The Length enum also implements the following traits for easier use (Length | SmallLength | usize):
- Index for Vec, this will panic if the index is out of bounds
- Add
- Div
- Mul
- Rem
- Sub
- Not
- BitAnd
- BitOr
- BitXor
Dependencies
~0–590KB