@@ -10,7 +10,7 @@ use std::collections::VecDeque;
1010use std:: collections:: hash_map:: Entry ;
1111use std:: ffi:: OsString ;
1212use std:: fs:: File ;
13- use std:: io:: { self , BufRead , BufReader } ;
13+ use std:: io:: { self , BufRead , BufReader , BufWriter , Write } ;
1414use string_interner:: StringInterner ;
1515use string_interner:: backend:: BucketBackend ;
1616use 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
9392pub 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