Skip to content

Commit 7b25794

Browse files
committed
feat(collectools): add smallvec support
1 parent 37217f7 commit 7b25794

File tree

10 files changed

+67
-13
lines changed

10 files changed

+67
-13
lines changed

.cspell.yml

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ words:
77
- cbor
88
- clippy
99
- codecov
10+
- collectools
1011
- corasick
1112
- dalek
1213
- deque
@@ -40,6 +41,7 @@ words:
4041
- rustup
4142
- rustversion
4243
- serde
44+
- smallvec
4345
- splitn
4446
- struct
4547
- taplo

Cargo.lock

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
[workspace]
22
resolver = "2"
33
members = [
4-
"./actix-client-ip-cloudflare",
5-
"./actix-hash",
6-
"./actix-web-lab-derive",
7-
"./actix-web-lab",
8-
"./russe", "collections",
4+
"actix-client-ip-cloudflare",
5+
"actix-hash",
6+
"actix-web-lab-derive",
7+
"actix-web-lab",
8+
"collectools",
9+
"russe",
910
]
1011

1112
[workspace.package]

collectools/CHANGELOG.md

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Changelog
2+
3+
## Unreleased
4+
5+
- Add `smallvec` crate support.
6+
7+
## 0.1.0
8+
9+
- Initial release.

collections/Cargo.toml collectools/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ rust-version.workspace = true
99

1010
[dependencies]
1111
arrayvec = "0.7"
12+
smallvec = "1"
1213
tinyvec = "1"
1314

1415
[lints]

collections/src/arrayvec.rs collectools/src/arrayvec.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use arrayvec::ArrayVec;
22

3-
use super::List;
4-
use super::MutableList;
3+
use super::{List, MutableList};
54

65
impl<T, const CAP: usize> List<T> for ArrayVec<T, CAP> {
76
fn len(&self) -> usize {

collections/src/lib.rs collectools/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#![allow(missing_docs)]
44

55
mod arrayvec;
6+
mod smallvec;
67
mod tinyvec;
78
mod vec;
89

collectools/src/smallvec.rs

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
use smallvec::{Array, SmallVec};
2+
3+
use super::{List, MutableList};
4+
5+
impl<A: Array> List<A::Item> for SmallVec<A> {
6+
fn len(&self) -> usize {
7+
SmallVec::len(self)
8+
}
9+
10+
fn get(&self, idx: usize) -> Option<&A::Item> {
11+
<[_]>::get(self, idx)
12+
}
13+
}
14+
15+
impl<A: Array> MutableList<A::Item> for SmallVec<A> {
16+
fn append(&mut self, element: A::Item) {
17+
self.push(element);
18+
}
19+
20+
fn get_mut(&mut self, idx: usize) -> Option<&mut A::Item> {
21+
<[_]>::get_mut(self, idx)
22+
}
23+
}
24+
25+
#[cfg(test)]
26+
pub(crate) mod tests {
27+
use super::*;
28+
29+
#[test]
30+
fn it_works() {
31+
let mut vec = SmallVec::<[_; 8]>::new();
32+
33+
assert_eq!(0, List::len(&vec));
34+
assert!(List::is_empty(&vec));
35+
36+
MutableList::append(&mut vec, 1);
37+
38+
assert_eq!(1, List::len(&vec));
39+
assert!(!List::is_empty(&vec));
40+
41+
assert_eq!(&1, List::get(&vec, 0).unwrap());
42+
}
43+
}

collections/src/tinyvec.rs collectools/src/tinyvec.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
use tinyvec::Array;
2-
use tinyvec::ArrayVec;
1+
use tinyvec::{Array, ArrayVec};
32

4-
use super::List;
5-
use super::MutableList;
3+
use super::{List, MutableList};
64

75
impl<A: Array> List<A::Item> for ArrayVec<A> {
86
fn len(&self) -> usize {

collections/src/vec.rs collectools/src/vec.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
use super::List;
2-
use super::MutableList;
1+
use super::{List, MutableList};
32

43
impl<T> List<T> for Vec<T> {
54
fn len(&self) -> usize {

0 commit comments

Comments
 (0)