8000 Merge pull request #67 from mhseiden/master · adon-at-work/bytebuffer.js@b92dcfb · GitHub
[go: up one dir, main page]

Skip to content

Commit b92dcfb

Browse files
committed
Merge pull request protobufjs#67 from mhseiden/master
protobufjs#66 - BitSet support
2 parents 5716fb1 + cd6011c commit b92dcfb

11 files changed

+1344
-936
lines changed

dist/bytebuffer-dataview.js

Lines changed: 402 additions & 307 deletions
Large diffs are not rendered by default.

dist/bytebuffer-dataview.min.js

Lines changed: 37 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/bytebuffer-dataview.min.js.gz

266 Bytes
Binary file not shown.

dist/bytebuffer-dataview.min.map

Lines changed: 3 additions & 3 deletions
Large diffs are not rendered by default.

dist/bytebuffer-node.js

Lines changed: 291 additions & 196 deletions
Large diffs are not rendered by default.

dist/bytebuffer.js

Lines changed: 402 additions & 307 deletions
Large diffs are not rendered by default.

dist/bytebuffer.min.js

Lines changed: 87 additions & 84 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/bytebuffer.min.js.gz

247 Bytes
Binary file not shown.

dist/bytebuffer.min.map

Lines changed: 3 additions & 3 deletions
Large diffs are not rendered by default.

src/types/bytes/bitset.js

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/**
2+
* Writes the array as a bitset.
3+
* @param {Array<boolean>} value Array of booleans to write
4+
* @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `length` if omitted.
5+
* @returns {!ByteBuffer}
6+
* @expose
7+
*/
8+
ByteBufferPrototype.writeBitSet = function(value, offset) {
9+
//? RELATIVE()
10+
if (!this.noAssert) {
11+
if (!(value instanceof Array))
12+
throw TypeError("Illegal BitSet: Not an array");
13+
//? ASSERT_OFFSET();
14+
}
15+
16+
var start = offset,
17+
bits = value.length,
18+
bytes = (bits >> 3),
19+
bit = 0,
20+
k;
21+
22+
offset += this.writeVarint32(bits,offset);
23+
24+
while(bytes--) {
25+
k = (!!value[bit++] & 1) |
26+
((!!value[bit++] & 1) << 1) |
27+
((!!value[bit++] & 1) << 2) |
28+
((!!value[bit++] & 1) << 3) |
29+
((!!value[bit++] & 1) << 4) |
30+
((!!value[bit++] & 1) << 5) |
31+
((!!value[bit++] & 1) << 6) |
32+
((!!value[bit++] & 1) << 7);
33+
this.writeByte(k,offset++);
34+
}
35+
36+
if(bit < bits) {
37+
var m = 0; k = 0;
38+
while(bit < bits) k = k | ((!!value[bit++] & 1) << (m++));
39+
this.writeByte(k,offset++);
40+
}
41+
42+
if (relative) {
43+
this.offset = offset;
44+
return this;
45+
}
46+
return offset - start;
47+
}
48+
49+
/**
50+
* Reads a BitSet as an array of booleans.
51+
* @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `length` if omitted.
52+
* @returns {Array<boolean>
53+
* @expose
54+
*/
55+
ByteBufferPrototype.readBitSet = function(offset) {
56+
//? RELATIVE()
57+
58+
var ret = this.readVarint32(offset),
59+
bits = ret.value,
60+
bytes = (bits >> 3),
61+
bit = 0,
62+
value = [],
63+
k;
64+
65+
offset += ret.length;
66+
67+
while(bytes--) {
68+
k = this.readByte(offset++);
69+
value[bit++] = !!(k & 0x01);
70+
value[bit++] = !!(k & 0x02);
71+
value[bit++] = !!(k & 0x04);
72+
value[bit++] = !!(k & 0x08);
73+
value[bit++] = !!(k & 0x10);
74+
value[bit++] = !!(k & 0x20);
75+
value[bit++] = !!(k & 0x40);
76+
value[bit++] = !!(k & 0x80);
77+
}
78+
79+
if(bit < bits) {
80+
var m = 0;
81+
k = this.readByte(offset++);
82+
while(bit < bits) value[bit++] = !!((k >> (m++)) & 1);
83+
}
84+
85+
if (relative) {
86+
this.offset = offset;
87+
}
88+
return value;
89+
}

0 commit comments

Comments
 (0)
0