@devgrid/netron
Version:
Event bus, streams and remote object invocation.
84 lines • 2.35 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Packet = void 0;
const uid_1 = require("../uid");
const types_1 = require("./types");
const getBit = (target, offset) => (target >> offset) & 1;
const clearBits = (target, offset, count) => {
let result = target;
for (let i = offset; i < offset + count; ++i) {
result &= ~(1 << i);
}
return result;
};
const writeBits = (target, val, offset, count) => {
let result = target;
for (let i = 0; i < count; ++i) {
if (val & (1 << i)) {
result |= 1 << (offset + i);
}
}
return result;
};
const readBits = (target, offset, count) => {
let val = 0;
for (let i = 0; i < count; ++i) {
if (getBit(target, offset + i)) {
val |= 1 << i;
}
}
return val;
};
const IMPULSE_OFFSET = 6;
const ERROR_OFFSET = 7;
const TYPE_OFFSET = 0;
const TYPE_SIZE = 4;
const EOS_OFFSET = 4;
const LIVE_OFFSET = 5;
const uid = new uid_1.Uid();
class Packet {
constructor(id) {
this.id = id;
this.flags = 0;
}
setType(type) {
this.flags = writeBits(clearBits(this.flags, TYPE_OFFSET, TYPE_SIZE), type, TYPE_OFFSET, TYPE_SIZE);
}
getType() {
return readBits(this.flags, TYPE_OFFSET, TYPE_SIZE);
}
setImpulse(val) {
this.flags = (this.flags & ~(1 << IMPULSE_OFFSET)) | (val << IMPULSE_OFFSET);
}
getImpulse() {
return getBit(this.flags, IMPULSE_OFFSET);
}
setError(val) {
this.flags = (this.flags & ~(1 << ERROR_OFFSET)) | (val << ERROR_OFFSET);
}
getError() {
return getBit(this.flags, ERROR_OFFSET);
}
setStreamInfo(streamId, streamIndex, isLast, isLive) {
this.streamId = streamId;
this.streamIndex = streamIndex;
this.flags = writeBits(writeBits(this.flags, isLast ? 1 : 0, EOS_OFFSET, 1), isLive ? 1 : 0, LIVE_OFFSET, 1);
}
isStreamChunk() {
return this.getType() === types_1.TYPE_STREAM;
}
isLastChunk() {
return getBit(this.flags, EOS_OFFSET) === 1;
}
isLive() {
return getBit(this.flags, LIVE_OFFSET) === 1;
}
static nextId() {
return uid.next();
}
static resetId() {
uid.reset();
}
}
exports.Packet = Packet;
//# sourceMappingURL=packet.js.map
;