File: t3578.scala

package info (click to toggle)
scala 2.11.12-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 62,924 kB
  • sloc: javascript: 28,808; java: 13,415; xml: 3,135; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (30 lines) | stat: -rw-r--r-- 1,123 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
object Test {
  sealed abstract class JValue {
    def ++(other: JValue) = {
      def append(value1: JValue, value2: JValue): JValue = (value1, value2) match {
	case (JNothing, x) => x
	case (x, JNothing) => x
	case (JObject(xs), x: JField) => JObject(xs ::: List(x))
	case (x: JField, JObject(xs)) => JObject(x :: xs)
	case (JArray(xs), JArray(ys)) => JArray(xs ::: ys)
	case (JArray(xs), v: JValue) => JArray(xs ::: List(v))
	case (v: JValue, JArray(xs)) => JArray(v :: xs)
	case (f1: JField, f2: JField) => JObject(f1 :: f2 :: Nil)
	case (JField(n, v1), v2: JValue) => JField(n, append(v1, v2))
	case (x, y) => JArray(x :: y :: Nil)
      }
      append(this, other)
    }
  }

  case object JNothing extends JValue
  case object JNull extends JValue
  case class JString(s: String) extends JValue
  case class JDouble(num: Double) extends JValue
  case class JInt(num: BigInt) extends JValue
  case class JBool(value: Boolean) extends JValue
  case class JField(name: String, value: JValue) extends JValue
  case class JObject(obj: List[JField]) extends JValue
  case class JArray(arr: List[JValue]) extends JValue
}