Skip to content

Commit 844a21a

Browse files
authored
Add buffered printing for tsort (#12733)
1 parent 073b882 commit 844a21a

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

src/uu/tsort/src/tsort.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use std::collections::VecDeque;
1010
use std::collections::hash_map::Entry;
1111
use std::ffi::OsString;
1212
use std::fs::File;
13-
use std::io::{self, BufRead, BufReader};
13+
use std::io::{self, BufRead, BufReader, BufWriter, Write};
1414
use string_interner::StringInterner;
1515
use string_interner::backend::BucketBackend;
1616
use thiserror::Error;
@@ -86,8 +86,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
8686
process_input(reader, &mut g)?;
8787
}
8888

89-
g.run_tsort();
90-
Ok(())
89+
g.run_tsort()
9190
}
9291

9392
pub fn uu_app() -> Command {
@@ -260,7 +259,7 @@ impl Graph {
260259
}
261260

262261
/// Implementation of algorithm T from TAOCP (Don. Knuth), vol. 1.
263-
fn run_tsort(&mut self) {
262+
fn run_tsort(&mut self) -> UResult<()> {
264263
let mut independent_nodes_queue: VecDeque<Sym> = self
265264
.nodes
266265
.iter()
@@ -277,10 +276,10 @@ impl Graph {
277276
independent_nodes_queue
278277
.make_contiguous()
279278
.sort_unstable_by(|a, b| self.get_node_name(*a).cmp(self.get_node_name(*b)));
280-
279+
let mut out = BufWriter::new(io::stdout().lock());
281280
while !self.nodes.is_empty() {
282281
let v = self.find_next_node(&mut independent_nodes_queue);
283-
println!("{}", self.get_node_name(v));
282+
writeln!(out, "{}", self.get_node_name(v))?;
284283
if let Some(node_to_process) = self.nodes.remove(&v) {
285284
for successor_name in node_to_process.successor_tokens.into_iter().rev() {
286285
// we reverse to match GNU tsort order
@@ -295,6 +294,7 @@ impl Graph {
295294
}
296295
}
297296
}
297+
Ok(())
298298
}
299299
pub fn indegree(&self, sym: Sym) -> Option<usize> {
300300
self.nodes.get(&sym).map(|data| data.predecessor_count)

0 commit comments

Comments
 (0)