2022-04-14 04:50:37 +00:00
|
|
|
use std::io::prelude::*;
|
|
|
|
use std::io;
|
|
|
|
use std::fs::File;
|
2022-05-18 02:04:32 +00:00
|
|
|
use std::collections::BTreeMap;
|
2022-05-19 02:57:42 +00:00
|
|
|
use ::next_gen::prelude::*;
|
2022-04-14 04:50:37 +00:00
|
|
|
|
|
|
|
use num::*;
|
|
|
|
use clap::Parser;
|
|
|
|
|
|
|
|
#[derive(Parser)]
|
|
|
|
struct Cli {
|
|
|
|
/// The path to the file to read
|
|
|
|
#[clap(parse(from_os_str))]
|
|
|
|
path: std::path::PathBuf,
|
|
|
|
}
|
|
|
|
|
2022-05-18 02:04:32 +00:00
|
|
|
struct Signal {
|
|
|
|
name : String,
|
|
|
|
timeline : BTreeMap<BigInt, BigInt>,
|
|
|
|
children_arena: Vec<usize>,
|
|
|
|
parent_index : usize
|
|
|
|
}
|
|
|
|
|
2022-04-14 04:50:37 +00:00
|
|
|
|
2022-05-19 02:58:20 +00:00
|
|
|
#[generator(yield(&str))]
|
2022-05-19 02:57:42 +00:00
|
|
|
fn yield_words(file : File) {
|
2022-04-14 04:50:37 +00:00
|
|
|
let mut reader = io::BufReader::new(file);
|
|
|
|
|
2022-05-19 01:32:41 +00:00
|
|
|
let mut buffer = String::new();
|
2022-05-18 02:04:32 +00:00
|
|
|
let mut word_count = 0u64;
|
2022-05-19 02:57:42 +00:00
|
|
|
let mut EOF = false;
|
2022-05-19 01:32:41 +00:00
|
|
|
let line_chunk_size = 25;
|
2022-04-14 04:50:37 +00:00
|
|
|
|
2022-05-19 02:57:42 +00:00
|
|
|
while {!EOF} {
|
2022-05-19 01:32:41 +00:00
|
|
|
for _ in 0..line_chunk_size {
|
|
|
|
let bytes_read = reader.read_line(&mut buffer).unwrap();
|
|
|
|
if bytes_read == 0 {
|
2022-05-19 02:57:42 +00:00
|
|
|
EOF = true;
|
2022-05-19 01:32:41 +00:00
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
2022-05-19 00:47:55 +00:00
|
|
|
|
2022-05-19 01:32:41 +00:00
|
|
|
let words = buffer.split_ascii_whitespace();
|
|
|
|
|
|
|
|
for word in words {
|
2022-05-19 02:58:20 +00:00
|
|
|
yield_!(word);
|
2022-05-19 01:32:41 +00:00
|
|
|
}
|
2022-05-19 00:47:55 +00:00
|
|
|
|
2022-05-19 01:32:41 +00:00
|
|
|
buffer.clear();
|
2022-04-14 04:50:37 +00:00
|
|
|
}
|
2022-05-19 01:32:41 +00:00
|
|
|
|
2022-04-14 04:50:37 +00:00
|
|
|
|
2022-05-19 02:57:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() -> std::io::Result<()> {
|
|
|
|
let args = Cli::parse();
|
|
|
|
|
|
|
|
let file = File::open(&args.path)?;
|
|
|
|
let mut word_count = 0;
|
|
|
|
mk_gen!(let mut generator = yield_words(file));
|
|
|
|
|
|
|
|
for word in generator {
|
|
|
|
word_count += 1;
|
|
|
|
}
|
2022-04-14 04:50:37 +00:00
|
|
|
Ok(())
|
|
|
|
}
|