aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/passes/memlib/YamlUtils.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/firrtl/passes/memlib/YamlUtils.scala')
-rw-r--r--src/main/scala/firrtl/passes/memlib/YamlUtils.scala36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/passes/memlib/YamlUtils.scala b/src/main/scala/firrtl/passes/memlib/YamlUtils.scala
new file mode 100644
index 00000000..a1088300
--- /dev/null
+++ b/src/main/scala/firrtl/passes/memlib/YamlUtils.scala
@@ -0,0 +1,36 @@
+package firrtl.passes
+package memlib
+import net.jcazevedo.moultingyaml._
+import java.io.{File, CharArrayWriter, PrintWriter}
+
+object CustomYAMLProtocol extends DefaultYamlProtocol {
+ // bottom depends on top
+}
+
+class YamlFileReader(file: String) {
+ import CustomYAMLProtocol._
+ def parse[A](implicit reader: YamlReader[A]) : Seq[A] = {
+ if (new File(file).exists) {
+ val yamlString = scala.io.Source.fromFile(file).getLines.mkString("\n")
+ yamlString.parseYamls flatMap (x =>
+ try Some(reader read x)
+ catch { case e: Exception => None }
+ )
+ }
+ else error("Yaml file doesn't exist!")
+ }
+}
+
+class YamlFileWriter(file: String) {
+ import CustomYAMLProtocol._
+ val outputBuffer = new CharArrayWriter
+ val separator = "--- \n"
+ def append(in: YamlValue) {
+ outputBuffer append s"$separator${in.prettyPrint}"
+ }
+ def dump() {
+ val outputFile = new PrintWriter(file)
+ outputFile write outputBuffer.toString
+ outputFile.close()
+ }
+}