Path: blob/master/node_modules/@protobufjs/pool/index.js
2591 views
"use strict";1module.exports = pool;23/**4* An allocator as used by {@link util.pool}.5* @typedef PoolAllocator6* @type {function}7* @param {number} size Buffer size8* @returns {Uint8Array} Buffer9*/1011/**12* A slicer as used by {@link util.pool}.13* @typedef PoolSlicer14* @type {function}15* @param {number} start Start offset16* @param {number} end End offset17* @returns {Uint8Array} Buffer slice18* @this {Uint8Array}19*/2021/**22* A general purpose buffer pool.23* @memberof util24* @function25* @param {PoolAllocator} alloc Allocator26* @param {PoolSlicer} slice Slicer27* @param {number} [size=8192] Slab size28* @returns {PoolAllocator} Pooled allocator29*/30function pool(alloc, slice, size) {31var SIZE = size || 8192;32var MAX = SIZE >>> 1;33var slab = null;34var offset = SIZE;35return function pool_alloc(size) {36if (size < 1 || size > MAX)37return alloc(size);38if (offset + size > SIZE) {39slab = alloc(SIZE);40offset = 0;41}42var buf = slice.call(slab, offset, offset += size);43if (offset & 7) // align to 32 bit44offset = (offset | 7) + 1;45return buf;46};47}484950