small_len

Crates.iosmall_len
lib.rssmall_len
version0.3.6
sourcesrc
created_at2024-07-02 00:03:57.926563
updated_at2024-07-14 22:15:38.140061
descriptionA small library for storing the length in the smallest internal type.
homepage
repositoryhttps://gitlab.com/magicfoodhand/small_len
max_upload_size
id1289118
size13,513
(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.

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) -> usize {
        self.len()
    }
}

Additional Traits

The Length enum also implements the following traits for easier use:

  • Index for Vec, this will panic if the index is out of bounds
  • Add -> usize
  • Div -> usize
  • Mul -> usize
  • Rem -> usize
  • Sub -> usize
Commit count: 9

cargo fmt