summaryrefslogtreecommitdiff
path: root/desktop/node_modules/dir-compare/build/src/fs/BufferPool.js
blob: 08990139e0194fa173bf2776d855c97a6e8f9561 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BufferPool = void 0;
/**
 * Collection of buffers to be shared between async processes.
 * Avoids allocating buffers each time async process starts.
 */
class BufferPool {
    /**
     *
     * @param bufSize Size of each buffer.
     * @param bufNo Number of buffers. Caller has to make sure no more than bufNo async processes run simultaneously.
     */
    constructor(bufSize, bufNo) {
        this.bufSize = bufSize;
        this.bufNo = bufNo;
        this.bufferPool = [];
        for (let i = 0; i < this.bufNo; i++) {
            this.bufferPool.push({
                buf1: Buffer.alloc(this.bufSize),
                buf2: Buffer.alloc(this.bufSize),
                busy: false
            });
        }
    }
    allocateBuffers() {
        for (let j = 0; j < this.bufNo; j++) {
            const bufferPair = this.bufferPool[j];
            if (!bufferPair.busy) {
                bufferPair.busy = true;
                return bufferPair;
            }
        }
        throw new Error('Async buffer limit reached');
    }
    freeBuffers(bufferPair) {
        bufferPair.busy = false;
    }
}
exports.BufferPool = BufferPool;
//# sourceMappingURL=BufferPool.js.map