summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/HashMap.scala5
-rw-r--r--sources/scala/HashSet.scala7
-rw-r--r--sources/scala/HashTable.scala7
-rw-r--r--sources/scala/ListMap.scala2
-rw-r--r--sources/scala/ListSet.scala2
-rw-r--r--sources/scala/Map.scala15
-rw-r--r--sources/scala/MultiMap.scala4
-rw-r--r--sources/scala/MutableMap.scala13
-rw-r--r--sources/scala/PartialFunction.scala11
-rw-r--r--sources/scala/Publisher.scala2
-rw-r--r--sources/scala/Set.scala33
-rw-r--r--sources/scala/SynchronizedSet.scala5
12 files changed, 42 insertions, 64 deletions
diff --git a/sources/scala/HashMap.scala b/sources/scala/HashMap.scala
index f9b2a07fac..fd5ba85580 100644
--- a/sources/scala/HashMap.scala
+++ b/sources/scala/HashMap.scala
@@ -16,4 +16,9 @@ class HashMap[A, B] extends MutableMap[A, B]
with DefaultMapModel[A, B] {
protected def entryKey(e: Entry) = e.key;
+
+ override def clear = {
+ initTable(table.length - 1);
+ tableSize = 0;
+ }
}
diff --git a/sources/scala/HashSet.scala b/sources/scala/HashSet.scala
index 7674a4f5a8..55d01dc54a 100644
--- a/sources/scala/HashSet.scala
+++ b/sources/scala/HashSet.scala
@@ -11,7 +11,7 @@ package scala;
/** I promise, there will be some documentation soon! :-) Matthias
*/
-class HashSet[A] extends Set[A] with HashTable[A] {
+class HashSet[A] extends MutableSet[A] with HashTable[A] {
def contains(elem: A): Boolean = findEntry(elem) match {
case None => false
@@ -25,6 +25,11 @@ class HashSet[A] extends Set[A] with HashTable[A] {
def elements = entries;
+ override def clear = {
+ initTable(table.length - 1);
+ tableSize = 0;
+ }
+
protected type Entry = A;
protected def entryKey(e: Entry) = e;
diff --git a/sources/scala/HashTable.scala b/sources/scala/HashTable.scala
index 2e0171f8b2..caae9f2f98 100644
--- a/sources/scala/HashTable.scala
+++ b/sources/scala/HashTable.scala
@@ -65,11 +65,6 @@ abstract class HashTable[A] {
}
}
- def clear = {
- initTable(table.length - 1);
- tableSize = 0;
- }
-
protected type Entry;
protected def entryKey(e: Entry): A;
@@ -95,7 +90,7 @@ abstract class HashTable[A] {
private def entryFor(key: A) = (e: Entry => elemEquals(entryKey(e), key));
- private def initTable(n: Int): Unit = {
+ protected def initTable(n: Int): Unit = {
table(n) = Nil;
if (n > 0) initTable(n - 1);
}
diff --git a/sources/scala/ListMap.scala b/sources/scala/ListMap.scala
index 5c6b5ed5bc..eac7ca8478 100644
--- a/sources/scala/ListMap.scala
+++ b/sources/scala/ListMap.scala
@@ -16,7 +16,7 @@ class ListMap[A, B] extends MutableMap[A, B] with DefaultMapModel[A, B] {
def size: Int = xs.length;
- def clear: Unit = { xs = Nil; }
+ override def clear: Unit = { xs = Nil; }
protected def findEntry(key: A) = xs find {e => e.key == key};
diff --git a/sources/scala/ListSet.scala b/sources/scala/ListSet.scala
index 0ee60b1943..e56e44bb67 100644
--- a/sources/scala/ListSet.scala
+++ b/sources/scala/ListSet.scala
@@ -11,7 +11,7 @@ package scala;
/** I promise, there will be some documentation soon! :-) Matthias
*/
-class ListSet[A] extends Set[A] {
+class ListSet[A] extends MutableSet[A] {
protected var elems: List[A] = Nil;
def size: Int = elems.length;
diff --git a/sources/scala/Map.scala b/sources/scala/Map.scala
index 3441d6e99e..049f4a6998 100644
--- a/sources/scala/Map.scala
+++ b/sources/scala/Map.scala
@@ -11,12 +11,13 @@ package scala;
/** I promise, there will be some documentation soon! :-) Matthias
*/
-trait Map[A, +B] with Function1[A, B]
- with PartialFunction[A, B]
+trait Map[A, +B] with PartialFunction[A, B]
with Iterable[Pair[A, B]] {
def size: Int;
+ def get(key: A): Option[B];
+
def isEmpty: Boolean = (size == 0);
def apply(key: A): B = get(key) match {
@@ -24,10 +25,6 @@ trait Map[A, +B] with Function1[A, B]
case Some(value) => value
}
- def get(key: A): Option[B];
-
- def remove(key: A): Unit;
-
def contains(key: A): Boolean = get(key) match {
case None => false
case Some(_) => true
@@ -35,8 +32,6 @@ trait Map[A, +B] with Function1[A, B]
def isDefinedAt(key: A) = contains(key);
- def clear: Unit;
-
def keys: Iterator[A] = new Iterator[A] {
val iter = elements;
def hasNext = iter.hasNext;
@@ -57,10 +52,6 @@ trait Map[A, +B] with Function1[A, B]
}
}
- def filter(p: (A, B) => Boolean): Unit = toList foreach {
- case Pair(key, value) => if (p(key, value)) { val old = remove(key); }
- }
-
def toList: List[Pair[A, B]] = {
var res: List[Pair[A, B]] = Nil;
val iter = elements;
diff --git a/sources/scala/MultiMap.scala b/sources/scala/MultiMap.scala
index 17425036b7..7bc6cc2518 100644
--- a/sources/scala/MultiMap.scala
+++ b/sources/scala/MultiMap.scala
@@ -10,8 +10,8 @@
package scala;
-trait MultiMap[A, B] extends MutableMap[A, Set[B]] {
- protected def makeSet: Set[B] = new HashSet[B];
+trait MultiMap[A, B] extends MutableMap[A, MutableSet[B]] {
+ protected def makeSet: MutableSet[B] = new HashSet[B];
def add(key: A, value: B): Unit = get(key) match {
case None => val set = makeSet;
diff --git a/sources/scala/MutableMap.scala b/sources/scala/MutableMap.scala
index 1d7c3d6931..72e837f33c 100644
--- a/sources/scala/MutableMap.scala
+++ b/sources/scala/MutableMap.scala
@@ -15,6 +15,15 @@ trait MutableMap[A, B] with Map[A, B] {
def update(key: A, value: B): Unit;
+ def remove(key: A): Unit;
+
+ def clear: Unit = {
+ val iter = keys;
+ while (iter.hasNext) {
+ remove(iter.next);
+ }
+ }
+
def put(key: A, value: B): B = {
val old = apply(key);
update(key, value);
@@ -34,6 +43,10 @@ trait MutableMap[A, B] with Map[A, B] {
case Pair(key, value) => update(key, f(key, value));
}
+ def filter(p: (A, B) => Boolean): Unit = toList foreach {
+ case Pair(key, value) => if (p(key, value)) remove(key);
+ }
+
override def toString() =
if (size == 0)
"{}"
diff --git a/sources/scala/PartialFunction.scala b/sources/scala/PartialFunction.scala
index 3a5ece7f19..3959a5c3f5 100644
--- a/sources/scala/PartialFunction.scala
+++ b/sources/scala/PartialFunction.scala
@@ -4,13 +4,12 @@
** __\ \/ /__/ __ |/ /__/ __ | **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
+** $Id$
\* */
-// $Id$
+package scala;
-package scala {
- trait PartialFunction[-A, +B] {
- def apply(x: A): B;
- def isDefinedAt(x: A): scala.Boolean;
- }
+
+trait PartialFunction[-A, +B] with Function1[A, B] {
+ def isDefinedAt(x: A): Boolean;
}
diff --git a/sources/scala/Publisher.scala b/sources/scala/Publisher.scala
index 212d64e957..5d6df1f140 100644
--- a/sources/scala/Publisher.scala
+++ b/sources/scala/Publisher.scala
@@ -14,7 +14,7 @@ package scala;
* to all registered subscribers.
*/
class Publisher[A, This <: Publisher[A, This]]: This {
- private val filters = new HashMap[Subscriber[A, This], Set[A => Boolean]]
+ private val filters = new HashMap[Subscriber[A, This], MutableSet[A => Boolean]]
with MultiMap[Subscriber[A, This], A => Boolean];
private val suspended = new HashSet[Subscriber[A, This]];
diff --git a/sources/scala/Set.scala b/sources/scala/Set.scala
index 5da0dddd08..3f9912d984 100644
--- a/sources/scala/Set.scala
+++ b/sources/scala/Set.scala
@@ -9,8 +9,7 @@
package scala;
-/** I promise, there will be some documentation soon! :-) Matthias
- */
+
trait Set[A] with Iterable[A] {
def size: Int;
@@ -19,30 +18,6 @@ trait Set[A] with Iterable[A] {
def contains(elem: A): Boolean;
- def add(elem: A): Unit;
-
- def addAll(elems: A*): Unit = {
- val ys = elems as List[A];
- ys foreach { y => add(y); };
- }
-
- def addSet(that: Iterable[A]): Unit =
- that.elements.foreach(elem => add(elem));
-
- def remove(elem: A): Unit;
-
- def removeAll(elems: A*): Unit = {
- val ys = elems as List[A];
- ys foreach { y => remove(y); };
- }
-
- def removeSet(that: Iterable[A]): Unit =
- that.elements.foreach(elem => remove(elem));
-
- def intersect(that: Set[A]): Unit = filter(that.contains);
-
- def clear: Unit;
-
def subsetOf(that: Set[A]): Boolean = {
val iter = elements;
var res = true;
@@ -52,17 +27,13 @@ trait Set[A] with Iterable[A] {
res
}
- def foreach(f: A => Unit) = {
+ def foreach(f: A => Unit): Unit = {
val iter = elements;
while (iter.hasNext) {
f(iter.next);
}
}
- def filter(p: A => Boolean): Unit = toList foreach {
- elem => if (p(elem)) remove(elem);
- }
-
def exists(p: A => Boolean): Boolean = {
val iter = elements;
var res = false;
diff --git a/sources/scala/SynchronizedSet.scala b/sources/scala/SynchronizedSet.scala
index 8886ae18ed..1e0600afa9 100644
--- a/sources/scala/SynchronizedSet.scala
+++ b/sources/scala/SynchronizedSet.scala
@@ -9,9 +9,8 @@
package scala;
-/** I promise, there will be some documentation soon! :-) Matthias
- */
-trait SynchronizedSet[A] extends Set[A] with Monitor {
+
+trait SynchronizedSet[A] extends MutableSet[A] with Monitor {
override def size: Int = synchronized {
super.size