streaming version of parser

This commit is contained in:
Aliaksei Chapyzhenka 2019-11-06 18:35:15 -08:00
parent 948293213f
commit 08144a4d7b
3 changed files with 43 additions and 42 deletions

View File

@ -10,7 +10,7 @@ const dir = './tmp/';
fs.readdir(dir).then(files => {
const tt0 = Date.now();
async.eachLimit(files, 1, (fileName, callback) => {
async.eachLimit(files, 2, (fileName, callback) => {
let start = 0;
let stop = 0;
@ -18,29 +18,31 @@ fs.readdir(dir).then(files => {
let inst = vcd();
// inst.on('$enddefinitions', () => {
inst.on('$enddefinitions', () => {
// console.log(res);
// console.log(inst.info);
// });
inst.onTrigger('D1', time => {
if (time > 10) {
if (start == 0) {
start = time;
} else {
stop = time;
inst.onTrigger('D1', time => {
if (time > 10) {
if (start == 0) {
start = time;
} else {
stop = time;
}
}
}
});
});
const s = fs.createReadStream(dir + fileName);
s.on('data', inst.execute);
s.on('end', () => {
inst.on('finish', () => {
console.log(fileName, (stop - start), ((Date.now() - t0) / 1000 + 's'));
callback();
});
inst.on('error', err => {
console.log(err);
});
fs.createReadStream(dir + fileName).pipe(inst);
}, () => {
console.log('Total time: ' + (Date.now() - tt0) / 1000 + 's');
});

View File

@ -1,38 +1,37 @@
'use strict';
const stream = require('stream');
const EventEmitter = require('events').EventEmitter;
const pkg = require('./package.json');
let lib = require('bindings')('vcd.node');
const version = pkg.version;
module.exports = () => {
const lifee = new EventEmitter();
const triee = new EventEmitter();
const lifemit = lifee.emit.bind(lifee);
const triemit = triee.emit.bind(triee);
const info = {path: []};
const s = new stream.Writable();
// const lifee = new EventEmitter();
const lifemit = s.emit.bind(s);
const triee = new EventEmitter();
const triemit = triee.emit.bind(triee);
const cxt = lib.init(lifemit, triemit, info);
const execute = chunk => lib.execute(cxt, lifemit, triemit, info, chunk);
const on = (id, fn) => {
lifee.on(id, fn);
s._write = function (chunk, encoding, callback) {
lib.execute(cxt, lifemit, triemit, info, chunk);
callback();
};
const onTrigger = (id, fn) => {
s.onTrigger = (id, fn) => {
lib.setTrigger(cxt, id);
triee.on(id, fn);
};
return {
version,
info,
execute,
on,
onTrigger
};
s.version = pkg.version;
s.info = info;
return s;
};

View File

@ -17,7 +17,7 @@ describe('basic', () => {
it('fail: foo bar', done => {
const inst = vcd();
expect(inst.execute(Buffer.from(' foo bar ???'))).to.eq(1);
expect(inst.write(Buffer.from(' foo bar ???'))).to.eq(true);
expect(inst.info).to.deep.eq({
path: [],
status: 'declaration'
@ -27,9 +27,9 @@ describe('basic', () => {
it('$comment', done => {
const inst = vcd();
expect(inst.execute(Buffer.from(
expect(inst.write(Buffer.from(
' \n $comment some text $end $comment more text $end ???'
))).to.eq(1);
))).to.eq(true);
expect(inst.info).to.deep.eq({
path: [],
status: 'declaration'
@ -39,7 +39,7 @@ describe('basic', () => {
it('$version', done => {
const inst = vcd();
expect(inst.execute(Buffer.from(`
expect(inst.write(`
$version Generated by VerilatedVcd $end
$date Wed Sep 18 22:59:07 2019
$end
@ -54,9 +54,9 @@ $timescale 1ns $end
$enddefinitions $end
`
))).to.eq(0);
)).to.eq(true);
expect(inst.execute(Buffer.from(`
expect(inst.write(`
#1
0"}G
@ -72,7 +72,7 @@ b0000000011110000 {u
#303
b0000000000001111 {u
`
))).to.eq(0);
)).to.eq(true);
expect(inst.info).to.deep.eq({
path: [],