Skip to content

Commit f77030e

Browse files
committed
initial (wip)
1 parent 1149166 commit f77030e

9 files changed

+508
-2
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.DS_Store
2+
.idea
3+
node_modules/

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
data-struct
2-
===========
1+
# data-struct
32

43
Convert between JS object and Node.js buffer

gruntfile.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
module.exports = function(grunt) {
2+
grunt.initConfig({
3+
jshint: {
4+
options: {
5+
},
6+
default: {
7+
files: {
8+
src: ['src/**/*.js', '!src/libs/**/*']
9+
}
10+
},
11+
libs: {
12+
files: {
13+
src: ['src/libs/**/*']
14+
}
15+
}
16+
},
17+
18+
simplemocha: {
19+
options: {
20+
reporter: 'List'
21+
},
22+
all: { src: ['test/**/*.js'] }
23+
}
24+
});
25+
26+
require('jit-grunt')(grunt, {
27+
'simplemocha': 'grunt-simple-mocha'
28+
});
29+
30+
31+
grunt.registerTask('lint', ['jshint:default']);
32+
grunt.registerTask('test', ['simplemocha']);
33+
34+
grunt.registerTask('default', ['lint', 'test']);
35+
};

package.json

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"name": "data-struct",
3+
"version": "0.0.1",
4+
"description": "Convert between JS object and Node.js buffer",
5+
"main": "src/index.js",
6+
"scripts": {
7+
"test": "grunt test"
8+
},
9+
"repository": {
10+
"type": "git",
11+
"url": "https://github.com/rzcoder/data-struct.git"
12+
},
13+
"keywords": [
14+
"node",
15+
"buffer",
16+
"object",
17+
"convert"
18+
],
19+
"author": "rzcoder",
20+
"license": "MIT",
21+
"bugs": {
22+
"url": "https://github.com/rzcoder/data-struct/issues"
23+
},
24+
"homepage": "https://github.com/rzcoder/data-struct",
25+
"devDependencies": {
26+
"grunt": "^0.4.4",
27+
"grunt-simple-mocha": "^0.4.0",
28+
"jit-grunt": "^0.3.2",
29+
"chai": "^1.9.1",
30+
"grunt-contrib-jshint": "^0.9.2"
31+
},
32+
"dependencies": {
33+
}
34+
}

src/dataReader.js

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
var DataTypes = require('./dataTypes');
2+
3+
var typesTable = {};
4+
5+
typesTable[DataTypes.boolean] = function (pointer, buffer) {
6+
var res = buffer.readInt8(pointer.offset);
7+
pointer.offset += 1;
8+
return !!res;
9+
};
10+
11+
typesTable[DataTypes.int8] = function (pointer, buffer) {
12+
var res = buffer.readInt8(pointer.offset);
13+
pointer.offset += 1;
14+
return res;
15+
};
16+
17+
typesTable[DataTypes.uint8] = function (pointer, buffer) {
18+
var res = buffer.readUInt8(pointer.offset);
19+
pointer.offset += 1;
20+
return res;
21+
};
22+
23+
typesTable[DataTypes.int16] = function (pointer, buffer) {
24+
var res = buffer.readInt16BE(pointer.offset);
25+
pointer.offset += 2;
26+
return res;
27+
};
28+
29+
typesTable[DataTypes.uint16] = function (pointer, buffer) {
30+
var res = buffer.readUInt16BE(pointer.offset);
31+
pointer.offset += 2;
32+
return res;
33+
};
34+
35+
typesTable[DataTypes.int32] = function (pointer, buffer) {
36+
var res = buffer.readInt32BE(pointer.offset);
37+
pointer.offset += 4;
38+
return res;
39+
};
40+
41+
typesTable[DataTypes.uint32] = function (pointer, buffer) {
42+
var res = buffer.readUInt32BE(pointer.offset);
43+
pointer.offset += 4;
44+
return res;
45+
};
46+
47+
typesTable[DataTypes.float] = function (pointer, buffer) {
48+
var res = buffer.readFloatBE(pointer.offset);
49+
pointer.offset += 4;
50+
return res;
51+
};
52+
53+
typesTable[DataTypes.double] = function (pointer, buffer) {
54+
var res = buffer.readDoubleBE(pointer.offset);
55+
pointer.offset += 8;
56+
return res;
57+
};
58+
59+
typesTable[DataTypes.string] = function (pointer, buffer) {
60+
var length;
61+
length = buffer.readUInt16BE(pointer.offset);
62+
pointer.offset += 2;
63+
var res = buffer.toString('utf8', pointer.offset, pointer.offset + length);
64+
pointer.offset += length;
65+
return res;
66+
};
67+
68+
typesTable[DataTypes.shortBuffer] = function (pointer, buffer) {
69+
var length;
70+
length = buffer.readUInt16BE(pointer.offset);
71+
pointer.offset += 2;
72+
var res = buffer.slice(pointer.offset, pointer.offset + length);
73+
pointer.offset += length;
74+
return res;
75+
};
76+
77+
typesTable[DataTypes.buffer] = function (pointer, buffer) {
78+
var length;
79+
length = buffer.readUInt32BE(pointer.offset);
80+
pointer.offset += 4;
81+
var res = buffer.slice(pointer.offset, pointer.offset + length);
82+
pointer.offset += length;
83+
return res;
84+
};
85+
86+
typesTable[DataTypes.struct] = function (pointer, buffer, scheme) {
87+
return structureReader(pointer, buffer, scheme);
88+
};
89+
90+
typesTable[DataTypes.list] = function (pointer, buffer, scheme) {
91+
var length = buffer.readUInt16BE(pointer.offset);
92+
pointer.offset += 2;
93+
94+
var res = [];
95+
while (length--) {
96+
res.push(structureReader(pointer, buffer, scheme));
97+
}
98+
return res;
99+
};
100+
101+
var structureReader = function (pointer, buffer, scheme) {
102+
if (arguments.length === 2) {
103+
scheme = buffer;
104+
buffer = pointer;
105+
pointer = {
106+
offset: 0
107+
};
108+
}
109+
110+
if(typeof scheme === 'number') {
111+
var res = typesTable[scheme](pointer, buffer);
112+
} else {
113+
var res = {};
114+
for (var el in scheme) {
115+
var s = scheme[el];
116+
if (typeof s === 'number') {
117+
res[el] = typesTable[s](pointer, buffer);
118+
} else {
119+
res[el] = typesTable[s.type](pointer, buffer, s.scheme);
120+
}
121+
}
122+
}
123+
return res;
124+
};
125+
126+
module.exports = structureReader;

src/dataTypes.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module.exports = {
2+
boolean: 0x000,
3+
int8: 0x010,
4+
uint8: 0x011,
5+
int16: 0x020,
6+
uint16: 0x021,
7+
int32: 0x030,
8+
uint32: 0x031,
9+
float: 0x040,
10+
double: 0x041,
11+
12+
string: 0x200,
13+
shortBuffer: 0x210,
14+
buffer: 0x211,
15+
16+
struct: 0x500,
17+
list: 0x501
18+
};

src/dataWriter.js

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
var DataTypes = require('./dataTypes');
2+
3+
var typesTable = {};
4+
5+
typesTable[DataTypes.boolean] = function (value) {
6+
var buffer = new Buffer(1);
7+
buffer.writeInt8(value, 0);
8+
return buffer;
9+
};
10+
11+
typesTable[DataTypes.int8] = function (value) {
12+
var buffer = new Buffer(1);
13+
buffer.writeInt8(value, 0);
14+
return buffer;
15+
};
16+
17+
typesTable[DataTypes.uint8] = function (value) {
18+
var buffer = new Buffer(1);
19+
buffer.writeUInt8(value, 0);
20+
return buffer;
21+
};
22+
23+
typesTable[DataTypes.int16] = function (value) {
24+
var buffer = new Buffer(2);
25+
buffer.writeInt16BE(value, 0);
26+
return buffer;
27+
};
28+
29+
typesTable[DataTypes.uint16] = function (value) {
30+
var buffer = new Buffer(2);
31+
buffer.writeUInt16BE(value, 0);
32+
return buffer;
33+
};
34+
35+
typesTable[DataTypes.int32] = function (value) {
36+
var buffer = new Buffer(4);
37+
buffer.writeInt32BE(value, 0);
38+
return buffer;
39+
};
40+
41+
typesTable[DataTypes.uint32] = function (value) {
42+
var buffer = new Buffer(4);
43+
buffer.writeUInt32BE(value, 0);
44+
return buffer;
45+
};
46+
47+
typesTable[DataTypes.float] = function (value) {
48+
var buffer = new Buffer(4);
49+
buffer.writeFloatBE(value, 0);
50+
return buffer;
51+
};
52+
53+
typesTable[DataTypes.double] = function (value) {
54+
var buffer = new Buffer(8);
55+
buffer.writeDoubleBE(value, 0);
56+
return buffer;
57+
};
58+
59+
typesTable[DataTypes.string] = function (value) {
60+
/*var length;
61+
length = buffer.writeUInt16BE(pointer.offset);
62+
pointer.offset += 2;
63+
buffer.toString('utf8', pointer.offset, pointer.offset + length);
64+
pointer.offset += length;*/
65+
};
66+
67+
typesTable[DataTypes.shortBuffer] = function (value) {
68+
/*var length;
69+
length = buffer.writeUInt16BE(pointer.offset);
70+
pointer.offset += 2;
71+
buffer.slice(pointer.offset, pointer.offset + length);
72+
pointer.offset += length;*/
73+
};
74+
75+
typesTable[DataTypes.buffer] = function (value) {
76+
/* var length;
77+
length = buffer.writeUInt32BE(pointer.offset);
78+
pointer.offset += 4;
79+
buffer.slice(pointer.offset, pointer.offset + length);
80+
pointer.offset += length;*/
81+
};
82+
83+
typesTable[DataTypes.struct] = function (pointer, buffer, scheme) {
84+
//return structureWriter(pointer, buffer, scheme);
85+
};
86+
87+
typesTable[DataTypes.list] = function (pointer, buffer, scheme) {
88+
/* var length = buffer.writeUInt16BE(pointer.offset);
89+
pointer.offset += 2;
90+
91+
[];
92+
while (length--) {
93+
res.push(structureWriter(pointer, buffer, scheme));
94+
}*/
95+
};
96+
97+
var structureWriter = function (pointer, object, scheme) {
98+
if (arguments.length === 2) {
99+
scheme = object;
100+
object = pointer;
101+
pointer = {
102+
offset: 0
103+
};
104+
}
105+
106+
var res = [];
107+
if(typeof scheme === 'number') {
108+
res.push(typesTable[scheme](object));
109+
} else {
110+
for (var el in scheme) {
111+
var s = scheme[el];
112+
if (typeof s === 'number') {
113+
res.push(typesTable[s](object[el]));
114+
} else {
115+
res.push(typesTable[s.type](object[el], s.scheme));
116+
}
117+
}
118+
}
119+
120+
return new Buffer.concat(res);
121+
};
122+
123+
module.exports = structureWriter;

src/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports.DataTypes = require('./dataTypes');
2+
module.exports.DataReader = require('./dataReader');
3+
module.exports.DataWriter = require('./dataWriter');

0 commit comments

Comments
 (0)