Skip to content

Commit f65c0fd

Browse files
bors[bot]jswrenn
andauthored
Merge #474
474: Minimal `use_alloc` feature r=jswrenn a=jswrenn Introduces a `use_alloc` feature. **Breaking Change:** [**Increases the MSRV to 1.36.0**](https://blog.rust-lang.org/2019/07/04/Rust-1.36.0.html#the-alloc-crate-is-stable) `Vec`, `String`, etc., use their alternatives defined in `alloc`. No attempt is made to support `HashMap`, which is *not* defined in `alloc`. This is thus a more minimal introduction of `use_alloc` than #471. Fixes #365. Partially fixes #470. Co-authored-by: Jack Wrenn <[email protected]>
2 parents f116e92 + 70a62b3 commit f65c0fd

18 files changed

+99
-72
lines changed

.travis.yml

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,25 @@ language: rust
22
sudo: false
33
matrix:
44
include:
5-
- rust: 1.32.0
5+
- rust: 1.36.0
66
script:
77
- |
88
cargo build --verbose --no-default-features &&
9+
cargo build --verbose --no-default-features --features "use_alloc" &&
910
cargo build --verbose --features "$FEATURES"
1011
- rust: stable
1112
script:
1213
- |
1314
cargo build --verbose --no-default-features &&
15+
cargo build --verbose --no-default-features --features "use_alloc" &&
1416
cargo build --verbose --features "$FEATURES" &&
1517
cargo test --verbose --features "$FEATURES" &&
1618
cargo bench --no-run --verbose --features "$FEATURES"
1719
- rust: beta
1820
script:
1921
- |
2022
cargo build --verbose --no-default-features &&
23+
cargo build --verbose --no-default-features --features "use_alloc" &&
2124
cargo build --verbose --features "$FEATURES" &&
2225
cargo test --verbose --features "$FEATURES" &&
2326
cargo bench --no-run --verbose --features "$FEATURES"

Cargo.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ version = "0.2"
3838

3939
[features]
4040
default = ["use_std"]
41-
use_std = []
41+
use_std = ["use_alloc"]
42+
use_alloc = []
4243

4344
[profile]
4445
bench = { debug = true }

src/adaptors/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub use self::coalesce::*;
1111
pub use self::map::{map_into, map_ok, MapInto, MapOk};
1212
#[allow(deprecated)]
1313
pub use self::map::MapResults;
14-
#[cfg(feature = "use_std")]
14+
#[cfg(feature = "use_alloc")]
1515
pub use self::multi_product::*;
1616

1717
use std::fmt;

src/adaptors/multi_product.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
#![cfg(feature = "use_std")]
1+
#![cfg(feature = "use_alloc")]
22

33
use crate::size_hint;
44
use crate::Itertools;
55

6+
use alloc::vec::Vec;
7+
68
#[derive(Clone)]
79
/// An iterator adaptor that iterates over the cartesian product of
810
/// multiple iterators of type `I`.

src/combinations.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::fmt;
22

33
use super::lazy_buffer::LazyBuffer;
4+
use alloc::vec::Vec;
45

56
/// An iterator to iterate through all the `k`-length combinations in an iterator.
67
///

src/combinations_with_replacement.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use alloc::vec::Vec;
12
use std::fmt;
23

34
use super::lazy_buffer::LazyBuffer;
@@ -44,7 +45,7 @@ where
4445
I: Iterator,
4546
I::Item: Clone,
4647
{
47-
let indices: Vec<usize> = vec![0; k];
48+
let indices: Vec<usize> = alloc::vec![0; k];
4849
let pool: LazyBuffer<I> = LazyBuffer::new(iter);
4950

5051
CombinationsWithReplacement {

src/free.rs

+16-11
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,36 @@
33
//! The benefit of free functions is that they accept any `IntoIterator` as
44
//! argument, so the resulting code may be easier to read.
55
6-
#[cfg(feature = "use_std")]
6+
#[cfg(feature = "use_alloc")]
77
use std::fmt::Display;
88
use std::iter::{self, Zip};
9-
#[cfg(feature = "use_std")]
10-
type VecIntoIter<T> = ::std::vec::IntoIter<T>;
9+
#[cfg(feature = "use_alloc")]
10+
type VecIntoIter<T> = alloc::vec::IntoIter<T>;
1111

12-
#[cfg(feature = "use_std")]
12+
#[cfg(feature = "use_alloc")]
13+
use alloc::{
14+
string::String,
15+
};
16+
17+
#[cfg(feature = "use_alloc")]
1318
use crate::Itertools;
1419

1520
pub use crate::adaptors::{
1621
interleave,
1722
merge,
1823
put_back,
1924
};
20-
#[cfg(feature = "use_std")]
25+
#[cfg(feature = "use_alloc")]
2126
pub use crate::put_back_n_impl::put_back_n;
22-
#[cfg(feature = "use_std")]
27+
#[cfg(feature = "use_alloc")]
2328
pub use crate::multipeek_impl::multipeek;
24-
#[cfg(feature = "use_std")]
29+
#[cfg(feature = "use_alloc")]
2530
pub use crate::peek_nth::peek_nth;
26-
#[cfg(feature = "use_std")]
31+
#[cfg(feature = "use_alloc")]
2732
pub use crate::kmerge_impl::kmerge;
2833
pub use crate::zip_eq_impl::zip_eq;
2934
pub use crate::merge_join::merge_join_by;
30-
#[cfg(feature = "use_std")]
35+
#[cfg(feature = "use_alloc")]
3136
pub use crate::rciter_impl::rciter;
3237

3338
/// Iterate `iterable` with a running index.
@@ -208,7 +213,7 @@ pub fn min<I>(iterable: I) -> Option<I::Item>
208213
///
209214
/// assert_eq!(join(&[1, 2, 3], ", "), "1, 2, 3");
210215
/// ```
211-
#[cfg(feature = "use_std")]
216+
#[cfg(feature = "use_alloc")]
212217
pub fn join<I>(iterable: I, sep: &str) -> String
213218
where I: IntoIterator,
214219
I::Item: Display
@@ -228,7 +233,7 @@ pub fn join<I>(iterable: I, sep: &str) -> String
228233
///
229234
/// assert_equal(sorted("rust".chars()), "rstu".chars());
230235
/// ```
231-
#[cfg(feature = "use_std")]
236+
#[cfg(feature = "use_alloc")]
232237
pub fn sorted<I>(iterable: I) -> VecIntoIter<I::Item>
233238
where I: IntoIterator,
234239
I::Item: Ord

src/groupbylazy.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use std::cell::{Cell, RefCell};
2-
use std::vec;
2+
use alloc::vec::{self, Vec};
33

44
/// A trait to unify FnMut for GroupBy with the chunk key in IntoChunks
55
trait KeyFunction<A> {

src/kmerge_impl.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use crate::size_hint;
22
use crate::Itertools;
33

4+
use alloc::vec::Vec;
45
use std::mem::replace;
56
use std::fmt;
67

src/lazy_buffer.rs

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

34
#[derive(Debug, Clone)]
45
pub struct LazyBuffer<I: Iterator> {

0 commit comments

Comments
 (0)