Skip to content

Commit e550e7e

Browse files
committed
---
yaml --- r: 142517 b: refs/heads/try2 c: 149c976 h: refs/heads/master i: 142515: 018ef18 v: v3
1 parent fdf506b commit e550e7e

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 52949fbf1876ecd03303006c534a74c5e29bc90d
8+
refs/heads/try2: 149c976aa0b6441b93f2e2140e10e0424d39ea17
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/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

0 commit comments

Comments
 (0)