ReindexedCollection.st
author Claus Gittinger <cg@exept.de>
Mon, 20 Mar 2006 09:53:11 +0100
changeset 1618 63a351ca7d76
parent 1453 ecdb7d5e8c13
child 1753 f9be6a841a22
permissions -rw-r--r--
comments
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies' }"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
SequenceableCollection subclass:#ReindexedCollection
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'sequence interval'
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'Collections-Sequenceable'
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!ReindexedCollection class methodsFor:'documentation'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
documentation
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
    ReindexedCollection is a wrapper around a sequenceable collection that remaps the indices 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
    with in linear algorithm.  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
    The elements in the ReindexedCollection are elements in the sequenceable collection at 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
    some start to some stop at some step.  
1453
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
    18
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
    19
    ReindexedCollection allows for efficient use of first/rest-like algorithms (i.e. aka Lisp)
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
    20
    applied to Sequenceable collections, as they avoid element-copying.
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
    21
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
    See class side examples.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
    [Instance Variables:]
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
        sequence        <SequenceableCollection>        the sequence that will be reindexed.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
        interval        <Interval>      the object that describes indicies of interest in the sequence.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
1191
f527b4561175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
    28
    [Origin:]
f527b4561175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
    29
        Part of the Engineering Math Goodies package from Travis.
f527b4561175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
    30
    
f527b4561175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
    31
    [Author:]
f527b4561175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
    32
        Travis Griggs (tgriggs@keyww.com or tkc@bmi.net)
f527b4561175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
    33
        Ported from Squeak by Claus Gittinger (not much of a port, though)
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
examples
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
    |coll|
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
1618
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    41
    coll := #(1 2 3 4 5 6 7 8 9 10) from:8.
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    42
    Transcript show:'from 8: '; showCR:coll.     
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    43
    Transcript show:'size: '; showCR:(coll size).  
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    44
    Transcript show:'at 1: '; showCR:(coll at:1).   
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    45
    Transcript show:'first: '; showCR:(coll first).   
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    46
    Transcript show:'last: '; showCR:(coll last).   
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    47
    coll do:[:each | Transcript show:'do: '; showCR:each].
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    48
    coll reverseDo:[:each | Transcript show:'reverseDo: '; showCR:each].
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    |coll|
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    coll := (1 to:10) asOrderedCollection from:3 to:8.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    coll.     
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
    coll size.  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
    coll at:1.   
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
    coll do:[:each | Transcript showCR:each].
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    |coll|
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    coll := (1 to:10) asOrderedCollection to:4.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    coll.     
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    coll size.  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    coll at:1.   
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    coll last.   
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
    coll do:[:each | Transcript showCR:each].
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
! !
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
!ReindexedCollection class methodsFor:'instance creation'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
on: aSequence from: start 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
    "Create a reindexedCollection on aSequence from start to the end of aSequence"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    ^ self
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
        on: aSequence
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
        from: start
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
        to: aSequence size
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
        by: 1
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
on: aSequence from: start by: step 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    "Create a reindexedCollection on aSequence start to the end of aSequence 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
     if step is positive, else  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
     from start to the beginning of the sequence if step is negative."
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    ^ self
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
        on: aSequence
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
        from: start
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
        to: (step > 0
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
                ifTrue: [aSequence size]
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
                ifFalse: [1])
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
        by: step
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
on: aSequence from: start to: stop 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    "Create a reindexedCollection on aSequence from start to stop by 1 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
     (or -1 if start is greater than stop)"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    ^ self
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
        on: aSequence
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
        from: start
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
        to: stop
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
        by: (start <= stop
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
                ifTrue: [1]
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
                ifFalse: [-1])
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
on: aSequence from: start to: stop by: step 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    "Create a reindexedCollection on aSequence from start to stop by step"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    ^ self new
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
            initialize: aSequence
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
            from: start
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
            to: stop
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
            by: step
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
on: aSequence to: stop 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
    "Create a reindexedCollection on aSequence from 1 to stop by 1"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    ^ self
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
        on: aSequence
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
        from: 1
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
        to: stop
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
        by: 1
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
on: aSequence to: stop by: step 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
    "Create a reindexedCollection on aSequence from 1 to stop (if step is 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
     positive) or the end to stop (if  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
     step is negative). Note: if step is not 1 or -1, there is a chance that the 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
     index specified by stop may  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
     not be in the interval."
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
    ^ self
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
        on: aSequence
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
        from: (step > 0
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
                ifTrue: [1]
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
                ifFalse: [aSequence size])
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
        to: stop
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
        by: step
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
on: aSequence with: anInterval 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
    "Create a reindexedCollection on aSequence"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
    ^ self new initialize: aSequence with: anInterval
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
! !
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
!ReindexedCollection methodsFor:'accessing'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
at: index 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
    "Answer the value of an indexable field in the sequence instance variable. "
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
    ^ sequence at: (interval at: index)
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
at: index put: value 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
    "Store the argument value in the indexable field of the sequence 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
     instance variable indicated by index.  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
     Answer the value that was stored."
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
    ^ sequence at: (interval at: index) put: value
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
size
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
    "Answer how many elements the receiver contains."
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    ^ interval size
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
slide
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    "slide by 1"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
    self slide: 1
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
slide: anIncrement 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
    "given an increment, adjust the reindex map by sliding it that far"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
    interval := interval + anIncrement
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
! !
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
!ReindexedCollection methodsFor:'adding & removing'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
add: anObject 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
    self shouldNotImplement
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
! !
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
1453
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   192
!ReindexedCollection methodsFor:'converting-reindexed'!
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   193
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   194
from:startIndex
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   195
    "return a new collection representing the receivers elements starting at startIndex."
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   196
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   197
    interval step == 1 ifTrue:[
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   198
        ^ ReindexedCollection 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   199
            on:sequence 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   200
            from:(interval start + startIndex - 1) 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   201
            to:(interval stop)
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   202
            by:(interval step)
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   203
    ].
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   204
    "could be more intelligent here..."
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   205
    ^ super from:startIndex
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   206
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   207
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   208
     |coll cdr cddr cdddr|
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   209
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   210
     coll := #(1 2 3 4 5 6 7 8 9 10).
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   211
     cdr := coll from:2.            
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   212
     cddr := cdr from:2.        
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   213
     cdddr := cddr from:2.
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   214
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   215
!
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   216
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   217
from:startIndex to:stopIndex
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   218
    "return a new collection representing the receivers elements 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   219
     starting at startIndex upTo and including endIndex."
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   220
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   221
    interval step == 1 ifTrue:[
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   222
        ^ ReindexedCollection 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   223
            on:sequence 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   224
            from:(interval start + startIndex - 1) 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   225
            to:((interval start + stopIndex - 1) min:interval stop)
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   226
            by:1
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   227
    ].
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   228
    "could be more intelligent here..."
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   229
    ^ super from:startIndex to:stopIndex
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   230
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   231
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   232
     |coll cdrButLast cddrButLast2 cdddrButLast3|
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   233
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   234
     coll := #(1 2 3 4 5 6 7 8 9 10).
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   235
     cdrButLast := coll from:2 to:9.             
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   236
     cddrButLast2 := cdrButLast from:2 to:7.          
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   237
     cdddrButLast3 := cddrButLast2 from:2 to:5.     
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   238
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   239
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   240
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   241
     |coll cdrButLast cddrButLast2 cdddrButLast3|
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   242
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   243
     coll := 1 to:100.
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   244
     cdrButLast := coll from:2 to:99.             
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   245
     cddrButLast2 := cdrButLast from:2 to:97.          
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   246
     cdddrButLast3 := cddrButLast2 from:2 to:95.     
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   247
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   248
!
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   249
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   250
to:stopIndex
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   251
    "return a new collection representing the receivers elements upTo and including endIndex."
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   252
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   253
    interval step == 1 ifTrue:[
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   254
        ^ ReindexedCollection 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   255
            on:sequence 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   256
            from:(interval start) 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   257
            to:((interval start + stopIndex - 1) min:interval stop)
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   258
            by:1
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   259
    ].
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   260
    "could be more intelligent here..."
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   261
    ^ super to:stopIndex
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   262
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   263
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   264
     |coll butLast butLast2 butLast3|
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   265
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   266
     coll := #(1 2 3 4 5 6 7 8 9 10).
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   267
     butLast := coll to:9.              
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   268
     butLast2 := butLast to:8.          
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   269
     butLast3 := butLast2 to:7.     
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   270
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   271
! !
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   272
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
!ReindexedCollection methodsFor:'initialization'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
initialize: aSequence from: start to: stop by: step 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
    sequence := aSequence.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
    interval := Interval from: start to: stop by: step
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
initialize: aSequence with: anInterval 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
        sequence := aSequence.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
        interval := anInterval
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
! !
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
!ReindexedCollection methodsFor:'queries'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
species
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
    "Answer the preferred class for reconstructing the receiver, that is, the sequence."
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
    ^ sequence species
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
! !
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
!ReindexedCollection class methodsFor:'documentation'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
version
1618
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
   296
    ^ '$Header: /cvs/stx/stx/libbasic2/ReindexedCollection.st,v 1.4 2006-03-20 08:53:11 cg Exp $'
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
! !