wallet-core/node_modules/concordance/lib/Circular.js

36 lines
785 B
JavaScript
Raw Normal View History

2017-08-14 05:01:11 +02:00
'use strict'
class Circular {
constructor () {
this.stack = new Map()
}
add (descriptor) {
if (this.stack.has(descriptor)) throw new Error('Already in stack')
if (descriptor.isItem !== true && descriptor.isMapEntry !== true && descriptor.isProperty !== true) {
this.stack.set(descriptor, this.stack.size + 1)
}
return this
}
delete (descriptor) {
if (this.stack.has(descriptor)) {
if (this.stack.get(descriptor) !== this.stack.size) throw new Error('Not on top of stack')
this.stack.delete(descriptor)
}
return this
}
has (descriptor) {
return this.stack.has(descriptor)
}
get (descriptor) {
return this.stack.has(descriptor)
? this.stack.get(descriptor)
: 0
}
}
module.exports = Circular