StaticVec

实现了一个固定容量的堆栈分配的Vec替代方案,由一个数组支持,使用常数泛型。「Implements a fixed-capacity stack-allocated Vec alternative backed by an array, using const generics.」

Github stars Tracking Chart

Latest Version Rustc Version nightly

Build Status
Build status

Implements a fixed-capacity stack-allocated Vec alternative backed by an array, using const generics.

Note: the word "static" here is meant by the traditional definition of "unchanging" / "not dynamic" etc.

This crate does not use literal static variables for anything (but does provide multiple ways
to instantiate a StaticVec as a static or const variable if desired).

Fully #![no_std] compatible (with almost no loss of functionality) by setting
default-features = false for the staticvec dependency in your Cargo.toml.

Optional support for serialization and deserialization of the StaticVec struct
via serde is available by activating the serde_support crate feature.

StaticVec also implements both Deref and DerefMut to [T], meaning that all existing slice
methods are accessible through instances of it and that references to it can be used in contexts
where [T] is expected.

As of version 0.8.0, this crate additionally provides a fixed-capacity StaticString struct, which is built
around an instance of StaticVec<u8, N>.

Contributions/suggestions/etc. very welcome!

Minimum supported Rust version: due to the use of const generics, this is a nightly-only crate at the moment.

A basic usage example:

use staticvec::{staticvec, StaticVec};

fn main() {
  let mut v = StaticVec::<usize, 64>::new();
  for i in 0..v.capacity() {
    v.push(i);
  }
  for i in &v {
    println!("{}", i);
  }
  v.clear();
  v.insert(0, 47);
  v.insert(1, 48);
  v.insert(2, 49);
  v.insert(v.len() - 1, 50);
  v.insert(v.len() - 2, 51);
  v.insert(v.len() - 3, 52);
  for i in &v {
    println!("{}", i);
  }
  for i in &v.reversed().drain(2..4) {
    println!("{}", i);
  }
  while v.is_not_empty() {
    println!("{}", v.remove(0));
  }
  for f in staticvec![12.0, 14.0, 15.0, 16.0].iter().skip(2) {
    println!("{}", f);
  }
  for i in staticvec![
    staticvec![14, 12, 10].sorted(),
    staticvec![20, 18, 16].reversed(),
    staticvec![26, 24, 22].sorted(),
    staticvec![32, 30, 28].reversed(),
  ]
  .iter()
  .flatten()
  .collect::<StaticVec<usize, 12>>()
  .iter() {
    println!("{}", i);
  }
}

License:

Licensed under either the MIT license or version 2.0 of the Apache License. Your choice as to which!
Any source code contributions will be dual-licensed in the same fashion.

Main metrics

Overview
Name With Ownerslightlyoutofphase/staticvec
Primary LanguageRust
Program languageRust (Language Count: 3)
Platform
License:Apache License 2.0
所有者活动
Created At2019-08-02 02:37:58
Pushed At2023-05-29 00:37:17
Last Commit At2023-05-28 20:37:17
Release Count34
Last Release Name0.11.9 (Posted on )
First Release Name0.7.5 (Posted on )
用户参与
Stargazers Count268
Watchers Count5
Fork Count19
Commits Count1.3k
Has Issues Enabled
Issues Count32
Issue Open Count6
Pull Requests Count18
Pull Requests Open Count0
Pull Requests Close Count11
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private