+
+ # Concatenation of arrays.
+ #
+ # Returns a new array built by concatenating `self` and `other` together.
+ #
+ # var a1 = [1,2,3]
+ # var a2 = [4,5,6]
+ # var a3 = a1 + a2
+ # assert a3 == [1,2,3,4,5,6]
+ #
+ # Because a new array is always created, future modification on `self` and `other`
+ # does not impact the previously computed result.
+ #
+ # a1.add(30)
+ # a2.add(60)
+ # assert a3 == [1,2,3,4,5,6] # unchanged
+ # assert a1 + a2 == [1,2,3,30,4,5,6,60]
+ fun +(other: Array[E]): Array[E]
+ do
+ var res = new Array[E].with_capacity(length + other.length)
+ res.append(self)
+ res.append(other)
+ return res
+ end
+
+ # Repetition of arrays.
+ #
+ # returns a new array built by concatenating `self` `repeat` times.
+ #
+ # var a = [1,2,3]
+ # assert (a * 0).is_empty
+ # assert a * 1 == [1,2,3]
+ # assert a * 2 == [1,2,3,1,2,3]
+ # assert (a * 10).length == 30
+ fun *(repeat: Int): Array[E]
+ do
+ assert repeat >= 0
+ var res = new Array[E].with_capacity(length * repeat)
+ while repeat > 0 do
+ res.add_all(self)
+ repeat -= 1
+ end
+ return res
+ end