more encode/decode operations;
authorwenzelm
Thu, 27 Apr 2017 23:36:16 +0200
changeset 65597 b408ca224954
parent 65596 7fffa01b2d2b
child 65598 5deef985e38e
more encode/decode operations;
src/Pure/General/time.scala
src/Pure/General/timing.scala
--- a/src/Pure/General/time.scala	Thu Apr 27 22:21:43 2017 +0200
+++ b/src/Pure/General/time.scala	Thu Apr 27 23:36:16 2017 +0200
@@ -27,6 +27,9 @@
     String.format(Locale.ROOT, "%.3f", s.asInstanceOf[AnyRef])
 
   def instant(t: Instant): Time = ms(t.getEpochSecond * 1000L + t.getNano / 1000000L)
+
+  val encode: XML.Encode.T[Time] = (t: Time) => XML.Encode.long(t.ms)
+  val decode: XML.Decode.T[Time] = (body: XML.Body) => ms(XML.Decode.long(body))
 }
 
 final class Time private(val ms: Long) extends AnyVal
--- a/src/Pure/General/timing.scala	Thu Apr 27 22:21:43 2017 +0200
+++ b/src/Pure/General/timing.scala	Thu Apr 27 23:36:16 2017 +0200
@@ -29,6 +29,19 @@
       Exn.release(result)
     }
     else e
+
+  val encode: XML.Encode.T[Timing] = (t: Timing) =>
+  {
+    import XML.Encode._
+    triple(Time.encode, Time.encode, Time.encode)(t.elapsed, t.cpu, t.gc)
+  }
+
+  val decode: XML.Decode.T[Timing] = (body: XML.Body) =>
+  {
+    import XML.Decode._
+    val (elapsed, cpu, gc) = triple(Time.decode, Time.decode, Time.decode)(body)
+    Timing(elapsed, cpu, gc)
+  }
 }
 
 sealed case class Timing(elapsed: Time, cpu: Time, gc: Time)