12fbf1245SXuan Hupackage utils 22fbf1245SXuan Hu 3*39c59369SXuan Huimport chisel3._ 4*39c59369SXuan Huimport chisel3.util._ 5*39c59369SXuan Hu 62fbf1245SXuan Huimport scala.collection.mutable 72fbf1245SXuan Hu 82fbf1245SXuan Huobject SeqUtils { 92fbf1245SXuan Hu /** 102fbf1245SXuan Hu * @todo remove it when when xiangshan is updated to 2.13.11 112fbf1245SXuan Hu */ 122fbf1245SXuan Hu def distinctBy[A, B](seqLike: Seq[B])(f: B => A): Seq[B] = { 132fbf1245SXuan Hu val seen = new mutable.HashSet[A]() 142fbf1245SXuan Hu var res = Seq[B]() 152fbf1245SXuan Hu val it = seqLike.iterator 162fbf1245SXuan Hu while (it.hasNext) { 172fbf1245SXuan Hu val next = it.next 182fbf1245SXuan Hu if (seen.add(f(next))) { 192fbf1245SXuan Hu res :+= next 202fbf1245SXuan Hu } 212fbf1245SXuan Hu } 222fbf1245SXuan Hu res 232fbf1245SXuan Hu } 24*39c59369SXuan Hu 25*39c59369SXuan Hu type Seq2[+T] = Seq[Seq[T]] 26*39c59369SXuan Hu type Seq3[+T] = Seq2[Seq[T]] 27*39c59369SXuan Hu type MixedVec2[T <: Data] = MixedVec[MixedVec[T]] 28*39c59369SXuan Hu type MixedVec3[T <: Data] = MixedVec2[MixedVec[T]] 29*39c59369SXuan Hu 30*39c59369SXuan Hu def mapToMixedVec[T, A <: Data](in: Seq[T], f: T => A): MixedVec[A] = { 31*39c59369SXuan Hu MixedVec(in.map(f)) 32*39c59369SXuan Hu } 33*39c59369SXuan Hu 34*39c59369SXuan Hu def mapToMixedVec2[T, A <: Data](in: Seq2[T], f: T => A): MixedVec2[A] = { 35*39c59369SXuan Hu MixedVec(in.map(x => mapToMixedVec(x, f))) 36*39c59369SXuan Hu } 37*39c59369SXuan Hu 38*39c59369SXuan Hu def mapToMixedVec3[T, A <: Data](in: Seq3[T], f: T => A): MixedVec3[A] = { 39*39c59369SXuan Hu MixedVec(in.map(x => mapToMixedVec2(x, f))) 40*39c59369SXuan Hu } 412fbf1245SXuan Hu} 42