diff options
author | Jakob Odersky <jodersky@gmail.com> | 2012-10-28 11:10:39 +0100 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2012-10-28 11:10:39 +0100 |
commit | 9892e907e8db3204a890fc530ddc9e34cdaf096b (patch) | |
tree | 64e6c6d93357eef75f04466a103617fd49f53908 /src/main/scala/scalam/collection/DenseVectorOps.scala | |
parent | a9c3a3b9e00b28380254ff9f274cb05754604464 (diff) | |
download | scalam-9892e907e8db3204a890fc530ddc9e34cdaf096b.tar.gz scalam-9892e907e8db3204a890fc530ddc9e34cdaf096b.tar.bz2 scalam-9892e907e8db3204a890fc530ddc9e34cdaf096b.zip |
improve integration of DenseVector into collection framework:
* factor out similarities between *Wrapped and *Ops to *Like
* remove custom builder (use array buffer instead sonce DenseVectors are backed by arrays)
* refactor CanBuildFroms
* make LowPriority implicits to a trait
Diffstat (limited to 'src/main/scala/scalam/collection/DenseVectorOps.scala')
-rw-r--r-- | src/main/scala/scalam/collection/DenseVectorOps.scala | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/src/main/scala/scalam/collection/DenseVectorOps.scala b/src/main/scala/scalam/collection/DenseVectorOps.scala index b7b6446..7f8e9f9 100644 --- a/src/main/scala/scalam/collection/DenseVectorOps.scala +++ b/src/main/scala/scalam/collection/DenseVectorOps.scala @@ -1,16 +1,32 @@ package scalam.collection -import scala.collection.mutable.IndexedSeqOptimized import breeze.linalg.DenseVector +import scala.collection.mutable.ArrayBuffer +import scala.collection.generic.CanBuildFrom +import scala.collection.mutable.Builder /* TODO find solution to remove class manifest */ -class DenseVectorOps[Elem: ClassManifest](self: DenseVector[Elem]) extends IndexedSeqOptimized/*Like*/[Elem, DenseVector[Elem]] { - override def newBuilder = new DenseVectorBuilder[Elem] +class DenseVectorOps[Elem: ClassManifest](override val repr: DenseVector[Elem]) extends DenseVectorLike[Elem, DenseVector[Elem]] { + val self = repr + def newBuilder = DenseVectorOps.newBuilder[Elem] - override def apply(index: Int) = self.apply(index) - override def update(index: Int, value: Elem) = self.update(index, value) - override def length = self.length - - override def seq = this + override protected[this] def thisCollection = new WrappedDenseVector(self) + override protected[this] def toCollection(repr: DenseVector[Elem]): WrappedDenseVector[Elem] = new WrappedDenseVector(repr) + override def seq = thisCollection } +object DenseVectorOps { + def newBuilder[Elem: ClassManifest] = new ArrayBuffer[Elem] mapResult (x => new DenseVector(x.toArray)) + + implicit def canBuildFrom[T: ClassManifest] = new CanBuildFrom[DenseVector[_], T, DenseVector[T]] { + def apply(from: DenseVector[_]): Builder[T, DenseVector[T]] = newBuilder[T] + def apply: Builder[T, DenseVector[T]] = newBuilder[T] + } + /* + implicit def denseVectorBuildFrom[A: ClassManifest]: CanBuildFrom[DenseVector[_], A, DenseVector[A]] = + new CanBuildFrom[DenseVector[_], A, DenseVector[A]] { + def apply(from: DenseVector[_]): Builder[A, DenseVector[A]] = apply() + def apply(): Builder[A, DenseVector[A]] = collection.DenseVectorOps.newBuilder[A] + } + */ +} |