summaryrefslogtreecommitdiff
path: root/src/library/scala/xml/persistent/SetStorage.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/scala/xml/persistent/SetStorage.scala')
-rw-r--r--src/library/scala/xml/persistent/SetStorage.scala43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/library/scala/xml/persistent/SetStorage.scala b/src/library/scala/xml/persistent/SetStorage.scala
new file mode 100644
index 0000000000..1391f1f76e
--- /dev/null
+++ b/src/library/scala/xml/persistent/SetStorage.scala
@@ -0,0 +1,43 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2002-2007, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+\* */
+
+// $Id$
+
+package scala.xml.persistent
+
+import scala.collection.mutable
+import java.io.File
+
+/** A persistent store with set semantics. This class allows to add and remove
+ * trees, but never contains two structurally equal trees.
+ *
+ * @author Burak Emir
+ */
+class SetStorage(file: File) extends CachedFileStorage(file) {
+
+ private var theSet: mutable.HashSet[Node] = new mutable.HashSet[Node]
+
+ // initialize
+
+ {
+ val it = super.initialNodes
+ dirty = it.hasNext
+ for(val x <- it) {
+ theSet += x;
+ }
+ }
+
+ /* forwarding methods to hashset*/
+
+ def += (e: Node): Unit = synchronized { this.dirty = true; theSet += e }
+
+ def -= (e: Node): Unit = synchronized { this.dirty = true; theSet -= e }
+
+ def nodes = synchronized { theSet.elements }
+
+}