aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scalam/collection/DenseVectorOps.scala
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2012-10-28 11:10:39 +0100
committerJakob Odersky <jodersky@gmail.com>2012-10-28 11:10:39 +0100
commit9892e907e8db3204a890fc530ddc9e34cdaf096b (patch)
tree64e6c6d93357eef75f04466a103617fd49f53908 /src/main/scala/scalam/collection/DenseVectorOps.scala
parenta9c3a3b9e00b28380254ff9f274cb05754604464 (diff)
downloadscalam-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.scala32
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]
+ }
+ */
+}