UNPKG

@atlaskit/editor-common

Version:

A package that contains common classes and components for editor and renderer

59 lines (55 loc) 2.37 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.DynamicBitArray = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var DEFAULT_CHUNK_SIZE = 4096; // Default chunk size in bits /** * A dynamic bit array implementation that allows for efficient storage and manipulation of bits. * It supports dynamic resizing and provides methods for setting and getting bit values. * This is useful for scenarios where you need to manage a large number of boolean flags efficiently. */ var DynamicBitArray = exports.DynamicBitArray = /*#__PURE__*/function () { function DynamicBitArray() { var chunkSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_CHUNK_SIZE; (0, _classCallCheck2.default)(this, DynamicBitArray); this.chunkSize = chunkSize; this.chunkTotalBitSize = this.chunkSize * 8; this.bitArrays = []; } return (0, _createClass2.default)(DynamicBitArray, [{ key: "set", value: function set(index, value) { var bitArray = this.getChunk(index); var byteOffset = index % this.chunkTotalBitSize; var byteIndex = Math.floor(byteOffset / 8); // Get the byte index var bitOffset = byteOffset % 8; // Get the bit offset within the byte if (value) { bitArray[byteIndex] |= 1 << bitOffset; // set the bit } else { bitArray[byteIndex] &= ~(1 << bitOffset); // clear the bit } } }, { key: "get", value: function get(index) { var bitArray = this.getChunk(index); var byteOffset = index % this.chunkTotalBitSize; var byteIndex = Math.floor(byteOffset / 8); // Get the byte index var bitOffset = byteOffset % 8; // Get the bit offset within the byte return (bitArray[byteIndex] & 1 << bitOffset) !== 0; // Check if the bit is set } }, { key: "getChunk", value: function getChunk(index) { var chunkIndex = Math.floor(index / this.chunkTotalBitSize); if (!this.bitArrays[chunkIndex]) { this.bitArrays[chunkIndex] = new Uint8Array(this.chunkSize); } return this.bitArrays[chunkIndex]; } }]); }();