Skip to content

Commit cdc6789

Browse files
committed
auto merge of #11951 : dmanescu/rust/reserve-rename, r=huonw
Changes in std::{str,vec,hashmap} and extra::{priority_queue,ringbuf}. Fixes #11949
2 parents 10de762 + 65f3578 commit cdc6789

File tree

5 files changed

+51
-53
lines changed

5 files changed

+51
-53
lines changed

src/libextra/priority_queue.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,14 @@ impl<T:Ord> PriorityQueue<T> {
5151
/// Returns the number of elements the queue can hold without reallocating
5252
pub fn capacity(&self) -> uint { self.data.capacity() }
5353

54-
pub fn reserve(&mut self, n: uint) { self.data.reserve(n) }
55-
56-
pub fn reserve_at_least(&mut self, n: uint) {
57-
self.data.reserve_at_least(n)
54+
/// Reserve capacity for exactly n elements in the PriorityQueue.
55+
/// Do nothing if the capacity is already sufficient.
56+
pub fn reserve_exact(&mut self, n: uint) { self.data.reserve_exact(n) }
57+
58+
/// Reserve capacity for at least n elements in the PriorityQueue.
59+
/// Do nothing if the capacity is already sufficient.
60+
pub fn reserve(&mut self, n: uint) {
61+
self.data.reserve(n)
5862
}
5963

6064
/// Pop the greatest item from the queue - fails if empty
@@ -203,7 +207,7 @@ impl<T: Ord> Extendable<T> for PriorityQueue<T> {
203207
let (lower, _) = iter.size_hint();
204208

205209
let len = self.capacity();
206-
self.reserve_at_least(len + lower);
210+
self.reserve(len + lower);
207211

208212
for elem in *iter {
209213
self.push(elem);

src/libextra/ringbuf.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ impl<T> RingBuf<T> {
168168
/// # Arguments
169169
///
170170
/// * n - The number of elements to reserve space for
171-
pub fn reserve(&mut self, n: uint) {
172-
self.elts.reserve(n);
171+
pub fn reserve_exact(&mut self, n: uint) {
172+
self.elts.reserve_exact(n);
173173
}
174174

175175
/// Reserve capacity for at least `n` elements in the given RingBuf,
@@ -182,8 +182,8 @@ impl<T> RingBuf<T> {
182182
/// # Arguments
183183
///
184184
/// * n - The number of elements to reserve space for
185-
pub fn reserve_at_least(&mut self, n: uint) {
186-
self.elts.reserve_at_least(n);
185+
pub fn reserve(&mut self, n: uint) {
186+
self.elts.reserve(n);
187187
}
188188

189189
/// Front-to-back iterator.
@@ -641,26 +641,26 @@ mod tests {
641641
}
642642

643643
#[test]
644-
fn test_reserve() {
644+
fn test_reserve_exact() {
645645
let mut d = RingBuf::new();
646646
d.push_back(0u64);
647-
d.reserve(50);
647+
d.reserve_exact(50);
648648
assert_eq!(d.elts.capacity(), 50);
649649
let mut d = RingBuf::new();
650650
d.push_back(0u32);
651-
d.reserve(50);
651+
d.reserve_exact(50);
652652
assert_eq!(d.elts.capacity(), 50);
653653
}
654654

655655
#[test]
656-
fn test_reserve_at_least() {
656+
fn test_reserve() {
657657
let mut d = RingBuf::new();
658658
d.push_back(0u64);
659-
d.reserve_at_least(50);
659+
d.reserve(50);
660660
assert_eq!(d.elts.capacity(), 64);
661661
let mut d = RingBuf::new();
662662
d.push_back(0u32);
663-
d.reserve_at_least(50);
663+
d.reserve(50);
664664
assert_eq!(d.elts.capacity(), 64);
665665
}
666666

src/libstd/hashmap.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ impl<K: Hash + Eq, V> HashMap<K, V> {
384384
}
385385

386386
/// Reserve space for at least `n` elements in the hash table.
387-
pub fn reserve_at_least(&mut self, n: uint) {
387+
pub fn reserve(&mut self, n: uint) {
388388
if n > self.buckets.len() {
389389
let buckets = n * 4 / 3 + 1;
390390
self.resize(num::next_power_of_two(buckets));
@@ -793,8 +793,8 @@ impl<T:Hash + Eq> HashSet<T> {
793793
}
794794

795795
/// Reserve space for at least `n` elements in the hash table.
796-
pub fn reserve_at_least(&mut self, n: uint) {
797-
self.map.reserve_at_least(n)
796+
pub fn reserve(&mut self, n: uint) {
797+
self.map.reserve(n)
798798
}
799799

800800
/// Returns true if the hash set contains a value equivalent to the

src/libstd/str.rs

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ use iter::{Iterator, FromIterator, Extendable, range};
9191
use iter::{Filter, AdditiveIterator, Map};
9292
use iter::{Rev, DoubleEndedIterator, ExactSize};
9393
use libc;
94-
use num::{Saturating, checked_next_power_of_two};
94+
use num::Saturating;
9595
use option::{None, Option, Some};
9696
use ptr;
9797
use ptr::RawPtr;
@@ -163,12 +163,7 @@ pub fn from_char(ch: char) -> ~str {
163163

164164
/// Convert a vector of chars to a string
165165
pub fn from_chars(chs: &[char]) -> ~str {
166-
let mut buf = ~"";
167-
buf.reserve(chs.len());
168-
for ch in chs.iter() {
169-
buf.push_char(*ch)
170-
}
171-
buf
166+
chs.iter().map(|c| *c).collect()
172167
}
173168

174169
#[doc(hidden)]
@@ -852,8 +847,7 @@ pub fn utf16_chars(v: &[u16], f: |char|) {
852847

853848
/// Allocates a new string from the utf-16 slice provided
854849
pub fn from_utf16(v: &[u16]) -> ~str {
855-
let mut buf = ~"";
856-
buf.reserve(v.len());
850+
let mut buf = with_capacity(v.len());
857851
utf16_chars(v, |ch| buf.push_char(ch));
858852
buf
859853
}
@@ -2096,17 +2090,15 @@ impl<'a> StrSlice<'a> for &'a str {
20962090
}
20972091

20982092
fn escape_default(&self) -> ~str {
2099-
let mut out: ~str = ~"";
2100-
out.reserve_at_least(self.len());
2093+
let mut out = with_capacity(self.len());
21012094
for c in self.chars() {
21022095
c.escape_default(|c| out.push_char(c));
21032096
}
21042097
out
21052098
}
21062099

21072100
fn escape_unicode(&self) -> ~str {
2108-
let mut out: ~str = ~"";
2109-
out.reserve_at_least(self.len());
2101+
let mut out = with_capacity(self.len());
21102102
for c in self.chars() {
21112103
c.escape_unicode(|c| out.push_char(c));
21122104
}
@@ -2430,7 +2422,7 @@ pub trait OwnedStr {
24302422
///
24312423
/// * s - A string
24322424
/// * n - The number of bytes to reserve space for
2433-
fn reserve(&mut self, n: uint);
2425+
fn reserve_exact(&mut self, n: uint);
24342426

24352427
/// Reserves capacity for at least `n` bytes in the given string.
24362428
///
@@ -2448,7 +2440,7 @@ pub trait OwnedStr {
24482440
///
24492441
/// * s - A string
24502442
/// * n - The number of bytes to reserve space for
2451-
fn reserve_at_least(&mut self, n: uint);
2443+
fn reserve(&mut self, n: uint);
24522444

24532445
/// Returns the number of single-byte characters the string can hold without
24542446
/// reallocating
@@ -2474,7 +2466,7 @@ impl OwnedStr for ~str {
24742466
#[inline]
24752467
fn push_str_no_overallocate(&mut self, rhs: &str) {
24762468
let new_cap = self.len() + rhs.len();
2477-
self.reserve(new_cap);
2469+
self.reserve_exact(new_cap);
24782470
self.push_str(rhs);
24792471
}
24802472

@@ -2553,15 +2545,17 @@ impl OwnedStr for ~str {
25532545
}
25542546

25552547
#[inline]
2556-
fn reserve(&mut self, n: uint) {
2548+
fn reserve_exact(&mut self, n: uint) {
25572549
unsafe {
2558-
raw::as_owned_vec(self).reserve(n)
2550+
raw::as_owned_vec(self).reserve_exact(n)
25592551
}
25602552
}
25612553

25622554
#[inline]
2563-
fn reserve_at_least(&mut self, n: uint) {
2564-
self.reserve(checked_next_power_of_two(n).unwrap_or(n))
2555+
fn reserve(&mut self, n: uint) {
2556+
unsafe {
2557+
raw::as_owned_vec(self).reserve(n)
2558+
}
25652559
}
25662560

25672561
#[inline]
@@ -2619,7 +2613,7 @@ impl Extendable<char> for ~str {
26192613
fn extend<T: Iterator<char>>(&mut self, iterator: &mut T) {
26202614
let (lower, _) = iterator.size_hint();
26212615
let reserve = lower + self.len();
2622-
self.reserve_at_least(reserve);
2616+
self.reserve(reserve);
26232617
for ch in *iterator {
26242618
self.push_char(ch)
26252619
}

src/libstd/vec.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,7 +1292,7 @@ pub trait OwnedVector<T> {
12921292
* This method always succeeds in reserving space for `n` elements, or it does
12931293
* not return.
12941294
*/
1295-
fn reserve(&mut self, n: uint);
1295+
fn reserve_exact(&mut self, n: uint);
12961296
/**
12971297
* Reserves capacity for at least `n` elements in the given vector.
12981298
*
@@ -1307,7 +1307,7 @@ pub trait OwnedVector<T> {
13071307
*
13081308
* * n - The number of elements to reserve space for
13091309
*/
1310-
fn reserve_at_least(&mut self, n: uint);
1310+
fn reserve(&mut self, n: uint);
13111311
/**
13121312
* Reserves capacity for at least `n` additional elements in the given vector.
13131313
*
@@ -1425,7 +1425,7 @@ impl<T> OwnedVector<T> for ~[T] {
14251425
self.move_iter().rev()
14261426
}
14271427

1428-
fn reserve(&mut self, n: uint) {
1428+
fn reserve_exact(&mut self, n: uint) {
14291429
// Only make the (slow) call into the runtime if we have to
14301430
if self.capacity() < n {
14311431
unsafe {
@@ -1443,16 +1443,16 @@ impl<T> OwnedVector<T> for ~[T] {
14431443
}
14441444

14451445
#[inline]
1446-
fn reserve_at_least(&mut self, n: uint) {
1447-
self.reserve(checked_next_power_of_two(n).unwrap_or(n));
1446+
fn reserve(&mut self, n: uint) {
1447+
self.reserve_exact(checked_next_power_of_two(n).unwrap_or(n));
14481448
}
14491449

14501450
#[inline]
14511451
fn reserve_additional(&mut self, n: uint) {
14521452
if self.capacity() - self.len() < n {
14531453
match self.len().checked_add(&n) {
14541454
None => fail!("vec::reserve_additional: `uint` overflow"),
1455-
Some(new_cap) => self.reserve_at_least(new_cap)
1455+
Some(new_cap) => self.reserve(new_cap)
14561456
}
14571457
}
14581458
}
@@ -1635,7 +1635,7 @@ impl<T> OwnedVector<T> for ~[T] {
16351635
}
16361636
fn grow_fn(&mut self, n: uint, op: |uint| -> T) {
16371637
let new_len = self.len() + n;
1638-
self.reserve_at_least(new_len);
1638+
self.reserve(new_len);
16391639
let mut i: uint = 0u;
16401640
while i < n {
16411641
self.push(op(i));
@@ -1694,15 +1694,15 @@ impl<T:Clone> OwnedCloneableVector<T> for ~[T] {
16941694
#[inline]
16951695
fn push_all(&mut self, rhs: &[T]) {
16961696
let new_len = self.len() + rhs.len();
1697-
self.reserve(new_len);
1697+
self.reserve_exact(new_len);
16981698

16991699
for elt in rhs.iter() {
17001700
self.push((*elt).clone())
17011701
}
17021702
}
17031703
fn grow(&mut self, n: uint, initval: &T) {
17041704
let new_len = self.len() + n;
1705-
self.reserve_at_least(new_len);
1705+
self.reserve(new_len);
17061706
let mut i: uint = 0u;
17071707

17081708
while i < n {
@@ -2857,7 +2857,7 @@ impl<A> Extendable<A> for ~[A] {
28572857
fn extend<T: Iterator<A>>(&mut self, iterator: &mut T) {
28582858
let (lower, _) = iterator.size_hint();
28592859
let len = self.len();
2860-
self.reserve(len + lower);
2860+
self.reserve_exact(len + lower);
28612861
for x in *iterator {
28622862
self.push(x);
28632863
}
@@ -3579,10 +3579,10 @@ mod tests {
35793579
#[test]
35803580
fn test_capacity() {
35813581
let mut v = ~[0u64];
3582-
v.reserve(10u);
3582+
v.reserve_exact(10u);
35833583
assert_eq!(v.capacity(), 10u);
35843584
let mut v = ~[0u32];
3585-
v.reserve(10u);
3585+
v.reserve_exact(10u);
35863586
assert_eq!(v.capacity(), 10u);
35873587
}
35883588

@@ -4018,7 +4018,7 @@ mod tests {
40184018
#[should_fail]
40194019
fn test_overflow_does_not_cause_segfault() {
40204020
let mut v = ~[];
4021-
v.reserve(-1);
4021+
v.reserve_exact(-1);
40224022
v.push(1);
40234023
v.push(2);
40244024
}
@@ -4028,7 +4028,7 @@ mod tests {
40284028
fn test_overflow_does_not_cause_segfault_managed() {
40294029
use rc::Rc;
40304030
let mut v = ~[Rc::new(1)];
4031-
v.reserve(-1);
4031+
v.reserve_exact(-1);
40324032
v.push(Rc::new(2));
40334033
}
40344034

0 commit comments

Comments
 (0)