-
Notifications
You must be signed in to change notification settings - Fork 1k
/
Arrays.scala
31 lines (24 loc) · 1.04 KB
/
Arrays.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package scala.runtime
import scala.reflect.ClassTag
import java.lang.{reflect => jlr}
/** All but the first two operations should be short-circuited and implemented specially by
* the backend.
*/
object Arrays {
// note: this class is magical. Do not touch it unless you know what you are doing.`
/** Creates an array of some element type determined by the given `ClassTag`
* argument. The erased type of applications of this method is `Object`.
*/
def newGenericArray[T](length: Int)(implicit tag: ClassTag[T]): Array[T] =
tag.newArray(length)
/** Convert a sequence to a Java array with element type given by `clazz`. */
def seqToArray[T](xs: Seq[T], clazz: Class[_]): Array[T] = {
val arr = java.lang.reflect.Array.newInstance(clazz, xs.length).asInstanceOf[Array[T]]
xs.copyToArray(arr)
arr
}
/** Create an array of a reference type T.
*/
def newArray[Arr](componentType: Class[_], returnType: Class[Arr], dimensions: Array[Int]): Arr =
jlr.Array.newInstance(componentType, dimensions: _*).asInstanceOf[Arr]
}