--- a/Interval.st Wed Oct 22 08:42:16 2008 +0200
+++ b/Interval.st Wed Oct 22 09:17:55 2008 +0200
@@ -489,6 +489,49 @@
^ stop - start // step + 1
! !
+!Interval methodsFor:'sorting & reordering'!
+
+reversed
+ "return a copy with elements in reverse order"
+
+ "this can be tricky, if stepping from start does not reach stop exactly.
+ So what is the reverse of: (2 to:5 by: 2) ?
+ I think, that the correct semantic is to behave transparent to the type
+ of collection and generate the same elements as another collection would.
+ In other words, the same as (1 to:5 by: 2) asOrderedCollection reversed
+ would. That means, we get: #(4 2).
+ This also means, that (2 to:5 by: 2) reversed reversed does not return the
+ original, but another interval which generates the same elements !! (2 to:4 by: 2)"
+
+ |rest|
+
+ step isInteger ifTrue:[
+ rest := ((stop - step) rem: step).
+ ^ (stop-rest) to:start by:step negated
+ ].
+ ^ super reversed
+
+
+ "
+ (1 to:4) reversed asOrderedCollection
+ (1 to:4) reversed reversed asOrderedCollection
+ (1 to:4) asOrderedCollection reversed
+ (1 to:4) asOrderedCollection reversed reversed
+
+ (2 to:5 by: 2) asOrderedCollection
+ (2 to:5 by: 2) asOrderedCollection reversed
+ (2 to:5 by: 2) asOrderedCollection reversed reversed
+ (2 to:5 by: 2) reversed asOrderedCollection
+ (2 to:5 by: 2) reversed reversed asOrderedCollection
+
+ (1 to:2 by: 0.3) asOrderedCollection
+ (1 to:2 by: 0.3) asOrderedCollection reversed
+ (1 to:2 by: 0.3) asOrderedCollection reversed reversed
+ (1 to:2 by: 0.3) reversed asOrderedCollection
+ (1 to:2 by: 0.3) reversed reversed asOrderedCollection
+ "
+! !
+
!Interval methodsFor:'testing'!
includes:anElement
@@ -557,5 +600,5 @@
!Interval class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Interval.st,v 1.44 2007-11-20 11:53:43 mb Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Interval.st,v 1.45 2008-10-22 07:17:55 cg Exp $'
! !