-
Notifications
You must be signed in to change notification settings - Fork 15
/
data_buffer.js
38 lines (30 loc) · 1.24 KB
/
data_buffer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
var crc32 = require('buffer-crc32');
var constants = require('./constants');
var headerOffsets = constants.headerOffsets;
var sizes = constants.sizes;
exports.fromKeyValuePair = function(key, value, ts) {
if (!(key instanceof Buffer)) {
key = new Buffer(key.toString());
}
if (!(value instanceof Buffer) && typeof value !== 'string') {
value = new Buffer(value.toString());
}
/**
* [crc][timestamp][keysz][valuesz][key][value]
*/
var lineBuffer = new Buffer(sizes.header + key.length + value.length);
lineBuffer.writeDoubleBE(ts, headerOffsets.timestamp);
lineBuffer.writeUInt16BE(key.length, headerOffsets.keysize);
lineBuffer.writeUInt32BE(value.length, headerOffsets.valsize);
key.copy(lineBuffer, headerOffsets.valsize + sizes.valsize);
if (typeof(value) === 'string')
lineBuffer.write(value, headerOffsets.valsize + sizes.valsize + key.length);
else
value.copy(lineBuffer, headerOffsets.valsize + sizes.valsize + key.length);
//using slice we are just referencing the originial buffer
var crcBuf = crc32(lineBuffer.slice(headerOffsets.timestamp, headerOffsets.valsize+ sizes.valsize));
crcBuf = crc32(key, crcBuf);
crcBuf = crc32(value, crcBuf);
crcBuf.copy(lineBuffer);
return lineBuffer;
};