Skip to content

Commit b4abd43

Browse files
committed
---
yaml --- r: 83956 b: refs/heads/dist-snap c: 37494d3 h: refs/heads/master v: v3
1 parent 2871543 commit b4abd43

File tree

3 files changed

+65
-86
lines changed

3 files changed

+65
-86
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ refs/heads/try: 0983ebe5310d4eb6d289f636f7ed0536c08bbc0e
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c
9-
refs/heads/dist-snap: fc17d4371f1d3e0c40ebcb6de0b9e7cbb89fa0c9
9+
refs/heads/dist-snap: 37494d39d38be33a589a1f46dae38fe2ceb9d94f
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1212
refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0

branches/dist-snap/src/libextra/json.rs

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -481,22 +481,30 @@ pub fn to_pretty_str(json: &Json) -> ~str {
481481
io::with_str_writer(|wr| to_pretty_writer(wr, json))
482482
}
483483

484+
static BUF_SIZE : uint = 64000;
485+
484486
#[allow(missing_doc)]
485487
pub struct Parser {
486488
priv rdr: @io::Reader,
489+
priv buf: ~[char],
490+
priv buf_idx: uint,
487491
priv ch: char,
488492
priv line: uint,
489493
priv col: uint,
490494
}
491495

492496
/// Decode a json value from an io::reader
493497
pub fn Parser(rdr: @io::Reader) -> Parser {
494-
Parser {
498+
let mut p = Parser {
495499
rdr: rdr,
496-
ch: rdr.read_char(),
500+
buf: rdr.read_chars(BUF_SIZE),
501+
buf_idx: 0,
502+
ch: 0 as char,
497503
line: 1,
498-
col: 1,
499-
}
504+
col: 0,
505+
};
506+
p.bump();
507+
p
500508
}
501509

502510
impl Parser {
@@ -521,13 +529,26 @@ impl Parser {
521529
fn eof(&self) -> bool { self.ch == -1 as char }
522530

523531
fn bump(&mut self) {
524-
self.ch = self.rdr.read_char();
532+
if self.eof() {
533+
return;
534+
}
535+
536+
self.col += 1u;
537+
538+
if self.buf_idx >= self.buf.len() {
539+
self.buf = self.rdr.read_chars(BUF_SIZE);
540+
if self.buf.len() == 0 {
541+
self.ch = -1 as char;
542+
return;
543+
}
544+
self.buf_idx = 0;
545+
}
546+
self.ch = self.buf[self.buf_idx];
547+
self.buf_idx += 1;
525548

526549
if self.ch == '\n' {
527550
self.line += 1u;
528551
self.col = 1u;
529-
} else {
530-
self.col += 1u;
531552
}
532553
}
533554

branches/dist-snap/src/libstd/vec.rs

Lines changed: 36 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,9 +1091,7 @@ pub trait OwnedVector<T> {
10911091

10921092
fn push_all_move(&mut self, rhs: ~[T]);
10931093
fn pop(&mut self) -> T;
1094-
fn pop_opt(&mut self) -> Option<T>;
10951094
fn shift(&mut self) -> T;
1096-
fn shift_opt(&mut self) -> Option<T>;
10971095
fn unshift(&mut self, x: T);
10981096
fn insert(&mut self, i: uint, x:T);
10991097
fn remove(&mut self, i: uint) -> T;
@@ -1283,49 +1281,35 @@ impl<T> OwnedVector<T> for ~[T] {
12831281
}
12841282
}
12851283

1286-
/// Remove the last element from a vector and return it, or `None` if it is empty
1287-
fn pop_opt(&mut self) -> Option<T> {
1288-
match self.len() {
1289-
0 => None,
1290-
ln => {
1291-
let valptr = ptr::to_mut_unsafe_ptr(&mut self[ln - 1u]);
1292-
unsafe {
1293-
let val = ptr::replace_ptr(valptr, intrinsics::init());
1294-
raw::set_len(self, ln - 1u);
1295-
Some(val)
1296-
}
1297-
}
1298-
}
1299-
}
1300-
1301-
1302-
/// Remove the last element from a vector and return it, failing if it is empty
1303-
#[inline]
1284+
/// Remove the last element from a vector and return it
13041285
fn pop(&mut self) -> T {
1305-
self.pop_opt().expect("pop: empty vector")
1286+
let ln = self.len();
1287+
if ln == 0 {
1288+
fail!("sorry, cannot pop an empty vector")
1289+
}
1290+
let valptr = ptr::to_mut_unsafe_ptr(&mut self[ln - 1u]);
1291+
unsafe {
1292+
let val = ptr::replace_ptr(valptr, intrinsics::init());
1293+
raw::set_len(self, ln - 1u);
1294+
val
1295+
}
13061296
}
13071297

13081298
/// Removes the first element from a vector and return it
1309-
#[inline]
13101299
fn shift(&mut self) -> T {
1311-
self.shift_opt().expect("shift: empty vector")
1312-
}
1313-
1314-
/// Removes the first element from a vector and return it, or `None` if it is empty
1315-
fn shift_opt(&mut self) -> Option<T> {
13161300
unsafe {
1317-
let ln = match self.len() {
1318-
0 => return None,
1319-
1 => return self.pop_opt(),
1320-
2 => {
1321-
let last = self.pop();
1322-
let first = self.pop_opt();
1323-
self.push(last);
1324-
return first;
1325-
}
1326-
x => x
1327-
};
1301+
assert!(!self.is_empty());
1302+
1303+
if self.len() == 1 { return self.pop() }
1304+
1305+
if self.len() == 2 {
1306+
let last = self.pop();
1307+
let first = self.pop();
1308+
self.push(last);
1309+
return first;
1310+
}
13281311

1312+
let ln = self.len();
13291313
let next_ln = self.len() - 1;
13301314

13311315
// Save the last element. We're going to overwrite its position
@@ -1361,7 +1345,7 @@ impl<T> OwnedVector<T> for ~[T] {
13611345
let vp = raw::to_mut_ptr(*self);
13621346
let vp = ptr::mut_offset(vp, next_ln - 1);
13631347

1364-
Some(ptr::replace_ptr(vp, work_elt))
1348+
ptr::replace_ptr(vp, work_elt)
13651349
}
13661350
}
13671351

@@ -2105,13 +2089,18 @@ impl<T> Iterator<T> for VecConsumeIterator<T> {
21052089
//
21062090
// [1,2,3,4,5] => 1, [5,2,3,4] => 2, [5,4,3] => 3, [5,4] => 4,
21072091
// [5] -> 5, []
2108-
let l = self.v.len();
2109-
if self.idx < l {
2110-
self.v.swap(self.idx, l - 1);
2111-
self.idx += 1;
2112-
}
21132092

2114-
self.v.pop_opt()
2093+
if self.v.is_empty() {
2094+
None
2095+
} else {
2096+
let l = self.v.len();
2097+
if self.idx < l {
2098+
self.v.swap(self.idx, l - 1);
2099+
self.idx += 1;
2100+
}
2101+
2102+
Some(self.v.pop())
2103+
}
21152104
}
21162105
}
21172106

@@ -2122,7 +2111,8 @@ pub struct VecConsumeRevIterator<T> {
21222111

21232112
impl<T> Iterator<T> for VecConsumeRevIterator<T> {
21242113
fn next(&mut self) -> Option<T> {
2125-
self.v.pop_opt()
2114+
if self.v.is_empty() { None }
2115+
else { Some(self.v.pop()) }
21262116
}
21272117
}
21282118

@@ -2425,17 +2415,6 @@ mod tests {
24252415
}
24262416

24272417
#[test]
2428-
fn test_pop_opt() {
2429-
let mut v = ~[5];
2430-
let e = v.pop_opt();
2431-
assert_eq!(v.len(), 0);
2432-
assert_eq!(e, Some(5));
2433-
let f = v.pop_opt();
2434-
assert_eq!(f, None);
2435-
let g = v.pop_opt();
2436-
assert_eq!(g, None);
2437-
}
2438-
24392418
fn test_swap_remove() {
24402419
let mut v = ~[1, 2, 3, 4, 5];
24412420
let mut e = v.swap_remove(0);
@@ -2770,27 +2749,6 @@ mod tests {
27702749
assert_eq!([&[1], &[2], &[3]].connect_vec(&0), ~[1, 0, 2, 0, 3]);
27712750
}
27722751

2773-
#[test]
2774-
fn test_shift() {
2775-
let mut x = ~[1, 2, 3];
2776-
assert_eq!(x.shift(), 1);
2777-
assert_eq!(&x, &~[2, 3]);
2778-
assert_eq!(x.shift(), 2);
2779-
assert_eq!(x.shift(), 3);
2780-
assert_eq!(x.len(), 0);
2781-
}
2782-
2783-
#[test]
2784-
fn test_shift_opt() {
2785-
let mut x = ~[1, 2, 3];
2786-
assert_eq!(x.shift_opt(), Some(1));
2787-
assert_eq!(&x, &~[2, 3]);
2788-
assert_eq!(x.shift_opt(), Some(2));
2789-
assert_eq!(x.shift_opt(), Some(3));
2790-
assert_eq!(x.shift_opt(), None);
2791-
assert_eq!(x.len(), 0);
2792-
}
2793-
27942752
#[test]
27952753
fn test_unshift() {
27962754
let mut x = ~[1, 2, 3];

0 commit comments

Comments
 (0)