Rollup merge of #74310 - nnethercote:use-ArrayVec-in-SparseBitSet, r=eddyb
Use `ArrayVec` in `SparseBitSet`. Instead of `SmallVec`, because the maximum size is known. r? @eddyb
This commit is contained in:
commit
99c0b9764a
12
Cargo.lock
12
Cargo.lock
@ -94,6 +94,12 @@ dependencies = [
|
|||||||
"nodrop",
|
"nodrop",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "arrayvec"
|
||||||
|
version = "0.5.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "atty"
|
name = "atty"
|
||||||
version = "0.2.14"
|
version = "0.2.14"
|
||||||
@ -164,7 +170,7 @@ version = "0.2.18"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400"
|
checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec 0.4.7",
|
||||||
"constant_time_eq",
|
"constant_time_eq",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -714,7 +720,7 @@ version = "0.7.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9"
|
checksum = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec 0.4.7",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"crossbeam-utils 0.6.5",
|
"crossbeam-utils 0.6.5",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
@ -3494,8 +3500,8 @@ dependencies = [
|
|||||||
name = "rustc_index"
|
name = "rustc_index"
|
||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"arrayvec 0.5.1",
|
||||||
"rustc_serialize",
|
"rustc_serialize",
|
||||||
"smallvec 1.4.0",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -11,4 +11,4 @@ doctest = false
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
rustc_serialize = { path = "../librustc_serialize" }
|
rustc_serialize = { path = "../librustc_serialize" }
|
||||||
smallvec = { version = "1.0", features = ["union", "may_dangle"] }
|
arrayvec = "0.5.1"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use crate::vec::{Idx, IndexVec};
|
use crate::vec::{Idx, IndexVec};
|
||||||
use smallvec::SmallVec;
|
use arrayvec::ArrayVec;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
@ -355,20 +355,19 @@ where
|
|||||||
const SPARSE_MAX: usize = 8;
|
const SPARSE_MAX: usize = 8;
|
||||||
|
|
||||||
/// A fixed-size bitset type with a sparse representation and a maximum of
|
/// 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
|
/// `SPARSE_MAX` elements. The elements are stored as a sorted `ArrayVec` with
|
||||||
/// no duplicates; although `SmallVec` can spill its elements to the heap, that
|
/// no duplicates.
|
||||||
/// never happens within this type because of the `SPARSE_MAX` limit.
|
|
||||||
///
|
///
|
||||||
/// This type is used by `HybridBitSet`; do not use directly.
|
/// This type is used by `HybridBitSet`; do not use directly.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct SparseBitSet<T: Idx> {
|
pub struct SparseBitSet<T: Idx> {
|
||||||
domain_size: usize,
|
domain_size: usize,
|
||||||
elems: SmallVec<[T; SPARSE_MAX]>,
|
elems: ArrayVec<[T; SPARSE_MAX]>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Idx> SparseBitSet<T> {
|
impl<T: Idx> SparseBitSet<T> {
|
||||||
fn new_empty(domain_size: usize) -> Self {
|
fn new_empty(domain_size: usize) -> Self {
|
||||||
SparseBitSet { domain_size, elems: SmallVec::new() }
|
SparseBitSet { domain_size, elems: ArrayVec::new() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn len(&self) -> usize {
|
fn len(&self) -> usize {
|
||||||
|
Loading…
Reference in New Issue
Block a user