From e623579ebfb220715ca3b2a17b4059e4614ec983 Mon Sep 17 00:00:00 2001 From: Megan Wachs Date: Sat, 6 Jun 2020 06:20:54 -0700 Subject: [PATCH] RecordMap: Add some convenient accessor functions, make eltMap publich --- src/main/scala/util/RecordMap.scala | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/scala/util/RecordMap.scala b/src/main/scala/util/RecordMap.scala index 8be7ea173d..9a31152c01 100644 --- a/src/main/scala/util/RecordMap.scala +++ b/src/main/scala/util/RecordMap.scala @@ -2,23 +2,26 @@ package freechips.rocketchip.util -import Chisel._ -import chisel3.Record +import chisel3._ import scala.collection.immutable.ListMap import chisel3.internal.requireIsChiselType import chisel3.experimental.DataMirror.internal.chiselTypeClone -final class RecordMap[T <: Data](eltMap: ListMap[String, T]) +final class RecordMap[T <: Data](val eltMap: ListMap[String, T]) extends Record { eltMap.foreach { case (name, elt) => requireIsChiselType(elt, name) } - val elements = ListMap() ++ eltMap.mapValues(chiselTypeClone) // mapValues return value is lazy - - override def cloneType: this.type = (new RecordMap(eltMap)).asInstanceOf[this.type] def apply(x: Int) = eltMap.values.toSeq(x) def apply(x: String) = eltMap.get(x) + def size = eltMap.size + def data = eltMap.values + + // This is needed for Record, and doesn't give the actual elements + val elements = ListMap[String, T]() ++ eltMap.mapValues(chiselTypeClone(_)) // mapValues return value is lazy + + override def cloneType: this.type = (new RecordMap(eltMap)).asInstanceOf[this.type] } @@ -27,6 +30,6 @@ object RecordMap { def apply[T <: Data](eltMap: ListMap[String, T]) = new RecordMap(eltMap) def apply[T <: Data](elements: (String, T)*) { - new RecordMap[T](ListMap(elements:_*)) + new RecordMap[T](ListMap[String, T](elements:_*)) } }