diff options
author | Haoyi Li <haoyi@haoyi-mbp.corp.dropbox.com> | 2014-11-26 00:45:31 -0800 |
---|---|---|
committer | Haoyi Li <haoyi@haoyi-mbp.corp.dropbox.com> | 2014-11-26 00:45:31 -0800 |
commit | 24f31e120f9537faede7a174bb09ee35f64e1ce4 (patch) | |
tree | 06ffc3ecc7847789008352b7e2b7c040dad48907 /examples/scala-js/library/src/main/scala/scala/scalajs/js/WrappedArray.scala | |
parent | b89ce9cbf79363f8cab09186a5d7ba94bc0af02a (diff) | |
parent | 2c4b142503bd2d871e6818b5cab8c38627d9e4a0 (diff) | |
download | hands-on-scala-js-24f31e120f9537faede7a174bb09ee35f64e1ce4.tar.gz hands-on-scala-js-24f31e120f9537faede7a174bb09ee35f64e1ce4.tar.bz2 hands-on-scala-js-24f31e120f9537faede7a174bb09ee35f64e1ce4.zip |
Merge commit '2c4b142503bd2d871e6818b5cab8c38627d9e4a0' as 'examples/scala-js'
Diffstat (limited to 'examples/scala-js/library/src/main/scala/scala/scalajs/js/WrappedArray.scala')
-rw-r--r-- | examples/scala-js/library/src/main/scala/scala/scalajs/js/WrappedArray.scala | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/examples/scala-js/library/src/main/scala/scala/scalajs/js/WrappedArray.scala b/examples/scala-js/library/src/main/scala/scala/scalajs/js/WrappedArray.scala new file mode 100644 index 0000000..3626c15 --- /dev/null +++ b/examples/scala-js/library/src/main/scala/scala/scalajs/js/WrappedArray.scala @@ -0,0 +1,92 @@ +/* __ *\ +** ________ ___ / / ___ __ ____ Scala.js API ** +** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** +** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-lang.org/ ** +** /____/\___/_/ |_/____/_/ | |__/ /____/ ** +** |/____/ ** +\* */ + +package scala.scalajs.js + +import scala.language.implicitConversions + +import scala.collection.mutable +import mutable.Builder + +import scala.collection.generic.{CanBuildFrom, GenericCompanion, SeqFactory} + +/** Equivalent of scm.WrappedArray for js.Array */ +@inline +final class WrappedArray[A](val array: Array[A]) + extends mutable.AbstractBuffer[A] + with scala.collection.generic.GenericTraversableTemplate[A, WrappedArray] + with mutable.IndexedSeq[A] + with mutable.BufferLike[A, WrappedArray[A]] + with mutable.ArrayLike[A, WrappedArray[A]] + with Builder[A, WrappedArray[A]] { + + /** Creates a new empty [[WrappedArray]]. */ + def this() = this(Array()) + + override def companion: GenericCompanion[WrappedArray] = WrappedArray + + // IndexedSeq interface + + @inline def update(index: Int, elem: A): Unit = array(index) = elem + @inline def apply(index: Int): A = array(index) + @inline def length: Int = array.length + + // Builder interface + + @inline def +=(elem: A): this.type = { + array.push(elem) + this + } + + @inline def clear(): Unit = + array.length = 0 + + @inline def result(): WrappedArray[A] = this + + // Rest of BufferLike interface + + @inline def +=:(elem: A): this.type = { + array.unshift(elem) + this + } + + @inline override def ++=:(xs: TraversableOnce[A]): this.type = { + array.unshift(xs.toSeq: _*) + this + } + + @inline def insertAll(n: Int, + elems: scala.collection.Traversable[A]): Unit = { + array.splice(n, 0, elems.toSeq: _*) + } + + @inline def remove(n: Int): A = + array.splice(n, 1)(0) + + @inline override def remove(n: Int, count: Int): Unit = + array.splice(n, count) + + @inline override def stringPrefix: String = "WrappedArray" + +} + +/** $factoryInfo + * @define coll wrapped array + * @define Coll `WrappedArray` + */ +object WrappedArray extends SeqFactory[WrappedArray] { + /** $genericCanBuildFromInfo */ + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, WrappedArray[A]] = + ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] + + def newBuilder[A]: Builder[A, WrappedArray[A]] = new WrappedArray[A] + + implicit def toJSArray[A](wrappedArray: WrappedArray[A]): Array[A] = + wrappedArray.array + +} |