LarpixClient/electron/node_modules/dir-compare/src/fs/BufferPool.js
2026-05-10 14:02:17 +02:00

46 lines
1.1 KiB
JavaScript

/**
* Collection of buffers to be shared between async processes.
* Avoids allocating buffers each time async process starts.
* bufSize - size of each buffer
* bufNo - number of buffers
* Caller has to make sure no more than bufNo async processes run simultaneously.
*/
function BufferPool(bufSize, bufNo) {
var bufferPool = []
for (var i = 0; i < bufNo; i++) {
bufferPool.push({
buf1: alloc(bufSize),
buf2: alloc(bufSize),
busy: false
})
}
var allocateBuffers = function () {
for (var j = 0; j < bufNo; j++) {
var bufferPair = bufferPool[j]
if (!bufferPair.busy) {
bufferPair.busy = true
return bufferPair
}
}
throw new Error('Async buffer limit reached')
}
return {
allocateBuffers: allocateBuffers,
freeBuffers: freeBuffers
}
function freeBuffers(bufferPair) {
bufferPair.busy = false
}
}
function alloc(bufSize) {
if (Buffer.alloc) {
return Buffer.alloc(bufSize)
}
return new Buffer(bufSize)
}
module.exports = BufferPool