aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scalam/io
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/scalam/io')
-rw-r--r--src/main/scala/scalam/io/Loadable.scala7
-rw-r--r--src/main/scala/scalam/io/Saveable.scala7
-rw-r--r--src/main/scala/scalam/io/package.scala18
3 files changed, 21 insertions, 11 deletions
diff --git a/src/main/scala/scalam/io/Loadable.scala b/src/main/scala/scalam/io/Loadable.scala
new file mode 100644
index 0000000..703c1fa
--- /dev/null
+++ b/src/main/scala/scalam/io/Loadable.scala
@@ -0,0 +1,7 @@
+package scalam.io
+
+import scalax.io.Input
+
+trait Loadable[A] {
+ def load(in: Input): A
+} \ No newline at end of file
diff --git a/src/main/scala/scalam/io/Saveable.scala b/src/main/scala/scalam/io/Saveable.scala
new file mode 100644
index 0000000..bf33d94
--- /dev/null
+++ b/src/main/scala/scalam/io/Saveable.scala
@@ -0,0 +1,7 @@
+package scalam.io
+
+import scalax.io.Output
+
+trait Saveable {
+ def save(out: Output)
+} \ No newline at end of file
diff --git a/src/main/scala/scalam/io/package.scala b/src/main/scala/scalam/io/package.scala
index a5217de..4f1ef09 100644
--- a/src/main/scala/scalam/io/package.scala
+++ b/src/main/scala/scalam/io/package.scala
@@ -4,20 +4,16 @@ import scalax.file.Path
import breeze.linalg._
package object io {
-
- def load(path: Path, separator: String = "\\s"): DenseMatrix[Double] = {
- val lines = path.lines().dropWhile(_.isEmpty).toArray
- val elements: Array[Array[String]] = lines map (_.split(separator))
- require(elements.forall(_.length == elements(0).length), "Cannot load non-rectangular matrix. Check your data file.")
-
- val rows: Array[Array[Double]] = elements.map(_.map(_.toDouble))
- DenseMatrix(rows: _*)
+
+ def load[A: Loadable](path: Path): A = {
+ val loadable = implicitly[Loadable[A]]
+ loadable.load(path)
}
-
- def save(path: Path, m: DenseMatrix[Double]): Unit = {
+
+ def save[A <% Saveable](objectToSave: A, path: Path) = {
path.createFile(createParents = true, failIfExists = false)
for (processor <- path.outputProcessor; out = processor.asOutput)
- for (i <- 0 until m.rows) m(i, ::).valuesIterator.mkString(""," ","\n")
+ objectToSave.save(out)
}
} \ No newline at end of file