small_len

Crates.iosmall_len
lib.rssmall_len
version1.1.2
sourcesrc
created_at2024-07-02 00:03:57.926563
updated_at2024-07-17 06:31:20.451916
descriptionA small library for storing the length in the smallest internal type.
homepage
repositoryhttps://gitlab.com/magicfoodhand/small_len
max_upload_size
id1289118
size21,312
(inapinch-io)

documentation

README

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: Adds Len implementation for bumpalo::Bump.
  • bytes: Adds Len implementation for bytes::Bytes and bytes::BytesMut.
  • indexmap: Adds Len implementation for indexmap::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
Commit count: 9

cargo fmt