diff options
author | LinuxWizard42 <computerwizard@linuxmail.org> | 2022-10-12 22:54:37 +0300 |
---|---|---|
committer | LinuxWizard42 <computerwizard@linuxmail.org> | 2022-10-12 22:54:37 +0300 |
commit | 703e03aba33f234712206769f57717ba7d92d23d (patch) | |
tree | 0041f04ccb75bd5379c764e9fe42249fffe75fc3 /node_modules/dir-compare/src/fs/FileDescriptorQueue.js | |
parent | ab6e257e6e9d9a483d7e86f220d8b209a2cd7753 (diff) | |
download | FlashRunner-703e03aba33f234712206769f57717ba7d92d23d.tar.gz FlashRunner-703e03aba33f234712206769f57717ba7d92d23d.tar.zst |
Added export_allowed file to make repository visible in cgit
Diffstat (limited to 'node_modules/dir-compare/src/fs/FileDescriptorQueue.js')
-rw-r--r-- | node_modules/dir-compare/src/fs/FileDescriptorQueue.js | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/node_modules/dir-compare/src/fs/FileDescriptorQueue.js b/node_modules/dir-compare/src/fs/FileDescriptorQueue.js new file mode 100644 index 0000000..f017b20 --- /dev/null +++ b/node_modules/dir-compare/src/fs/FileDescriptorQueue.js @@ -0,0 +1,78 @@ +'use strict' + +var fs = require('fs') +var Queue = require('./Queue') +/** + * Limits the number of concurrent file handlers. + * Use it as a wrapper over fs.open() and fs.close(). + * Example: + * var fdQueue = new FileDescriptorQueue(8) + * fdQueue.open(path, flags, (err, fd) =>{ + * ... + * fdQueue.close(fd, (err) =>{ + * ... + * }) + * }) + * As of node v7, calling fd.close without a callback is deprecated. + */ +var FileDescriptorQueue = function (maxFilesNo) { + var pendingJobs = new Queue() + var activeCount = 0 + + var open = function (path, flags, callback) { + pendingJobs.enqueue({ + path: path, + flags: flags, + callback: callback + }) + process() + } + + var process = function () { + if (pendingJobs.getLength() > 0 && activeCount < maxFilesNo) { + var job = pendingJobs.dequeue() + activeCount++ + fs.open(job.path, job.flags, job.callback) + } + } + + var close = function (fd, callback) { + activeCount-- + fs.close(fd, callback) + process() + } + + var promises = { + open: function (path, flags) { + return new Promise(function (resolve, reject) { + open(path, flags, function (err, fd) { + if (err) { + reject(err) + } else { + resolve(fd) + } + }) + }) + }, + + close: function (fd) { + return new Promise(function (resolve, reject) { + close(fd, function (err) { + if (err) { + reject(err) + } else { + resolve() + } + }) + }) + } + } + + return { + open: open, + close: close, + promises: promises + } +} + +module.exports = FileDescriptorQueue |