Skip to content

Commit 353794f

Browse files
authored
Merge pull request #57 from orxfun/crate-converted-into-no_std
crate converted into no_std
2 parents afb81c9 + 1fcb5dc commit 353794f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+196
-136
lines changed

Cargo.toml

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
[package]
22
name = "orx-split-vec"
3-
version = "3.7.0"
3+
version = "3.8.0"
44
edition = "2021"
55
authors = ["orxfun <[email protected]>"]
66
description = "An efficient constant access time vector with dynamic capacity and pinned elements."
77
license = "MIT"
88
repository = "https://github.com/orxfun/orx-split-vec/"
99
keywords = ["vec", "array", "split", "fragments", "pinned"]
10-
categories = ["data-structures", "rust-patterns"]
10+
categories = ["data-structures", "rust-patterns", "no-std"]
1111

1212
[dependencies]
13-
orx-pseudo-default = "1.4"
14-
orx-pinned-vec = "3.7"
13+
orx-pseudo-default = { version = "1.4", default-features = false }
14+
orx-pinned-vec = "3.8"
1515

1616
[[bench]]
1717
name = "serial_access"

src/algorithms/binary_search.rs

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::Fragment;
2-
use std::cmp::Ordering;
2+
use core::cmp::Ordering;
33

44
pub fn binary_search_by<T, F>(fragments: &[Fragment<T>], mut compare: F) -> Result<usize, usize>
55
where
@@ -46,7 +46,7 @@ mod tests {
4646
fn bin_search_empty() {
4747
let cmp = get_compare(42);
4848

49-
let fragments = vec![];
49+
let fragments = alloc::vec![];
5050
let result = binary_search_by(&fragments, cmp);
5151
assert_eq!(result, Err(0));
5252
}
@@ -55,14 +55,14 @@ mod tests {
5555
fn bin_search_empty_first_fragment() {
5656
let cmp = get_compare(42);
5757

58-
let fragments = vec![vec![].into()];
58+
let fragments = alloc::vec![alloc::vec![].into()];
5959
let result = binary_search_by(&fragments, cmp);
6060
assert_eq!(result, Err(0));
6161
}
6262

6363
#[test]
6464
fn bin_search_empty_second_fragment() {
65-
let fragments = vec![vec![1, 4, 5].into(), vec![].into()];
65+
let fragments = alloc::vec![alloc::vec![1, 4, 5].into(), alloc::vec![].into()];
6666

6767
let result = binary_search_by(&fragments, get_compare(0));
6868
assert_eq!(result, Err(0));
@@ -85,7 +85,11 @@ mod tests {
8585

8686
#[test]
8787
fn bin_search_three_fragments() {
88-
let fragments = vec![vec![1, 4, 5].into(), vec![7].into(), vec![9, 10].into()];
88+
let fragments = alloc::vec![
89+
alloc::vec![1, 4, 5].into(),
90+
alloc::vec![7].into(),
91+
alloc::vec![9, 10].into()
92+
];
8993

9094
let search = |x| binary_search_by(&fragments, get_compare(x));
9195

@@ -110,7 +114,7 @@ mod tests {
110114

111115
fn test<G: Growth>(mut vec: SplitVec<usize, G>) {
112116
let mut rng = ChaCha8Rng::seed_from_u64(8654);
113-
let mut ref_vec = vec![];
117+
let mut ref_vec = alloc::vec![];
114118
let mut idx = 0;
115119
while ref_vec.len() < 1033 {
116120
if rng.gen::<f32>() < 0.85 {

src/algorithms/in_place_sort.rs

+15-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::Fragment;
2-
use std::cmp::Ordering::{self, *};
2+
use core::cmp::Ordering::{self, *};
33

44
pub fn in_place_sort_by<T, F>(fragments: &mut [Fragment<T>], mut compare: F)
55
where
@@ -21,13 +21,13 @@ where
2121
while r < num_fragments - 1 {
2222
let row_to_swap = get_row_to_swap(fragments, &mut compare, r, c);
2323
if let Some(target_row) = row_to_swap {
24-
let pa = std::ptr::addr_of_mut!(fragments[r][c]);
25-
let pb = std::ptr::addr_of_mut!(fragments[target_row][0]);
24+
let pa = core::ptr::addr_of_mut!(fragments[r][c]);
25+
let pb = core::ptr::addr_of_mut!(fragments[target_row][0]);
2626
// SAFETY: `pa` and `pb` have been created from safe mutable references and refer
2727
// to elements in the slice and therefore are guaranteed to be valid and aligned.
2828
// Note that accessing the elements behind `a` and `b` is checked and will
2929
// panic when out of bounds.
30-
unsafe { std::ptr::swap(pa, pb) };
30+
unsafe { core::ptr::swap(pa, pb) };
3131

3232
let fragment_right = &fragments[target_row][1..];
3333
let value = &fragments[target_row][0];
@@ -114,11 +114,12 @@ where
114114
mod tests {
115115
use super::*;
116116
use crate::{Doubling, Growth, Linear, Recursive};
117+
use alloc::vec::Vec;
117118
use test_case::test_case;
118119

119120
#[test]
120121
fn insertion_position() {
121-
let fragment: Fragment<u32> = vec![4, 7, 9, 13, 16, 17, 23].into();
122+
let fragment: Fragment<u32> = alloc::vec![4, 7, 9, 13, 16, 17, 23].into();
122123

123124
let mut c = |a: &u32, b: &u32| a.cmp(b);
124125
let mut pos = |val: &u32| find_position_to_insert(&fragment, &mut c, val);
@@ -162,15 +163,15 @@ mod tests {
162163
fn insertion_position_with_ties() {
163164
let mut c = |a: &u32, b: &u32| a.cmp(b);
164165

165-
let fragment: Fragment<u32> = vec![4, 7, 13, 13, 13, 17, 23].into();
166+
let fragment: Fragment<u32> = alloc::vec![4, 7, 13, 13, 13, 17, 23].into();
166167
let mut pos = |val: &u32| find_position_to_insert(&fragment, &mut c, val);
167168
assert_eq!(pos(&13), Some(2));
168169

169-
let fragment: Fragment<u32> = vec![4, 7, 13, 13, 23, 23, 23].into();
170+
let fragment: Fragment<u32> = alloc::vec![4, 7, 13, 13, 23, 23, 23].into();
170171
let mut pos = |val: &u32| find_position_to_insert(&fragment, &mut c, val);
171172
assert_eq!(pos(&23), Some(4));
172173

173-
let fragment: Fragment<u32> = vec![4, 4, 13, 13, 23, 23, 23].into();
174+
let fragment: Fragment<u32> = alloc::vec![4, 4, 13, 13, 23, 23, 23].into();
174175
let mut pos = |val: &u32| find_position_to_insert(&fragment, &mut c, val);
175176
assert_eq!(pos(&4), None);
176177
}
@@ -179,8 +180,11 @@ mod tests {
179180
fn sort_simple() {
180181
let mut c = |a: &u32, b: &u32| a.cmp(b);
181182

182-
let mut fragments: Vec<Fragment<u32>> =
183-
vec![vec![2, 4].into(), vec![0, 5, 6].into(), vec![1, 3].into()];
183+
let mut fragments: Vec<Fragment<u32>> = alloc::vec![
184+
alloc::vec![2, 4].into(),
185+
alloc::vec![0, 5, 6].into(),
186+
alloc::vec![1, 3].into()
187+
];
184188

185189
in_place_sort_by(&mut fragments, &mut c);
186190

@@ -194,7 +198,7 @@ mod tests {
194198
let mut c = |a: &i32, b: &i32| a.cmp(b);
195199

196200
let num_fragments = 10;
197-
let mut fragments: Vec<Fragment<_>> = vec![];
201+
let mut fragments: Vec<Fragment<_>> = alloc::vec![];
198202

199203
let mut len = 0;
200204
for _ in 0..num_fragments {

src/common_traits/clone.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::{Growth, SplitVec};
2+
use alloc::vec::Vec;
23
use orx_pinned_vec::PinnedVec;
34

45
impl<T, G> Clone for SplitVec<T, G>

src/common_traits/debug.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
use orx_pinned_vec::PinnedVec;
2-
31
use crate::{Growth, SplitVec};
4-
use std::fmt::Debug;
2+
use core::fmt::Debug;
3+
use orx_pinned_vec::PinnedVec;
54

65
impl<T, G> Debug for SplitVec<T, G>
76
where
87
T: Debug,
98
G: Growth,
109
{
11-
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10+
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1211
writeln!(
1312
f,
1413
"SplitVec {{ len: {}, capacity:{}, data: [",
@@ -25,6 +24,7 @@ where
2524
#[cfg(test)]
2625
mod tests {
2726
use crate::*;
27+
use alloc::format;
2828

2929
#[test]
3030
fn debug() {

src/common_traits/eq.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::*;
2+
use alloc::vec::Vec;
23

34
impl<T, G, U> PartialEq<U> for SplitVec<T, G>
45
where
@@ -81,6 +82,7 @@ pub(crate) fn are_fragments_eq_to_slice<T: PartialEq>(
8182
mod tests {
8283
use crate::test_all_growth_types;
8384
use crate::*;
85+
use alloc::vec::Vec;
8486

8587
#[test]
8688
fn eq() {

src/common_traits/index.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::{Growth, SplitVec};
2-
use std::ops::{Index, IndexMut};
2+
use core::ops::{Index, IndexMut};
33

44
impl<T, G> Index<usize> for SplitVec<T, G>
55
where
@@ -191,6 +191,7 @@ where
191191
mod tests {
192192
use crate::test_all_growth_types;
193193
use crate::*;
194+
use alloc::vec::Vec;
194195

195196
#[test]
196197
fn index() {

src/common_traits/iterator/into_iter.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::{Fragment, Growth, SplitVec};
2-
use std::iter::FusedIterator;
2+
use alloc::vec::Vec;
3+
use core::iter::FusedIterator;
34

45
impl<T, G: Growth> IntoIterator for SplitVec<T, G> {
56
type Item = T;
@@ -14,8 +15,8 @@ impl<T, G: Growth> IntoIterator for SplitVec<T, G> {
1415
///
1516
/// This struct is created by the `into_iter` method on `SplitVec` (provided by the `IntoIterator` trait).
1617
pub struct IntoIter<T> {
17-
outer: std::vec::IntoIter<Fragment<T>>,
18-
inner: std::vec::IntoIter<T>,
18+
outer: alloc::vec::IntoIter<Fragment<T>>,
19+
inner: alloc::vec::IntoIter<T>,
1920
}
2021

2122
impl<T> IntoIter<T> {
@@ -24,7 +25,7 @@ impl<T> IntoIter<T> {
2425
let inner = outer
2526
.next()
2627
.map(|f| f.data.into_iter())
27-
.unwrap_or(vec![].into_iter());
28+
.unwrap_or(Vec::new().into_iter());
2829

2930
Self { outer, inner }
3031
}

src/common_traits/iterator/iter.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
use super::reductions;
22
use crate::fragment::fragment_struct::Fragment;
3-
use std::iter::FusedIterator;
3+
use core::iter::FusedIterator;
44

55
/// Iterator over the `SplitVec`.
66
///
77
/// This struct is created by `SplitVec::iter()` method.
88
#[derive(Debug)]
99
#[must_use = "iterators are lazy and do nothing unless consumed"]
1010
pub struct Iter<'a, T> {
11-
outer: std::slice::Iter<'a, Fragment<T>>,
12-
inner: std::slice::Iter<'a, T>,
11+
outer: core::slice::Iter<'a, Fragment<T>>,
12+
inner: core::slice::Iter<'a, T>,
1313
}
1414

1515
impl<'a, T> Iter<'a, T> {

src/common_traits/iterator/iter_mut.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
use crate::fragment::fragment_struct::Fragment;
2-
use std::iter::FusedIterator;
2+
use core::iter::FusedIterator;
33

44
/// Mutable iterator over the `SplitVec`.
55
///
66
/// This struct is created by `SplitVec::iter_mut()` method.
77
#[derive(Debug)]
88
#[must_use = "iterators are lazy and do nothing unless consumed"]
99
pub struct IterMut<'a, T> {
10-
iter_outer: std::slice::IterMut<'a, Fragment<T>>,
11-
iter_inner: std::slice::IterMut<'a, T>,
10+
iter_outer: core::slice::IterMut<'a, Fragment<T>>,
11+
iter_inner: core::slice::IterMut<'a, T>,
1212
}
1313

1414
impl<'a, T> IterMut<'a, T> {

src/common_traits/iterator/iter_mut_rev.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
use crate::fragment::fragment_struct::Fragment;
2-
use std::iter::{FusedIterator, Rev};
2+
use core::iter::{FusedIterator, Rev};
33

44
/// Mutable iterator over the `SplitVec`.
55
///
66
/// This struct is created by `SplitVec::iter_mut_rev()` method.
77
#[derive(Debug)]
88
#[must_use = "iterators are lazy and do nothing unless consumed"]
99
pub struct IterMutRev<'a, T> {
10-
iter_outer: Rev<std::slice::IterMut<'a, Fragment<T>>>,
11-
iter_inner: Rev<std::slice::IterMut<'a, T>>,
10+
iter_outer: Rev<core::slice::IterMut<'a, Fragment<T>>>,
11+
iter_inner: Rev<core::slice::IterMut<'a, T>>,
1212
}
1313

1414
impl<'a, T> IterMutRev<'a, T> {

src/common_traits/iterator/iter_rev.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
use crate::fragment::fragment_struct::Fragment;
2-
use std::iter::{FusedIterator, Rev};
2+
use core::iter::{FusedIterator, Rev};
33

44
/// Iterator over the `SplitVec`.
55
///
66
/// This struct is created by `SplitVec::iter_rev()` method.
77
#[derive(Debug)]
88
#[must_use = "iterators are lazy and do nothing unless consumed"]
99
pub struct IterRev<'a, T> {
10-
iter_outer: Rev<std::slice::Iter<'a, Fragment<T>>>,
11-
iter_inner: Rev<std::slice::Iter<'a, T>>,
10+
iter_outer: Rev<core::slice::Iter<'a, Fragment<T>>>,
11+
iter_inner: Rev<core::slice::Iter<'a, T>>,
1212
}
1313

1414
impl<'a, T> IterRev<'a, T> {

src/common_traits/iterator/reductions.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::Fragment;
2-
use std::slice::Iter;
2+
use core::slice::Iter;
33

44
type Outer<'a, T> = Iter<'a, Fragment<T>>;
55
type Inner<'a, T> = Iter<'a, T>;

src/common_traits/iterator/tests/into_iter.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::{test_all_growth_types, Growth, SplitVec};
2+
use alloc::vec::Vec;
23
use orx_pinned_vec::PinnedVec;
34

45
#[test]
@@ -48,7 +49,7 @@ fn iter_one_fragment() {
4849
vec.push(0);
4950
vec.push(1);
5051

51-
assert_eq!(vec![0, 1], vec.into_iter().collect::<Vec<_>>());
52+
assert_eq!(alloc::vec![0, 1], vec.into_iter().collect::<Vec<_>>());
5253
}
5354
test_all_growth_types!(test);
5455
}

0 commit comments

Comments
 (0)