Skip to content

Instantly share code, notes, and snippets.

@soc
Created April 8, 2012 16:34
Show Gist options
  • Select an option

  • Save soc/2338337 to your computer and use it in GitHub Desktop.

Select an option

Save soc/2338337 to your computer and use it in GitHub Desktop.
diff --git a/src/library/scala/collection/mutable/ArrayBuffer.scala b/src/library/scala/collection/mutable/ArrayBuffer.scala
index bfdc085..71e3daa 100644
--- a/src/library/scala/collection/mutable/ArrayBuffer.scala
+++ b/src/library/scala/collection/mutable/ArrayBuffer.scala
@@ -44,7 +44,7 @@ import parallel.mutable.ParArray
* @define willNotTerminateInf
*/
@SerialVersionUID(1529165946227428979L)
-class ArrayBuffer[A](override protected val initialSize: Int)
+class ArrayBuffer[A : ClassManifest](override protected val initialSize: Int)
extends AbstractBuffer[A]
with Buffer[A]
with GenericTraversableTemplate[A, ArrayBuffer]
@@ -55,6 +55,8 @@ class ArrayBuffer[A](override protected val initialSize: Int)
with CustomParallelizable[A, ParArray[A]]
with Serializable {
+ protected override var array: Array[A] = new Array[A](math.max(initialSize, 1))
+
override def companion: GenericCompanion[ArrayBuffer] = ArrayBuffer
import scala.collection.Traversable
@@ -65,13 +67,13 @@ class ArrayBuffer[A](override protected val initialSize: Int)
override def sizeHint(len: Int) {
if (len > size && len >= 1) {
- val newarray = new Array[AnyRef](len)
+ val newarray = new Array[A](len)
compat.Platform.arraycopy(array, 0, newarray, 0, size0)
array = newarray
}
}
- override def par = ParArray.handoff[A](array.asInstanceOf[Array[A]], size)
+ override def par = ParArray.handoff[A](array, size)
/** Appends a single element to this buffer and returns
* the identity of the buffer. It takes constant amortized time.
@@ -81,7 +83,7 @@ class ArrayBuffer[A](override protected val initialSize: Int)
*/
def +=(elem: A): this.type = {
ensureSize(size0 + 1)
- array(size0) = elem.asInstanceOf[AnyRef]
+ array(size0) = elem
size0 += 1
this
}
@@ -96,7 +98,7 @@ class ArrayBuffer[A](override protected val initialSize: Int)
case v: collection.IndexedSeqLike[_, _] =>
val n = v.length
ensureSize(size0 + n)
- v.copyToArray(array.asInstanceOf[scala.Array[Any]], size0, n)
+ v.copyToArray(array, size0, n)
size0 += n
this
case _ =>
@@ -113,7 +115,7 @@ class ArrayBuffer[A](override protected val initialSize: Int)
def +=:(elem: A): this.type = {
ensureSize(size0 + 1)
copy(0, 1, size0)
- array(0) = elem.asInstanceOf[AnyRef]
+ array(0) = elem
size0 += 1
this
}
@@ -140,7 +142,7 @@ class ArrayBuffer[A](override protected val initialSize: Int)
val len = xs.length
ensureSize(size0 + len)
copy(n, n + len, size0 - n)
- xs.copyToArray(array.asInstanceOf[scala.Array[Any]], n)
+ xs.copyToArray(array, n)
size0 += len
}
/*
quick.lib:
[scalacfork] Compiling 93 files to /home/soc/Entwicklung/scala/build/quick/classes/library
[scalacfork] /home/soc/Entwicklung/scala/src/library/scala/collection/Iterator.scala:881: error: could not find implicit value for evidence parameter of type ClassManifest[A]
[scalacfork] val buf = new ArrayBuffer[A]
[scalacfork] ^
[scalacfork] /home/soc/Entwicklung/scala/src/library/scala/collection/MapLike.scala:324: error: could not find implicit value for evidence parameter of type ClassManifest[C]
[scalacfork] val result = new mutable.ArrayBuffer[C](size)
[scalacfork] ^
[scalacfork] /home/soc/Entwicklung/scala/src/library/scala/collection/SeqLike.scala:155: error: could not find implicit value for evidence parameter of type ClassManifest[A]
[scalacfork] val forcedElms = new mutable.ArrayBuffer[A](elms.size) ++= elms
[scalacfork] ^
[scalacfork] /home/soc/Entwicklung/scala/src/library/scala/collection/convert/Wrappers.scala:54: error: could not find implicit value for evidence parameter of type ClassManifest[B]
[scalacfork] def newBuilder[B] = new mutable.ArrayBuffer[B]
[scalacfork] ^
[scalacfork] /home/soc/Entwicklung/scala/src/library/scala/collection/convert/Wrappers.scala:61: error: could not find implicit value for evidence parameter of type ClassManifest[B]
[scalacfork] def newBuilder[B] = new mutable.ArrayBuffer[B]
[scalacfork] ^
[scalacfork] /home/soc/Entwicklung/scala/src/library/scala/collection/mutable/ArrayBuffer.scala:197: error: could not find implicit value for evidence parameter of type ClassManifest[A]
[scalacfork] def newBuilder[A]: Builder[A, ArrayBuffer[A]] = new ArrayBuffer[A]
[scalacfork] ^
[scalacfork] /home/soc/Entwicklung/scala/src/library/scala/collection/mutable/Buffer.scala:44: error: type mismatch;
[scalacfork] found : scala.collection.mutable.ArrayBuffer[Nothing]
[scalacfork] required: scala.collection.mutable.Builder[A,scala.collection.mutable.Buffer[A]]
[scalacfork] def newBuilder[A]: Builder[A, Buffer[A]] = new ArrayBuffer
[scalacfork] ^
[scalacfork] /home/soc/Entwicklung/scala/src/library/scala/collection/mutable/ResizableArray.scala:123: error: could not find implicit value for evidence parameter of type ClassManifest[A]
[scalacfork] def newBuilder[A]: Builder[A, ResizableArray[A]] = new ArrayBuffer[A]
[scalacfork] ^
[scalacfork] 8 errors found
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment