From 676185cecc7bc92d8847dd81ba0820ea7c317819 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sat, 22 Jun 2013 18:23:47 +0200 Subject: Added a mapValues method to SimpleMap --- src/dotty/tools/dotc/util/SimpleMap.scala | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/dotty/tools/dotc/util/SimpleMap.scala') diff --git a/src/dotty/tools/dotc/util/SimpleMap.scala b/src/dotty/tools/dotc/util/SimpleMap.scala index f54ae8022..218af2fc5 100644 --- a/src/dotty/tools/dotc/util/SimpleMap.scala +++ b/src/dotty/tools/dotc/util/SimpleMap.scala @@ -5,6 +5,7 @@ abstract class SimpleMap[-K, +V >: Null] { def remove(k: K): SimpleMap[K, V] def updated[V1 >: V](k: K, v: V1): SimpleMap[K, V1] def contains(k: K): Boolean = apply(k) != null + def mapValues[V1 >: V](f: V1 => V1): SimpleMap[K, V1] } object SimpleMap { @@ -13,6 +14,7 @@ object SimpleMap { def apply(k: Any) = null def remove(k: Any) = this def updated[V1 >: Null](k: Any, v: V1) = new Map1(k, v) + def mapValues[V1 >: Null](f: V1 => V1) = this } class Map1[-K, +V >: Null] (k1: K, v1: V) extends SimpleMap[K, V] { @@ -25,6 +27,8 @@ object SimpleMap { def updated[V1 >: V](k: K, v: V1) = if (k == k1) new Map1(k, v) else new Map2(k1, v1, k, v) + def mapValues[V1 >: V](f: V1 => V1) = + new Map1(k1, f(v1)) } class Map2[-K, +V >: Null] (k1: K, v1: V, k2: K, v2: V) extends SimpleMap[K, V] { @@ -40,6 +44,8 @@ object SimpleMap { if (k == k1) new Map2(k, v, k2, v2) else if (k == k2) new Map2(k1, v1, k, v) else new Map3(k1, v1, k2, v2, k, v) + def mapValues[V1 >: V](f: V1 => V1) = + new Map2(k1, f(v1), k2, f(v2)) } class Map3[-K, +V >: Null] (k1: K, v1: V, k2: K, v2: V, k3: K, v3: V) extends SimpleMap[K, V] { @@ -58,6 +64,8 @@ object SimpleMap { else if (k == k2) new Map3(k1, v1, k, v, k3, v3) else if (k == k3) new Map3(k1, v1, k2, v2, k, v) else new Map4(k1, v1, k2, v2, k3, v3, k, v) + def mapValues[V1 >: V](f: V1 => V1) = + new Map3(k1, f(v1), k2, f(v2), k3, f(v3)) } class Map4[-K, +V >: Null] (k1: K, v1: V, k2: K, v2: V, k3: K, v3: V, k4: K, v4: V) extends SimpleMap[K, V] { @@ -79,6 +87,8 @@ object SimpleMap { else if (k == k3) new Map4(k1, v1, k2, v2, k, v, k4, v4) else if (k == k4) new Map4(k1, v1, k2, v2, k3, v3, k, v) else new Map5(k1, v1, k2, v2, k3, v3, k4, v4, k, v) + def mapValues[V1 >: V](f: V1 => V1) = + new Map4(k1, f(v1), k2, f(v2), k3, f(v3), k4, f(v4)) } class Map5[-K, +V >: Null] (k1: K, v1: V, k2: K, v2: V, k3: K, v3: V, k4: K, v4: V, k5: K, v5: V) extends SimpleMap[K, V] { @@ -103,6 +113,8 @@ object SimpleMap { else if (k == k4) new Map5(k1, v1, k2, v2, k3, v3, k, v, k5, v5) else if (k == k5) new Map5(k1, v1, k2, v2, k3, v3, k4, v4, k, v) else new MapMore(Map(k1 -> v1, k2 -> v2, k3 -> v3, k4 -> v4, k5 -> v5, k -> v)) + def mapValues[V1 >: V](f: V1 => V1) = + new Map5(k1, f(v1), k2, f(v2), k3, f(v3), k4, f(v4), k5, f(v5)) } class MapMore[-K, +V >: Null] (m: Map[K, V]) extends SimpleMap[K, V] { @@ -121,5 +133,7 @@ object SimpleMap { def updated[V1 >: V](k: K, v: V1) = new MapMore(m.updated(k, v)) override def contains(k: K) = m contains k + def mapValues[V1 >: V](f: V1 => V1) = + new MapMore(m mapValues f) } } -- cgit v1.2.3