From 56c48494b239a567e08ec78fb934e782952fbdc3 Mon Sep 17 00:00:00 2001 From: Frank Austin Nothaft Date: Thu, 16 Mar 2017 14:16:48 -0700 Subject: [PATCH] [UTILS-114] Add abstract duplicate method to IntervalArray. Resolves #114. --- .../utils/interval/array/IntervalArray.scala | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/utils-intervalrdd/src/main/scala/org/bdgenomics/utils/interval/array/IntervalArray.scala b/utils-intervalrdd/src/main/scala/org/bdgenomics/utils/interval/array/IntervalArray.scala index 5333261..9d92ad0 100644 --- a/utils-intervalrdd/src/main/scala/org/bdgenomics/utils/interval/array/IntervalArray.scala +++ b/utils-intervalrdd/src/main/scala/org/bdgenomics/utils/interval/array/IntervalArray.scala @@ -127,6 +127,12 @@ trait IntervalArray[K <: Interval[K], T] extends Serializable { protected def replace(arr: Array[(K, T)], maxWidth: Long): IntervalArray[K, T] + /** + * @return Makes a copy of the interval array. The underlying array is shallow + * copied, but the thread unsafe optLastIndex variable is not shared. + */ + def duplicate(): IntervalArray[K, T] + @tailrec private def pow2ceil(i: Int = 1): Int = { if (2 * i >= length) { i @@ -493,6 +499,10 @@ case class ConcreteIntervalArray[K <: Interval[K], T: ClassTag]( array: Array[(K, T)], maxIntervalWidth: Long) extends IntervalArray[K, T] { + def duplicate(): IntervalArray[K, T] = { + new ConcreteIntervalArray(array, maxIntervalWidth) + } + protected def replace(arr: Array[(K, T)], maxWidth: Long): IntervalArray[K, T] = { new ConcreteIntervalArray(arr, maxWidth)