diff options
author | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2014-11-26 23:10:24 +0100 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2014-11-26 23:10:24 +0100 |
commit | 7a450a0fd4298f8b8ac2de241ffdb3fcf1b2cae5 (patch) | |
tree | f9e4e53b09c861773c95a20d47e78bfb9697605e | |
parent | 84d65a8776acb5f10ef4705c752d4e55b0250577 (diff) | |
parent | 1620b8cf772f0c4371220e05c54a3e3c5ccab349 (diff) | |
download | scala-7a450a0fd4298f8b8ac2de241ffdb3fcf1b2cae5.tar.gz scala-7a450a0fd4298f8b8ac2de241ffdb3fcf1b2cae5.tar.bz2 scala-7a450a0fd4298f8b8ac2de241ffdb3fcf1b2cae5.zip |
Merge pull request #4156 from Ichoran/issue/8819
SI-8819 Range slice does not return a Range
-rw-r--r-- | src/library/scala/collection/immutable/Range.scala | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/library/scala/collection/immutable/Range.scala b/src/library/scala/collection/immutable/Range.scala index 720dfeed59..9fa877055f 100644 --- a/src/library/scala/collection/immutable/Range.scala +++ b/src/library/scala/collection/immutable/Range.scala @@ -196,7 +196,24 @@ extends scala.collection.AbstractSeq[Int] copy(locationAfterN(n), end, step) } ) - + + /** Creates a new range containing the elements starting at `from` up to but not including `until`. + * + * $doesNotUseBuilders + * + * @param from the element at which to start + * @param until the element at which to end (not included in the range) + * @return a new range consisting of a contiguous interval of values in the old range + */ + override def slice(from: Int, until: Int): Range = + if (from <= 0) take(until) + else if (until >= numRangeElements && numRangeElements >= 0) drop(from) + else { + val fromValue = locationAfterN(from) + if (from >= until) newEmptyRange(fromValue) + else new Range.Inclusive(fromValue, locationAfterN(until-1), step) + } + /** Creates a new range containing all the elements of this range except the last one. * * $doesNotUseBuilders |