Produce binary data with a neat DSL
npm install concentrateConcentrate
===========
Produce binary data with a neat DSL.
Overview
--------
Concentrate allows you to efficiently create buffers by chaining together calls
to write numbers, strings and even other buffers! Concentrate is also easily
extendable so you can implement your own custom types.
If you want to parse binary data, might I suggest dissolve?
Features
--------
* Accurate handling of [u]int{8,16,32} numbers in both signed and unsigned
variants using fast, built-in Buffer
methods
* Fast and reliable operation through lazy compilation of results
* Tiny (<150 LoC) implementation, allowing for easy debugging
* Stream interface with explicit flushing for maximum speeeeeeed (inspired by
felixge, so you know it's good!)
Installation
------------
Available via npm:
> $ npm install concentrate
Or via git:
> $ git clone git://github.com/deoxxa/concentrate.git node_modules/concentrate
Usage
-----
Also see example.js and
example-complex.js.
``javascript
#!/usr/bin/env node
var Concentrate = require("./index");
var data = Concentrate().uint8(1).uint8(2).uint32be(555).string("hi there", "utf8").result();
console.log(data);
`
``
Oh look! Streams! Also see example-stream.js.
`javascript
#!/usr/bin/env node
var Concentrate = require("./index");
var c = Concentrate();
c.on("end", function() {
console.log("ended");
});
c.on("readable", function() {
var e;
while (e = c.read()) {
console.log(e);
}
});
c.uint8(1).uint8(2).uint32be(555).string("hi there", "utf8").floatbe(2.1).doublebe(2.1).flush();
c.uint8(5).uint8(6);
c.uint8(7);
c.uint8(30);
c.flush().end();
`
``
ended
Methods
-------
All methods aside from result are chainable and all except copy return the
same Concentrate instance they were called on.
Execution Methods
-----------------
* copy() - returns a new copy of the current Concentrate instance, copying thereset()
state of the current job list
* - resets the job listresult()
* - compiles the job list into a buffer and returns that bufferflush()
* - compiles the current job list, emits it via the stream API, thenend()
clears the current job list
* - ends the stream part of Concentrate (basically makes it emit "end")
Writing methods
---------------
* buffer(data)string(data, encoding)
* - write a string with the given encodingint8(data)
* - signed 8 bit integersint8(data)
* - signed 8 bit integeruint8(data)
* - unsigned 8 bit integerint16(data)
* - signed, little endian 16 bit integerint16le(data)
* - signed, little endian 16 bit integerint16be(data)
* - signed, big endian 16 bit integersint16(data)
* - signed, little endian 16 bit integersint16le(data)
* - signed, little endian 16 bit integersint16be(data)
* - signed, big endian 16 bit integeruint16(data)
* - unsigned, little endian 16 bit integeruint16le(data)
* - unsigned, little endian 16 bit integeruint16be(data)
* - unsigned, big endian 16 bit integerint32(data)
* - signed, little endian 32 bit integerint32le(data)
* - signed, little endian 32 bit integerint32be(data)
* - signed, big endian 32 bit integersint32(data)
* - signed, little endian 32 bit integersint32le(data)
* - signed, little endian 32 bit integersint32be(data)
* - signed, big endian 32 bit integeruint32(data)
* - unsigned, little endian 32 bit integeruint32le(data)
* - unsigned, little endian 32 bit integeruint32be(data)
* - unsigned, big endian 32 bit integerfloatbe(data)
* - big endian 32 bit floatfloatle(data)
* - little endian 32 bit floatdoublebe(data)
* - big endian 64 bit doubledoublele(data)` - little endian 64 bit double
*
License
-------
3-clause BSD. A copy is included with the source.
Contact
-------
* GitHub (deoxxa)
* Twitter (@deoxxa)
* ADN (@deoxxa)
* Email (deoxxa@fknsrs.biz)