Skip to content

Commit

Permalink
Rollup merge of rust-lang#74310 - nnethercote:use-ArrayVec-in-SparseB…
Browse files Browse the repository at this point in the history
…itSet, r=eddyb

Use `ArrayVec` in `SparseBitSet`.

Instead of `SmallVec`, because the maximum size is known.

r? @eddyb
  • Loading branch information
Manishearth authored Jul 14, 2020
2 parents e8703e8 + c492ca4 commit 99c0b97
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 10 deletions.
12 changes: 9 additions & 3 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,12 @@ dependencies = [
"nodrop",
]

[[package]]
name = "arrayvec"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"

[[package]]
name = "atty"
version = "0.2.14"
Expand Down Expand Up @@ -164,7 +170,7 @@ version = "0.2.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400"
dependencies = [
"arrayvec",
"arrayvec 0.4.7",
"constant_time_eq",
]

Expand Down Expand Up @@ -714,7 +720,7 @@ version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9"
dependencies = [
"arrayvec",
"arrayvec 0.4.7",
"cfg-if",
"crossbeam-utils 0.6.5",
"lazy_static",
Expand Down Expand Up @@ -3494,8 +3500,8 @@ dependencies = [
name = "rustc_index"
version = "0.0.0"
dependencies = [
"arrayvec 0.5.1",
"rustc_serialize",
"smallvec 1.4.0",
]

[[package]]
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_index/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ doctest = false

[dependencies]
rustc_serialize = { path = "../librustc_serialize" }
smallvec = { version = "1.0", features = ["union", "may_dangle"] }
arrayvec = "0.5.1"
11 changes: 5 additions & 6 deletions src/librustc_index/bit_set.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::vec::{Idx, IndexVec};
use smallvec::SmallVec;
use arrayvec::ArrayVec;
use std::fmt;
use std::iter;
use std::marker::PhantomData;
Expand Down Expand Up @@ -355,20 +355,19 @@ where
const SPARSE_MAX: usize = 8;

/// A fixed-size bitset type with a sparse representation and a maximum of
/// `SPARSE_MAX` elements. The elements are stored as a sorted `SmallVec` with
/// no duplicates; although `SmallVec` can spill its elements to the heap, that
/// never happens within this type because of the `SPARSE_MAX` limit.
/// `SPARSE_MAX` elements. The elements are stored as a sorted `ArrayVec` with
/// no duplicates.
///
/// This type is used by `HybridBitSet`; do not use directly.
#[derive(Clone, Debug)]
pub struct SparseBitSet<T: Idx> {
domain_size: usize,
elems: SmallVec<[T; SPARSE_MAX]>,
elems: ArrayVec<[T; SPARSE_MAX]>,
}

impl<T: Idx> SparseBitSet<T> {
fn new_empty(domain_size: usize) -> Self {
SparseBitSet { domain_size, elems: SmallVec::new() }
SparseBitSet { domain_size, elems: ArrayVec::new() }
}

fn len(&self) -> usize {
Expand Down

0 comments on commit 99c0b97

Please sign in to comment.