Magnitude.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 22 Sep 2015 16:28:42 +0100
branchjv
changeset 18759 c1217211909c
parent 18397 20527009f352
child 19009 0181a8078105
permissions -rw-r--r--
Changed identification strings to contain jv-branch ...to make explicit that this distribution is not the official one used by eXept and therefore that eXept is not to be blamed in case of any problem.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18396
b42870402e9b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 16275
diff changeset
     1
"{ Encoding: utf8 }"
b42870402e9b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 16275
diff changeset
     2
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     4
 COPYRIGHT (c) 1988 by Claus Gittinger
213
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
     5
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
"
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    14
"{ Package: 'stx:libbasic' }"
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    15
18396
b42870402e9b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 16275
diff changeset
    16
"{ NameSpace: Smalltalk }"
b42870402e9b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 16275
diff changeset
    17
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
Object subclass:#Magnitude
1226
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
    19
	instanceVariableNames:''
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
    20
	classVariableNames:''
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
    21
	poolDictionaries:''
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
    22
	category:'Magnitude-General'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    24
88
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    25
!Magnitude class methodsFor:'documentation'!
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    26
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    27
copyright
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    28
"
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    29
 COPYRIGHT (c) 1988 by Claus Gittinger
213
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
    30
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    31
88
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    32
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    33
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    35
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    36
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    37
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    38
"
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    39
!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    40
88
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    41
documentation
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    42
"
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    43
    This is an abstract class definining common methods for
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
    44
    Objects which can be compared by a kind of less than relation.
1295
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 1226
diff changeset
    45
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 1226
diff changeset
    46
    [author:]
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 1226
diff changeset
    47
        Claus Gittinger
88
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    48
"
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    49
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    50
8892
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8204
diff changeset
    51
!Magnitude class methodsFor:'queries'!
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8204
diff changeset
    52
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8204
diff changeset
    53
isAbstract
11226
846103646b4a comment
Claus Gittinger <cg@exept.de>
parents: 10600
diff changeset
    54
    "Return if this class is an abstract class.
846103646b4a comment
Claus Gittinger <cg@exept.de>
parents: 10600
diff changeset
    55
     True is returned for Magnitude here; false for subclasses.
846103646b4a comment
Claus Gittinger <cg@exept.de>
parents: 10600
diff changeset
    56
     Abstract subclasses must redefine again."
846103646b4a comment
Claus Gittinger <cg@exept.de>
parents: 10600
diff changeset
    57
8892
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8204
diff changeset
    58
    ^ self == Magnitude
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8204
diff changeset
    59
! !
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8204
diff changeset
    60
10600
6bfbf469a1be *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8892
diff changeset
    61
!Magnitude methodsFor:'Compatibility-Squeak'!
6bfbf469a1be *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8892
diff changeset
    62
6bfbf469a1be *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8892
diff changeset
    63
min:aMin max:aMax 
6bfbf469a1be *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8892
diff changeset
    64
    "similar to clampBetween:and:"
6bfbf469a1be *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8892
diff changeset
    65
6bfbf469a1be *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8892
diff changeset
    66
    ^ (self min: aMin) max: aMax
6bfbf469a1be *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8892
diff changeset
    67
6bfbf469a1be *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8892
diff changeset
    68
    "Created: / 06-06-2007 / 11:00:22 / cg"
6bfbf469a1be *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8892
diff changeset
    69
! !
6bfbf469a1be *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8892
diff changeset
    70
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    71
!Magnitude methodsFor:'comparing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    72
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    73
< aMagnitude
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    74
    "Compare the receiver with the argument and return true if the
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    75
     receiver is less than the argument. Otherwise return false."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    76
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
    77
    ^ self subclassResponsibility
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    78
!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    79
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    80
<= aMagnitude
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
    81
    "return true, if the argument is greater or equal than the receiver"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    82
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
    83
    ^ (aMagnitude < self) not
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    84
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    85
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
= aMagnitude
a27a279701f8 Initial revision
claus
parents:
diff changeset
    87
    "Compare the receiver with the argument and return true if the
a27a279701f8 Initial revision
claus
parents:
diff changeset
    88
     receiver is equal to the argument. Otherwise return false."
a27a279701f8 Initial revision
claus
parents:
diff changeset
    89
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
    ^ self subclassResponsibility
a27a279701f8 Initial revision
claus
parents:
diff changeset
    91
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    92
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    93
> aMagnitude
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
    94
    "return true, if the argument is less than the receiver"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    95
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
    96
    ^ aMagnitude < self
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    97
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    98
a27a279701f8 Initial revision
claus
parents:
diff changeset
    99
>= aMagnitude
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   100
    "return true, if the argument is less or equal than the receiver"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   101
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   102
    ^ (self < aMagnitude) not
213
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   103
!
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   104
1226
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   105
clampBetween:min and:max
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   106
    "return the receiver if its between min .. max,
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   107
     or min if its less than min, or max of its greater than max.
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   108
     This is only a lazy-typers helper for: ((something min:max) max:min)"
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   109
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   110
    (max < self) ifTrue:[^ max].
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   111
    (self < min) ifTrue:[^ min].
1226
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   112
    ^ self
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   113
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   114
    "
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   115
     1 clampBetween:2 and:5  
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   116
     3 clampBetween:2 and:5  
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   117
     6 clampBetween:2 and:5  
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   118
    "
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   119
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   120
    "Modified: 19.4.1996 / 14:58:12 / cg"
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   121
!
0beea7b0ab4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   122
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   123
compare:arg ifLess:lessBlock ifEqual:equalBlock ifGreater:greaterBlock
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   124
    "three-way compare - thanks to Self for this idea.
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   125
     Can be redefined in subclasses to do it with a single comparison if
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   126
     comparison is expensive."
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   127
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   128
    self < arg ifTrue:[
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   129
	^ lessBlock value
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   130
    ].
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   131
    self = arg ifTrue:[
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   132
	^ equalBlock value
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   133
    ].
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   134
    ^ greaterBlock value
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   135
!
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   136
16275
062c57a36882 class: Magnitude
Stefan Vogel <sv@exept.de>
parents: 15374
diff changeset
   137
hash
062c57a36882 class: Magnitude
Stefan Vogel <sv@exept.de>
parents: 15374
diff changeset
   138
    "instances, for which #= answers true must answer the same hash"
062c57a36882 class: Magnitude
Stefan Vogel <sv@exept.de>
parents: 15374
diff changeset
   139
062c57a36882 class: Magnitude
Stefan Vogel <sv@exept.de>
parents: 15374
diff changeset
   140
    ^ self subclassResponsibility
062c57a36882 class: Magnitude
Stefan Vogel <sv@exept.de>
parents: 15374
diff changeset
   141
!
062c57a36882 class: Magnitude
Stefan Vogel <sv@exept.de>
parents: 15374
diff changeset
   142
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   143
max:aMagnitude
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   144
    "return the receiver or the argument, whichever has greater magnitude"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   145
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   146
    (aMagnitude < self) ifTrue:[^ self].
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   147
    ^ aMagnitude
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   148
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   149
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   150
     1 max: 2
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   151
     1 max: 2.0
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   152
     2.0 max: 1.0
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   153
     2.0 max: 2
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   154
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   155
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   156
213
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   157
min:aMagnitude
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   158
    "return the receiver or the argument, whichever has lesser magnitude"
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   159
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   160
    (self < aMagnitude) ifTrue:[^ self].
213
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   161
    ^ aMagnitude
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   162
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   163
    "
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   164
     1 min: 2
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   165
     1 min: 2.0
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   166
     2.0 min: 1.0
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   167
     2.0 min: 2
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   168
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   169
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   170
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   171
!Magnitude methodsFor:'iteration'!
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   172
11602
b7c26da0a6c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11226
diff changeset
   173
downTo:stop by:step do:aBlock
b7c26da0a6c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11226
diff changeset
   174
    "For each element of the interval from the receiver down to the argument stop,
b7c26da0a6c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11226
diff changeset
   175
     decrementing by step, evaluate aBlock, passing the number as argument."
b7c26da0a6c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11226
diff changeset
   176
b7c26da0a6c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11226
diff changeset
   177
    ^ self to:stop by:step negated do:aBlock
b7c26da0a6c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11226
diff changeset
   178
b7c26da0a6c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11226
diff changeset
   179
    "
b7c26da0a6c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11226
diff changeset
   180
     10 downTo:1 by:2 do:[:i | Transcript showCR:i].
b7c26da0a6c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11226
diff changeset
   181
    "
b7c26da0a6c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11226
diff changeset
   182
!
b7c26da0a6c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11226
diff changeset
   183
6073
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   184
downTo:stop do:aBlock
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   185
    "For each element of the interval from the receiver down to the argument stop,
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   186
     evaluate aBlock, passing the number as argument."
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   187
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   188
    ^ self to:stop by:-1 do:aBlock
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   189
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   190
    "
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   191
     10 downTo:1 do:[:i | Transcript showCR:i].
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   192
     $d downTo:$a do:[:i | Transcript showCR:i].
6073
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   193
    "
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   194
!
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   195
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   196
to:stop by:incr do:aBlock
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   197
    "For each element of the interval from the receiver up to the argument stop, incrementing
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   198
     by step, evaluate aBlock passing the element as argument.
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   199
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   200
     Not all Magnitudes do implement #negative and #+ however, 
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   201
     so should this method go to ArithmethicValue?
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   202
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   203
     Only use #<, to speed up things (for subclasses only defining #<)"
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   204
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   205
    |tmp|
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   206
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   207
    tmp := self.
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   208
"using #negative would be more portable, but stc does only inline #< but not #negative (yet)"
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   209
"/    incr negative ifTrue:[
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   210
    incr < 0 ifTrue:[
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   211
        [tmp < stop] whileFalse:[
6073
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   212
            aBlock value:tmp.
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   213
            tmp := tmp+incr
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   214
        ]
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   215
    ] ifFalse:[
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   216
        [stop < tmp] whileFalse:[
6073
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   217
            aBlock value:tmp.
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   218
            tmp := tmp+incr
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   219
        ]
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   220
    ]
6073
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   221
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   222
    "
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   223
     1 to:10 do:[:i | Transcript showCR:i].
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   224
     1 to:10 by:2 do:[:i | Transcript showCR:i].
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   225
     $a to:$z by:2 do:[:i | Transcript showCR:i].
6073
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   226
     10 to:1 by:-1 do:[:i | Transcript showCR:i].
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   227
    "
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   228
!
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   229
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   230
to:stop by:incr doWithBreak:aBlock
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   231
    "For each element of the interval from the receiver up to the argument stop, incrementing
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   232
     by step, evaluate aBlock passing the element as argument.
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   233
     Pass a break argument, to allow for premature exit of the loop."
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   234
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   235
    |tmp break|
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   236
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   237
    break := [^ self].
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   238
    tmp := self.
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   239
"using #negative would be more portable, but stc does only inline #< but not #negative (yet)"
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   240
"/    incr negative ifTrue:[
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   241
    incr < 0 ifTrue:[
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   242
        [tmp < stop] whileFalse:[
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   243
            aBlock value:tmp value:break.
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   244
            tmp := tmp+incr
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   245
        ]
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   246
    ] ifFalse:[
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   247
        [stop < tmp] whileFalse:[
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   248
            aBlock value:tmp value:break.
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   249
            tmp := tmp+incr
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   250
        ]
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   251
    ]
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   252
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   253
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   254
    "
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   255
     1 to:100 by:5 doWithBreak:[:index :break |
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   256
        Transcript showCR:index printString.
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   257
        index > 50 ifTrue:[
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   258
            break value
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   259
        ].
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   260
     ]
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   261
    "
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   262
!
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   263
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   264
to:stop by:incr doWithExit:aBlock
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   265
    "For each element of the interval from the receiver up to the argument stop, incrementing
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   266
     by step, evaluate aBlock passing the element as argument.
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   267
     Pass a break argument, to allow for premature exit of the loop."
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   268
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   269
    |tmp exit|
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   270
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   271
    exit := [:exitValue | ^ exitValue].
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   272
    tmp := self.
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   273
"using #negative would be more portable, but stc does only inline #< but not #negative (yet)"
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   274
"/    incr negative ifTrue:[
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   275
    incr < 0 ifTrue:[
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   276
        [tmp < stop] whileFalse:[
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   277
            aBlock value:tmp value:exit.
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   278
            tmp := tmp+incr
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   279
        ]
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   280
    ] ifFalse:[
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   281
        [stop < tmp] whileFalse:[
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   282
            aBlock value:tmp value:exit.
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   283
            tmp := tmp+incr
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   284
        ]
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   285
    ]
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   286
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   287
    "
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   288
     1 to:100 by:5 doWithExit:[:index :exit |
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   289
        Transcript showCR:index printString.
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   290
        index > 50 ifTrue:[
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   291
            exit value:nil
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   292
        ].
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   293
     ]
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   294
    "
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   295
!
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   296
11837
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   297
to:stop count:aBlock
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   298
    "same as (self to:stop) count:aBlock"
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   299
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   300
    |cnt|
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   301
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   302
    cnt := 0.
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   303
    self to:stop do:[:i |
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   304
       (aBlock value:i) ifTrue:[ cnt := cnt + 1 ].
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   305
    ].
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   306
    ^ cnt
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   307
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   308
    "
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   309
     1 to:10 count:[:n | n even]
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   310
    "
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   311
!
27fb4984e97b +to:count:
Claus Gittinger <cg@exept.de>
parents: 11602
diff changeset
   312
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   313
to:stop do:aBlock
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   314
    "For each element of the interval from the receiver up to the argument stop,
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   315
     evaluate aBlock, passing the number as argument."
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   316
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   317
    |tmp|
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   318
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   319
    tmp := self.
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   320
    [stop < tmp] whileFalse:[
6073
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   321
        aBlock value:tmp.
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   322
        tmp := tmp+1
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   323
    ]
6073
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   324
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   325
    "
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   326
     1 to:10 do:[:i | Transcript showCR:i].
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   327
     1 to:10 by:2 do:[:i | Transcript showCR:i].
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   328
     10 to:1 by:-1 do:[:i | Transcript showCR:i].
a2b1c61dae18 added #downTo:do:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   329
    "
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   330
!
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   331
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   332
to:stop doWithBreak:aBlock
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   333
    "For each element of the interval from the receiver up to the argument stop,
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   334
     evaluate aBlock, passing the number as argument.
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   335
     Pass a break argument, to allow for premature exit of the loop."
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   336
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   337
    |tmp break|
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   338
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   339
    break := [^ self].
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   340
    tmp := self.
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   341
    [stop < tmp] whileFalse:[
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   342
        aBlock value:tmp value:break.
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   343
        tmp := tmp+1
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   344
    ]
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   345
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   346
    "
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   347
     1 to:10 doWithBreak:[:index :break |
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   348
        Transcript showCR:index printString.
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   349
        index > 5 ifTrue:[
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   350
            break value
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   351
        ].
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   352
     ]
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   353
    "
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   354
!
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   355
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   356
to:stop doWithExit:aBlock
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   357
    "For each element of the interval from the receiver up to the argument stop,
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   358
     evaluate aBlock, passing the number as argument.
15374
13a5c9dae49b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 11837
diff changeset
   359
     Passes an additional exit object, which can be used to leave
13a5c9dae49b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 11837
diff changeset
   360
     the loop early, by sending it a #value: message.
13a5c9dae49b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 11837
diff changeset
   361
     Returns nil or the value passed to the exit>>value: message.
13a5c9dae49b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 11837
diff changeset
   362
13a5c9dae49b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 11837
diff changeset
   363
     Notice, that this is different to a return statement in the block, 
13a5c9dae49b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 11837
diff changeset
   364
     which returns from the enclosed method, NOT only from the block."
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   365
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   366
    |exit tmp|
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   367
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   368
    exit := [:exitValue | ^exitValue].
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   369
    tmp := self.
8204
ac5db5b88079 Only use the base compare mechanism, #< for iterating
Stefan Vogel <sv@exept.de>
parents: 8181
diff changeset
   370
    [stop < tmp] whileFalse:[
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   371
        aBlock value:tmp value:exit.
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   372
        tmp := tmp+1
15374
13a5c9dae49b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 11837
diff changeset
   373
    ].
13a5c9dae49b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 11837
diff changeset
   374
    ^ nil
5565
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   375
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   376
    "
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   377
     1 to:10 doWithExit:[:index :exit |
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   378
        index == 5 ifTrue:[
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   379
            exit value:nil
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   380
        ].
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   381
        Transcript showCR:index.
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   382
     ].
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   383
    "
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   384
! !
a815d6b86ace moved iterators up in hierarchy
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   385
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   386
!Magnitude methodsFor:'testing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   387
a27a279701f8 Initial revision
claus
parents:
diff changeset
   388
between:min and:max
18396
b42870402e9b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 16275
diff changeset
   389
    "return true if the receiver greater than or equal to the argument min
b42870402e9b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 16275
diff changeset
   390
     and less than or equal to the argument max"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   391
a27a279701f8 Initial revision
claus
parents:
diff changeset
   392
    (self < min) ifTrue:[^ false].
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   393
    (max < self) ifTrue:[^ false].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   394
    ^ true
56
be0ed17e6f85 *** empty log message ***
claus
parents: 5
diff changeset
   395
213
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   396
    "
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   397
     1.2 between:1 and:2
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   398
     (3/2) between:1 and:2
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   399
     (3/2) between:0 and:1
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   400
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   401
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   402
a27a279701f8 Initial revision
claus
parents:
diff changeset
   403
in:anInterval
a27a279701f8 Initial revision
claus
parents:
diff changeset
   404
    "return whether the receiver is within the interval bounds"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   405
a27a279701f8 Initial revision
claus
parents:
diff changeset
   406
    (self < anInterval start) ifTrue:[^ false].
8181
b2560b88a5b1 Only use #< for comparisons, since this is the base mechanism.
Stefan Vogel <sv@exept.de>
parents: 8178
diff changeset
   407
    (anInterval stop < self)  ifTrue:[^ false].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   408
    ^ true
56
be0ed17e6f85 *** empty log message ***
claus
parents: 5
diff changeset
   409
213
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   410
    "
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   411
     1.2 in:(1 to: 2)
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   412
     (3/2) in:(1 to: 2)
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   413
     (3/2) in:(0 to: 1)
3b56a17534fd *** empty log message ***
claus
parents: 93
diff changeset
   414
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   415
! !
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   416
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   417
!Magnitude class methodsFor:'documentation'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   418
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   419
version
18396
b42870402e9b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 16275
diff changeset
   420
    ^ '$Header: /cvs/stx/stx/libbasic/Magnitude.st,v 1.28 2015-05-23 15:00:25 cg Exp $'
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   421
! !
15374
13a5c9dae49b class: Magnitude
Claus Gittinger <cg@exept.de>
parents: 11837
diff changeset
   422