summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-08-20 12:59:47 +0000
committerMartin Odersky <odersky@gmail.com>2009-08-20 12:59:47 +0000
commit0ae54e25fbdbde5bb71a9c9eb84c37a0dbc42a99 (patch)
treef9401a9f6e558d753947480fe713f522625967ec
parentfcb6a3772bb6e513d14543177d29061c7eb47b91 (diff)
downloadscala-0ae54e25fbdbde5bb71a9c9eb84c37a0dbc42a99.tar.gz
scala-0ae54e25fbdbde5bb71a9c9eb84c37a0dbc42a99.tar.bz2
scala-0ae54e25fbdbde5bb71a9c9eb84c37a0dbc42a99.zip
added missing file
-rwxr-xr-xsrc/library/scala/collection/mutable/ArrayBuilder.scala65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/library/scala/collection/mutable/ArrayBuilder.scala b/src/library/scala/collection/mutable/ArrayBuilder.scala
new file mode 100755
index 0000000000..6932fb77ea
--- /dev/null
+++ b/src/library/scala/collection/mutable/ArrayBuilder.scala
@@ -0,0 +1,65 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2003-2009, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+\* */
+
+// $Id: ArrayBuffer.scala 18387 2009-07-24 15:28:37Z odersky $
+
+
+package scala.collection.mutable
+
+import scala.collection.generic._
+import scala.reflect.Manifest
+import scala.runtime.BoxedArray
+
+/** A builder class for arrays */
+class ArrayBuilder[A](manifest: Manifest[A]) extends Builder[A, BoxedArray[A]] {
+
+ private var elems: BoxedArray[A] = _
+ private var capacity: Int = 0
+ private var size: Int = 0
+
+ private def mkArray(size: Int): BoxedArray[A] = {
+ val newelems = manifest.newArray(size)
+ if (this.size > 0) Array.copy(elems.value, 0, newelems.value, 0, this.size)
+ newelems
+ }
+
+ private def resize(size: Int) {
+ elems = mkArray(size)
+ capacity = size
+ }
+
+ override def sizeHint(size: Int) {
+ if (capacity < size) resize(size)
+ }
+
+ private def ensureSize(size: Int) {
+ if (capacity < size) {
+ var newsize = if (capacity == 0) 16 else capacity * 2
+ while (newsize < size) newsize *= 2
+ resize(newsize)
+ }
+ }
+
+ def +=(elem: A): this.type = {
+ ensureSize(size + 1)
+ elems(size) = elem
+ size += 1
+ this
+ }
+
+ def clear() {
+ size = 0
+ }
+
+ def result() = {
+ if (capacity != 0 && capacity == size) elems
+ else mkArray(size)
+ }
+
+ // todo: add ++=
+}