9c5101542d
Part of #18424 This commit changes the semantics of `reserve` and `capacity` for Bitv and BitvSet to match conventions. It also introduces the notion of `reserve_index` and `reserve_index_exact` for collections with maximum-index-based capacity semantics. Deprecates free function constructors in favour of functions on Bitv itself. Changes `Bitv::pop` to return an Option rather than panicking. Deprecates and renames several methods in favour of conventions. Marks several blessed methods as unstable. This commit also substantially refactors Bitv and BitvSet's implementations. The new implementation is simpler, cleaner, better documented, and more robust against overflows. It also reduces coupling between Bitv and BitvSet. Tests have been seperated into seperate submodules. Fixes #16958 [breaking-change]
36 lines
1013 B
Rust
36 lines
1013 B
Rust
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
|
// file at the top-level directory of this distribution and at
|
|
// http://rust-lang.org/COPYRIGHT.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
// option. This file may not be copied, modified, or distributed
|
|
// except according to those terms.
|
|
|
|
extern crate collections;
|
|
|
|
use std::collections::Bitv;
|
|
use std::num::Float;
|
|
|
|
fn main() {
|
|
// Generate sieve of Eratosthenes for n up to 1e6
|
|
let n = 1000000u;
|
|
let mut sieve = Bitv::from_elem(n+1, true);
|
|
let limit: uint = (n as f32).sqrt() as uint;
|
|
for i in range(2, limit+1) {
|
|
if sieve[i] {
|
|
let mut j = 0;
|
|
while i*i + j*i <= n {
|
|
sieve.set(i*i+j*i, false);
|
|
j += 1;
|
|
}
|
|
}
|
|
}
|
|
for i in range(2, n+1) {
|
|
if sieve[i] {
|
|
}
|
|
}
|
|
}
|
|
|