diff options
| author | Adam Izraelevitz | 2017-03-09 15:51:23 -0800 |
|---|---|---|
| committer | Adam Izraelevitz | 2017-03-10 10:33:10 -0800 |
| commit | 50001f3f6a49a44b5f931d96d42655e9879c38d6 (patch) | |
| tree | a97ed9e77ff5ce955424e56869f04dc4b92adfdc /src | |
| parent | e571ef88f7f69b2374fa9ba86e219523645213c6 (diff) | |
Added Circuit mappers
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/Mappers.scala | 17 | ||||
| -rw-r--r-- | src/main/scala/firrtl/ir/IR.scala | 2 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/Mappers.scala b/src/main/scala/firrtl/Mappers.scala index d1e74064..cf43d9dc 100644 --- a/src/main/scala/firrtl/Mappers.scala +++ b/src/main/scala/firrtl/Mappers.scala @@ -98,6 +98,21 @@ object Mappers { } implicit class ModuleMap(val module: DefModule) extends AnyVal { def map[T](f: T => T)(implicit magnet: (T => T) => ModuleMagnet): DefModule = magnet(f).map(module) - } + } + // ********** Circuit Mappers ********** + private trait CircuitMagnet { + def map(module: Circuit): Circuit + } + private object CircuitMagnet { + implicit def forModules(f: DefModule => DefModule): CircuitMagnet = new CircuitMagnet { + override def map(circuit: Circuit): Circuit = circuit mapModule f + } + implicit def forString(f: String => String): CircuitMagnet = new CircuitMagnet { + override def map(circuit: Circuit): Circuit = circuit mapString f + } + } + implicit class CircuitMap(val circuit: Circuit) extends AnyVal { + def map[T](f: T => T)(implicit magnet: (T => T) => CircuitMagnet): Circuit = magnet(f).map(circuit) + } } diff --git a/src/main/scala/firrtl/ir/IR.scala b/src/main/scala/firrtl/ir/IR.scala index 938b5848..aafa17ca 100644 --- a/src/main/scala/firrtl/ir/IR.scala +++ b/src/main/scala/firrtl/ir/IR.scala @@ -496,4 +496,6 @@ case class Circuit(info: Info, modules: Seq[DefModule], main: String) extends Fi def serialize: String = s"circuit $main :" + info.serialize + (modules map ("\n" + _.serialize) map indent mkString "\n") + "\n" + def mapModule(f: DefModule => DefModule): Circuit = this.copy(modules = modules map f) + def mapString(f: String => String): Circuit = this.copy(main = f(main)) } |
