You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
949 B
44 lines
949 B
var Set = require('es6-set')
|
|
|
|
module.exports = Binding
|
|
|
|
function Binding (name, definition) {
|
|
this.name = name
|
|
this.definition = definition
|
|
this.references = new Set()
|
|
|
|
if (definition) this.add(definition)
|
|
}
|
|
|
|
Binding.prototype.add = function (node) {
|
|
this.references.add(node)
|
|
return this
|
|
}
|
|
|
|
Binding.prototype.remove = function (node) {
|
|
if (!this.references.has(node)) {
|
|
throw new Error('Tried removing nonexistent reference')
|
|
}
|
|
this.references.delete(node)
|
|
return this
|
|
}
|
|
|
|
Binding.prototype.isReferenced = function () {
|
|
var definition = this.definition
|
|
var isReferenced = false
|
|
this.each(function (ref) {
|
|
if (ref !== definition) isReferenced = true
|
|
})
|
|
return isReferenced
|
|
}
|
|
|
|
Binding.prototype.getReferences = function () {
|
|
var arr = []
|
|
this.each(function (ref) { arr.push(ref) })
|
|
return arr
|
|
}
|
|
|
|
Binding.prototype.each = function (cb) {
|
|
this.references.forEach(function (ref) { cb(ref) })
|
|
return this
|
|
}
|