aboutsummaryrefslogtreecommitdiff
path: root/node_modules/concordance/lib/Circular.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-08-14 05:01:11 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-08-14 05:02:09 +0200
commit363723fc84f7b8477592e0105aeb331ec9a017af (patch)
tree29f92724f34131bac64d6a318dd7e30612e631c7 /node_modules/concordance/lib/Circular.js
parent5634e77ad96bfe1818f6b6ee70b7379652e5487f (diff)
node_modules
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