diff options
Diffstat (limited to 'src/library/scala/collection/immutable/Range.scala')
-rw-r--r-- | src/library/scala/collection/immutable/Range.scala | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/library/scala/collection/immutable/Range.scala b/src/library/scala/collection/immutable/Range.scala index b22998fb4b..ed4f4615c2 100644 --- a/src/library/scala/collection/immutable/Range.scala +++ b/src/library/scala/collection/immutable/Range.scala @@ -243,8 +243,13 @@ object Range { def count(start: Int, end: Int, step: Int): Int = count(start, end, step, false) - def count(start: Int, end: Int, step: Int, isInclusive: Boolean): Int = - NumericRange.count[Long](start, end, step, isInclusive) + def count(start: Int, end: Int, step: Int, isInclusive: Boolean): Int = { + // faster path for the common counting range + if (start >= 0 && end > start && end < scala.Int.MaxValue && step == 1) + (end - start) + ( if (isInclusive) 1 else 0 ) + else + NumericRange.count[Long](start, end, step, isInclusive) + } class Inclusive(start: Int, end: Int, step: Int) extends Range(start, end, step) { // override def par = new ParRange(this) |