Skip to content

Commit 5e7fefd

Browse files
Make LenType opt-in
1 parent fb6b0b1 commit 5e7fefd

File tree

5 files changed

+41
-35
lines changed

5 files changed

+41
-35
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1111

1212
- `bytes::BufMut` is now implemented on `VecInner`.
1313
- Removed generic from `history_buf::OldestOrdered`.
14+
- Made `LenType` opt-in.
1415

1516
### Fixed
1617

src/c_string.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! A fixed capacity [`CString`](https://doc.rust-lang.org/std/ffi/struct.CString.html).
22
3-
use crate::{len_type::DefaultLenType, vec::Vec, CapacityError, LenType};
3+
use crate::{vec::Vec, CapacityError, LenType};
44
use core::{
55
borrow::Borrow,
66
cmp::Ordering,
@@ -14,7 +14,7 @@ use core::{
1414
///
1515
/// It stores up to `N - 1` non-nul characters with a trailing nul terminator.
1616
#[derive(Clone, Hash)]
17-
pub struct CString<const N: usize, LenT: LenType = DefaultLenType<N>> {
17+
pub struct CString<const N: usize, LenT: LenType = usize> {
1818
inner: Vec<u8, N, LenT>,
1919
}
2020

src/sorted_linked_list.rs

+21-21
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
//!
99
//! ```
1010
//! use heapless::sorted_linked_list::{Max, SortedLinkedList};
11-
//! let mut ll: SortedLinkedList<_, Max, 3> = SortedLinkedList::new_u8();
11+
//! let mut ll: SortedLinkedList<_, Max, 3, u8> = SortedLinkedList::new_u8();
1212
//!
1313
//! // The largest value will always be first
1414
//! ll.push(1).unwrap();
@@ -156,7 +156,7 @@ pub use storage::{
156156
OwnedSortedLinkedListStorage, SortedLinkedListStorage, ViewSortedLinkedListStorage,
157157
};
158158

159-
use crate::len_type::{DefaultLenType, LenType};
159+
use crate::len_type::LenType;
160160

161161
/// Marker for Min sorted [`SortedLinkedList`].
162162
pub struct Min;
@@ -212,7 +212,7 @@ where
212212
}
213213

214214
/// The linked list.
215-
pub type SortedLinkedList<T, K, const N: usize, Idx = DefaultLenType<N>> =
215+
pub type SortedLinkedList<T, K, const N: usize, Idx = usize> =
216216
SortedLinkedListInner<T, Idx, K, OwnedSortedLinkedListStorage<T, Idx, N>>;
217217

218218
/// The linked list.
@@ -391,7 +391,7 @@ where
391391
///
392392
/// ```
393393
/// use heapless::sorted_linked_list::{Max, SortedLinkedList};
394-
/// let mut ll: SortedLinkedList<_, Max, 3> = SortedLinkedList::new_u8();
394+
/// let mut ll: SortedLinkedList<_, Max, 3, u8> = SortedLinkedList::new_u8();
395395
///
396396
/// // The largest value will always be first
397397
/// ll.push(1).unwrap();
@@ -421,7 +421,7 @@ where
421421
///
422422
/// ```
423423
/// use heapless::sorted_linked_list::{Max, Min, SortedLinkedList};
424-
/// let mut ll_max: SortedLinkedList<_, Max, 3> = SortedLinkedList::new_u8();
424+
/// let mut ll_max: SortedLinkedList<_, Max, 3, u8> = SortedLinkedList::new_u8();
425425
///
426426
/// // The largest value will always be first
427427
/// ll_max.push(1).unwrap();
@@ -431,7 +431,7 @@ where
431431
/// ll_max.push(3).unwrap();
432432
/// assert_eq!(ll_max.peek(), Some(&3));
433433
///
434-
/// let mut ll_min: SortedLinkedList<_, Min, 3> = SortedLinkedList::new_u8();
434+
/// let mut ll_min: SortedLinkedList<_, Min, 3, u8> = SortedLinkedList::new_u8();
435435
///
436436
/// // The Smallest value will always be first
437437
/// ll_min.push(3).unwrap();
@@ -470,7 +470,7 @@ where
470470
///
471471
/// ```
472472
/// use heapless::sorted_linked_list::{Max, SortedLinkedList};
473-
/// let mut ll: SortedLinkedList<_, Max, 3> = SortedLinkedList::new_u8();
473+
/// let mut ll: SortedLinkedList<_, Max, 3, u8> = SortedLinkedList::new_u8();
474474
///
475475
/// ll.push(1).unwrap();
476476
/// ll.push(2).unwrap();
@@ -493,7 +493,7 @@ where
493493
///
494494
/// ```
495495
/// use heapless::sorted_linked_list::{Max, SortedLinkedList};
496-
/// let mut ll: SortedLinkedList<_, Max, 3> = SortedLinkedList::new_u8();
496+
/// let mut ll: SortedLinkedList<_, Max, 3, u8> = SortedLinkedList::new_u8();
497497
///
498498
/// assert_eq!(ll.is_full(), false);
499499
///
@@ -515,7 +515,7 @@ where
515515
///
516516
/// ```
517517
/// use heapless::sorted_linked_list::{Max, SortedLinkedList};
518-
/// let mut ll: SortedLinkedList<_, Max, 3> = SortedLinkedList::new_u8();
518+
/// let mut ll: SortedLinkedList<_, Max, 3, u8> = SortedLinkedList::new_u8();
519519
///
520520
/// assert_eq!(ll.is_empty(), true);
521521
///
@@ -541,7 +541,7 @@ where
541541
///
542542
/// ```
543543
/// use heapless::sorted_linked_list::{Max, SortedLinkedList};
544-
/// let mut ll: SortedLinkedList<_, Max, 3> = SortedLinkedList::new_u8();
544+
/// let mut ll: SortedLinkedList<_, Max, 3, u8> = SortedLinkedList::new_u8();
545545
///
546546
/// ll.push(1).unwrap();
547547
/// ll.push(2).unwrap();
@@ -565,7 +565,7 @@ where
565565
///
566566
/// ```
567567
/// use heapless::sorted_linked_list::{Max, SortedLinkedList};
568-
/// let mut ll: SortedLinkedList<_, Max, 3> = SortedLinkedList::new_u8();
568+
/// let mut ll: SortedLinkedList<_, Max, 3, u8> = SortedLinkedList::new_u8();
569569
///
570570
/// ll.push(1).unwrap();
571571
/// ll.push(2).unwrap();
@@ -695,7 +695,7 @@ where
695695
///
696696
/// ```
697697
/// use heapless::sorted_linked_list::{Max, SortedLinkedList};
698-
/// let mut ll: SortedLinkedList<_, Max, 3> = SortedLinkedList::new_u8();
698+
/// let mut ll: SortedLinkedList<_, Max, 3, u8> = SortedLinkedList::new_u8();
699699
///
700700
/// ll.push(1).unwrap();
701701
/// ll.push(2).unwrap();
@@ -725,7 +725,7 @@ where
725725
///
726726
/// ```
727727
/// use heapless::sorted_linked_list::{Max, SortedLinkedList};
728-
/// let mut ll: SortedLinkedList<_, Max, 3> = SortedLinkedList::new_u8();
728+
/// let mut ll: SortedLinkedList<_, Max, 3, u8> = SortedLinkedList::new_u8();
729729
///
730730
/// ll.push(1).unwrap();
731731
/// ll.push(2).unwrap();
@@ -863,7 +863,7 @@ mod tests {
863863

864864
#[test]
865865
fn test_peek() {
866-
let mut ll: SortedLinkedList<u32, Max, 3> = SortedLinkedList::new_u8();
866+
let mut ll: SortedLinkedList<u32, Max, 3, u8> = SortedLinkedList::new_u8();
867867

868868
ll.push(1).unwrap();
869869
assert_eq!(ll.peek().unwrap(), &1);
@@ -874,7 +874,7 @@ mod tests {
874874
ll.push(3).unwrap();
875875
assert_eq!(ll.peek().unwrap(), &3);
876876

877-
let mut ll: SortedLinkedList<u32, Min, 3> = SortedLinkedList::new_u8();
877+
let mut ll: SortedLinkedList<u32, Min, 3, u8> = SortedLinkedList::new_u8();
878878

879879
ll.push(2).unwrap();
880880
assert_eq!(ll.peek().unwrap(), &2);
@@ -888,7 +888,7 @@ mod tests {
888888

889889
#[test]
890890
fn test_full() {
891-
let mut ll: SortedLinkedList<u32, Max, 3> = SortedLinkedList::new_u8();
891+
let mut ll: SortedLinkedList<u32, Max, 3, u8> = SortedLinkedList::new_u8();
892892
ll.push(1).unwrap();
893893
ll.push(2).unwrap();
894894
ll.push(3).unwrap();
@@ -898,7 +898,7 @@ mod tests {
898898

899899
#[test]
900900
fn test_empty() {
901-
let ll: SortedLinkedList<u32, Max, 3> = SortedLinkedList::new_u8();
901+
let ll: SortedLinkedList<u32, Max, 3, u8> = SortedLinkedList::new_u8();
902902

903903
assert!(ll.is_empty());
904904
}
@@ -913,7 +913,7 @@ mod tests {
913913

914914
#[test]
915915
fn test_rejected_push() {
916-
let mut ll: SortedLinkedList<u32, Max, 3> = SortedLinkedList::new_u8();
916+
let mut ll: SortedLinkedList<u32, Max, 3, u8> = SortedLinkedList::new_u8();
917917
ll.push(1).unwrap();
918918
ll.push(2).unwrap();
919919
ll.push(3).unwrap();
@@ -926,7 +926,7 @@ mod tests {
926926

927927
#[test]
928928
fn test_updating() {
929-
let mut ll: SortedLinkedList<u32, Max, 3> = SortedLinkedList::new_u8();
929+
let mut ll: SortedLinkedList<u32, Max, 3, u8> = SortedLinkedList::new_u8();
930930
ll.push(1).unwrap();
931931
ll.push(2).unwrap();
932932
ll.push(3).unwrap();
@@ -953,7 +953,7 @@ mod tests {
953953

954954
#[test]
955955
fn test_updating_1() {
956-
let mut ll: SortedLinkedList<u32, Max, 3> = SortedLinkedList::new_u8();
956+
let mut ll: SortedLinkedList<u32, Max, 3, u8> = SortedLinkedList::new_u8();
957957
ll.push(1).unwrap();
958958

959959
let v = ll.pop().unwrap();
@@ -963,7 +963,7 @@ mod tests {
963963

964964
#[test]
965965
fn test_updating_2() {
966-
let mut ll: SortedLinkedList<u32, Max, 3> = SortedLinkedList::new_u8();
966+
let mut ll: SortedLinkedList<u32, Max, 3, u8> = SortedLinkedList::new_u8();
967967
ll.push(1).unwrap();
968968

969969
let mut find = ll.find_mut(|v| *v == 1).unwrap();

src/string/mod.rs

+10-6
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use core::{
1111
str::{self, Utf8Error},
1212
};
1313

14-
use crate::{len_type::DefaultLenType, CapacityError};
14+
use crate::CapacityError;
1515
use crate::{
1616
len_type::LenType,
1717
vec::{OwnedVecStorage, Vec, VecInner, ViewVecStorage},
@@ -147,10 +147,10 @@ pub struct StringInner<LenT: LenType, S: StringStorage + ?Sized> {
147147
}
148148

149149
/// A fixed capacity [`String`](https://doc.rust-lang.org/std/string/struct.String.html).
150-
pub type String<const N: usize, LenT = DefaultLenType<N>> = StringInner<LenT, OwnedStorage<N>>;
150+
pub type String<const N: usize, LenT = usize> = StringInner<LenT, OwnedStorage<N>>;
151151

152152
/// A dynamic capacity [`String`](https://doc.rust-lang.org/std/string/struct.String.html).
153-
pub type StringView<LenT> = StringInner<LenT, ViewStorage>;
153+
pub type StringView<LenT = usize> = StringInner<LenT, ViewStorage>;
154154

155155
impl<LenT: LenType, const N: usize> String<N, LenT> {
156156
/// Constructs a new, empty `String` with a fixed capacity of `N` bytes.
@@ -938,8 +938,12 @@ pub fn format<const N: usize, LenT: LenType>(
938938
macro_rules! format {
939939
// Without semicolon as separator to disambiguate between arms, Rust just
940940
// chooses the first so that the format string would land in $max.
941+
($max:expr; $lenT:path; $($arg:tt)*) => {{
942+
let res = $crate::_export::format::<$max, $lenT>(core::format_args!($($arg)*));
943+
res
944+
}};
941945
($max:expr; $($arg:tt)*) => {{
942-
let res = $crate::_export::format::<$max, $crate::_export::DefaultLenType<$max>>(core::format_args!($($arg)*));
946+
let res = $crate::_export::format::<$max, usize>(core::format_args!($($arg)*));
943947
res
944948
}};
945949
($($arg:tt)*) => {{
@@ -973,7 +977,7 @@ impl_try_from_num!(u64, 20);
973977

974978
#[cfg(test)]
975979
mod tests {
976-
use crate::{CapacityError, String, Vec};
980+
use crate::{len_type::ZeroLenType, CapacityError, String, Vec};
977981

978982
#[test]
979983
fn static_new() {
@@ -1239,7 +1243,7 @@ mod tests {
12391243

12401244
#[test]
12411245
fn zero_capacity() {
1242-
let mut s: String<0> = String::new();
1246+
let mut s: String<0, ZeroLenType> = String::new();
12431247
// Validate capacity
12441248
assert_eq!(s.capacity(), 0);
12451249

src/vec/mod.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use core::{
1111
slice,
1212
};
1313

14-
use crate::len_type::{check_capacity_fits, DefaultLenType, LenType};
14+
use crate::len_type::{check_capacity_fits, LenType};
1515
use crate::CapacityError;
1616

1717
mod drain;
@@ -255,8 +255,7 @@ pub struct VecInner<T, LenT: LenType, S: VecStorage<T> + ?Sized> {
255255
/// For uncommmon capacity values, or in generic scenarios, you may have to provide the `LenT` generic yourself.
256256
///
257257
/// This should be the smallest unsigned integer type that your capacity fits in, or `usize` if you don't want to consider this.
258-
pub type Vec<T, const N: usize, LenT = DefaultLenType<N>> =
259-
VecInner<T, LenT, OwnedVecStorage<T, N>>;
258+
pub type Vec<T, const N: usize, LenT = usize> = VecInner<T, LenT, OwnedVecStorage<T, N>>;
260259

261260
/// A [`Vec`] with dynamic capacity
262261
///
@@ -1738,6 +1737,8 @@ mod tests {
17381737

17391738
use static_assertions::assert_not_impl_any;
17401739

1740+
use crate::len_type::ZeroLenType;
1741+
17411742
use super::{Vec, VecView};
17421743

17431744
// Ensure a `Vec` containing `!Send` values stays `!Send` itself.
@@ -1806,7 +1807,7 @@ mod tests {
18061807
{
18071808
let v: Vec<Droppable, 2> = Vec::new();
18081809
let v: Box<Vec<Droppable, 2>> = Box::new(v);
1809-
let mut v: Box<VecView<Droppable, u8>> = v;
1810+
let mut v: Box<VecView<Droppable, usize>> = v;
18101811
v.push(Droppable::new()).ok().unwrap();
18111812
v.push(Droppable::new()).ok().unwrap();
18121813
assert_eq!(Droppable::count(), 2);
@@ -1819,7 +1820,7 @@ mod tests {
18191820
{
18201821
let v: Vec<Droppable, 2> = Vec::new();
18211822
let v: Box<Vec<Droppable, 2>> = Box::new(v);
1822-
let mut v: Box<VecView<Droppable, u8>> = v;
1823+
let mut v: Box<VecView<Droppable, usize>> = v;
18231824
v.push(Droppable::new()).ok().unwrap();
18241825
v.push(Droppable::new()).ok().unwrap();
18251826
assert_eq!(Droppable::count(), 2);
@@ -2183,7 +2184,7 @@ mod tests {
21832184

21842185
#[test]
21852186
fn zero_capacity() {
2186-
let mut v: Vec<u8, 0> = Vec::new();
2187+
let mut v: Vec<u8, 0, ZeroLenType> = Vec::new();
21872188
// Validate capacity
21882189
assert_eq!(v.capacity(), 0);
21892190

0 commit comments

Comments
 (0)