UNPKG

diffusion

Version:

Diffusion JavaScript client

63 lines (62 loc) 1.9 kB
"use strict"; /** * @module Serialisers */ Object.defineProperty(exports, "__esModule", { value: true }); exports.write = exports.read = void 0; var errors_1 = require("./../../errors/errors"); var Codec = require("./../io/codec"); var BEES = require("./../serialisers/byte-encoded-enum-serialiser"); var Long = require("long"); /** * Read and decodes a set of enums from a bitset stored in a 64 bit integer * * The enum values must all lie between 0 and 63 inclusive. * * @param bis the buffer input stream * @param enumType the enum type * @returns a Set containing the enums stored in the input stream */ function read(bis, enumType) { var enums = new Set(); var bitmap = Codec.readInt64(bis); var shift = 0; var enumReader = { read: function () { return shift; } }; while (!bitmap.isZero()) { if (!bitmap.and(1).isZero()) { enums.add(BEES.read(enumReader, enumType)); } bitmap = bitmap.shiftRight(1); shift++; } return enums; } exports.read = read; /** Writes an enum set to a buffer output stream * * @param bos the buffer output stream * @param enumSet the set of enums stored in an array or set. * The only requirement is the presence of a forEach method. * * All enum values stored in the set must lie between 0 and 63 * inclusive. */ function write(bos, enumSet) { var bitmap = Long.UZERO; var enumWriter = { write: function (val) { if (val >= 64) { throw new errors_1.IOError("Cannot encode enum in long, " + val + " >= 64'"); } bitmap = bitmap.or(Long.ONE.shiftLeft(val)); } }; enumSet.forEach(function (e) { BEES.write(enumWriter, e); }); Codec.writeInt64(bos, bitmap); } exports.write = write;