aboutsummaryrefslogtreecommitdiff
path: root/node_modules/concordance/lib/Circular.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/concordance/lib/Circular.js')
-rw-r--r--node_modules/concordance/lib/Circular.js35
1 files changed, 35 insertions, 0 deletions
diff --git a/node_modules/concordance/lib/Circular.js b/node_modules/concordance/lib/Circular.js
new file mode 100644
index 000000000..c5c020267
--- /dev/null
+++ b/node_modules/concordance/lib/Circular.js
@@ -0,0 +1,35 @@
+'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