commit caf5148b92f80e9617b07ba71ae9fab12c290e15 Author: a-Sansara Date: Sat Dec 17 18:33:09 2016 +0100 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/index.js b/index.js new file mode 100644 index 0000000..8d639ca --- /dev/null +++ b/index.js @@ -0,0 +1,68 @@ +'use strict'; + +String.prototype.removeEndNullBytes = function() { + return this.replace(/\0+$/g, ''); +} +String.prototype.removeStartNullBytes = function() { + return this.replace(/^\0+/g, ''); +} + +var pluie = +{ + bin : + { + enc : new TextEncoder("utf-8"), + + dec : new TextDecoder("utf-8", {fatal: true}), + + intFromBytes : function(bytes) + { + // Big Endian + for (var i = value = 0, lim = bytes.length; i < lim; i++) { + value = value * 256 + bytes[i]; + } + return value; + }, + + bytesFromInt : function(value, size) + { + var bytes = new Uint8Array(size); + while (value) { + bytes.set([value & 255], --size); + value >>= 8;; + } + return bytes; + }, + + pack : function(size, type, value) + { + var packed = null + if (type == 'n' || type == 'N') { + // js int max on 32 signed bits + if (value >= 0 && value <= 2147483647) { + packed = this.bytesFromInt(value, type == 'n' ? 2 : 4); + } + } + else if (type == 'a') { + packed = new Uint8Array(size); + packed.set(this.enc.encode(value), 0); + } + return packed; + }, + + unpack : function(size, type, bytes) + { + var unpacked = null + if (type == 'n' || type == 'N') { + var selByte = bytes.slice(0, size*(type == 'n' ? 2 : 4)); + unpacked = this.intFromBytes(selByte); + } + else if (type == 'a') { + unpacked = this.dec.decode(bytes.slice(0, size)).removeEndNullBytes(); + } + return unpacked; + } + } +} + +module.exports = pluie.bin; diff --git a/package.json b/package.json new file mode 100644 index 0000000..35e5041 --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "@pluie/bin", + "version": "1.0.2", + "description": "Node.js pluie small binary API for the browser", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "a-Sansara", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://git.pluie.org/pluie/js-bin.git" + } +}