Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Whole serialize alternation of open range.
Closes #343.
- Loading branch information
1 parent
ed57df6
commit eb2065f
Showing
3 changed files
with
158 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
module.exports = (function () { | ||
var serializers = {} | ||
|
||
serializers.object = function (object) { | ||
this.object = object | ||
} | ||
|
||
serializers.object.prototype.serialize = function (engine) { | ||
var buffer = engine.buffer | ||
var start = engine.start | ||
var end = engine.end | ||
|
||
var object = this.object | ||
|
||
var select | ||
|
||
select = object.number | ||
|
||
if (128 <= select) { | ||
|
||
buffer[start++] = object.number >>> 8 & 0xff | ||
buffer[start++] = object.number & 0xff | ||
|
||
} else { | ||
|
||
buffer[start++] = object.number & 0xff | ||
|
||
} | ||
|
||
engine.start = start | ||
|
||
return object | ||
} | ||
|
||
return serializers | ||
})() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
require('proof')(2, prove) | ||
|
||
function prove (assert) { | ||
var path = require('path') | ||
var compiler = require('../../../compiler/require') | ||
var composer = require('../../../compose/serializer/all.js') | ||
var filename = path.resolve(__filename, '../../../generated/alternation.serialize.all.js') | ||
|
||
var serializers = composer(compiler(filename), { | ||
object: { | ||
number: { | ||
type: 'alternation', | ||
select: { endianess: 'b', bits: 8 }, | ||
choose: [{ | ||
read: { | ||
when: { and: 0x80 }, | ||
endianess: 'b', | ||
bits: 16 | ||
}, | ||
write: { | ||
when: { range: { from: 0x80 } }, | ||
endianess: 'b', | ||
bits: 16 | ||
} | ||
}, { | ||
read: { | ||
endianess: 'b', | ||
bits: 8 | ||
}, | ||
write: { | ||
endianess: 'b', | ||
bits: 8 | ||
} | ||
}] | ||
} | ||
} | ||
}) | ||
var buffer = new Buffer(2) | ||
var object = { | ||
number: 0xffff | ||
} | ||
var engine = { | ||
buffer: buffer, | ||
start: 0, | ||
end: buffer.length | ||
} | ||
var serializer = new serializers.object(object) | ||
serializer.serialize(engine) | ||
assert(buffer.toJSON(), [ 0xff, 0xff ], 'compiled') | ||
assert(engine.start, buffer.length, 'start moved') | ||
} |