summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/immutable/Range.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/scala/collection/immutable/Range.scala')
-rw-r--r--src/library/scala/collection/immutable/Range.scala9
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)