08-27-周三_17-09-29
This commit is contained in:
110
node_modules/weak/lib/weak.js
generated
vendored
Normal file
110
node_modules/weak/lib/weak.js
generated
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var Emitter = require('events').EventEmitter;
|
||||
var bindings = require('bindings')('weakref.node');
|
||||
|
||||
/**
|
||||
* Set global weak callback function.
|
||||
*/
|
||||
|
||||
bindings._setCallback(callback);
|
||||
|
||||
/**
|
||||
* Module exports.
|
||||
*/
|
||||
|
||||
exports = module.exports = create;
|
||||
exports.addCallback = exports.addListener = addCallback;
|
||||
exports.removeCallback = exports.removeListener = removeCallback;
|
||||
exports.removeCallbacks = exports.removeListeners = removeCallbacks;
|
||||
exports.callbacks = exports.listeners = callbacks;
|
||||
|
||||
// backwards-compat with node-weakref
|
||||
exports.weaken = exports.create = exports;
|
||||
|
||||
// re-export all the binding functions onto the exports
|
||||
Object.keys(bindings).forEach(function (name) {
|
||||
exports[name] = bindings[name];
|
||||
});
|
||||
|
||||
/**
|
||||
* Internal emitter event name.
|
||||
* This is completely arbitrary...
|
||||
* Could be any value....
|
||||
*/
|
||||
|
||||
var CB = '_CB';
|
||||
|
||||
/**
|
||||
* Creates and returns a new Weakref instance. Optionally attaches
|
||||
* a weak callback to invoke when the Object gets garbage collected.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function create (obj, fn) {
|
||||
var weakref = bindings._create(obj, new Emitter());
|
||||
if ('function' == typeof fn) {
|
||||
exports.addCallback(weakref, fn);
|
||||
}
|
||||
return weakref;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a weak callback function to the Weakref instance.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function addCallback (weakref, fn) {
|
||||
var emitter = bindings._getEmitter(weakref);
|
||||
return emitter.on(CB, fn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a weak callback function from the Weakref instance.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function removeCallback (weakref, fn) {
|
||||
var emitter = bindings._getEmitter(weakref);
|
||||
return emitter.removeListener(CB, fn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a copy of the listeners on the Weakref instance.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function callbacks (weakref) {
|
||||
var emitter = bindings._getEmitter(weakref);
|
||||
return emitter.listeners(CB);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Removes all callbacks on the Weakref instance.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function removeCallbacks (weakref) {
|
||||
var emitter = bindings._getEmitter(weakref);
|
||||
return emitter.removeAllListeners(CB);
|
||||
}
|
||||
|
||||
/**
|
||||
* Common weak callback function.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function callback (emitter) {
|
||||
emitter.emit(CB);
|
||||
emitter = null;
|
||||
}
|
Reference in New Issue
Block a user