ReindexedCollection.st
author Claus Gittinger <cg@exept.de>
Tue, 25 Jun 2013 13:23:58 +0200
changeset 3020 a88b56ea6629
parent 2931 0c2ab359a232
child 3687 2c6d35ee488d
permissions -rw-r--r--
added isFixedSize query
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1924
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
     1
"
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
     2
 COPYRIGHT (c) 2006 by eXept Software AG
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
     3
              All Rights Reserved
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
     4
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
     5
 This software is furnished under a license and may be used
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
     6
 only in accordance with the terms of that license and with the
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
     8
 be provided or otherwise made available to, or used by, any
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
     9
 other person.  No title to or ownership of the software is
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    10
 hereby transferred.
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    11
"
1753
f9be6a841a22 ReindexedCollectionCVS: ----------------------------------------------------------------------
Claus Gittinger <cg@exept.de>
parents: 1618
diff changeset
    12
"{ Package: 'stx:libbasic2' }"
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
SequenceableCollection subclass:#ReindexedCollection
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:'sequence interval'
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	classVariableNames:''
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	category:'Collections-Sequenceable'
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!ReindexedCollection class methodsFor:'documentation'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
1924
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    23
copyright
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    24
"
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    25
 COPYRIGHT (c) 2006 by eXept Software AG
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    26
              All Rights Reserved
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    27
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    28
 This software is furnished under a license and may be used
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    29
 only in accordance with the terms of that license and with the
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    31
 be provided or otherwise made available to, or used by, any
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    32
 other person.  No title to or ownership of the software is
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    33
 hereby transferred.
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    34
"
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    35
!
4f84cb037a21 copyright
Claus Gittinger <cg@exept.de>
parents: 1753
diff changeset
    36
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
documentation
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
    ReindexedCollection is a wrapper around a sequenceable collection that remaps the indices 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    with in linear algorithm.  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    The elements in the ReindexedCollection are elements in the sequenceable collection at 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    some start to some stop at some step.  
1453
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
    43
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
    44
    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
    45
    applied to Sequenceable collections, as they avoid element-copying.
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
    46
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    See class side examples.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    [Instance Variables:]
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
        sequence        <SequenceableCollection>        the sequence that will be reindexed.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
        interval        <Interval>      the object that describes indicies of interest in the sequence.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
1191
f527b4561175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
    53
    [Origin:]
f527b4561175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
    54
        Part of the Engineering Math Goodies package from Travis.
f527b4561175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
    55
    
f527b4561175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
    56
    [Author:]
f527b4561175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
    57
        Travis Griggs (tgriggs@keyww.com or tkc@bmi.net)
f527b4561175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
    58
        Ported from Squeak by Claus Gittinger (not much of a port, though)
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
examples
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    |coll|
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
1618
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    66
    coll := #(1 2 3 4 5 6 7 8 9 10) from:8.
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    67
    Transcript show:'from 8: '; showCR:coll.     
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    68
    Transcript show:'size: '; showCR:(coll size).  
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    69
    Transcript show:'at 1: '; showCR:(coll at:1).   
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    70
    Transcript show:'first: '; showCR:(coll first).   
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    71
    Transcript show:'last: '; showCR:(coll last).   
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    72
    coll do:[:each | Transcript show:'do: '; showCR:each].
63a351ca7d76 comments
Claus Gittinger <cg@exept.de>
parents: 1453
diff changeset
    73
    coll reverseDo:[:each | Transcript show:'reverseDo: '; showCR:each].
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    |coll|
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    coll := (1 to:10) asOrderedCollection from:3 to:8.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    coll.     
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    coll size.  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    coll at:1.   
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
    coll do:[:each | Transcript showCR:each].
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
    |coll|
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    coll := (1 to:10) asOrderedCollection to:4.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    coll.     
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    coll size.  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    coll at:1.   
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    coll last.   
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
    coll do:[:each | Transcript showCR:each].
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
! !
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
!ReindexedCollection class methodsFor:'instance creation'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
on: aSequence from: start 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    "Create a reindexedCollection on aSequence from start to the end of aSequence"
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: aSequence size
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
        by: 1
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
on: aSequence from: start by: step 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
    "Create a reindexedCollection on aSequence start to the end of aSequence 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
     if step is positive, else  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
     from start to the beginning of the sequence if step is negative."
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
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
        on: 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: (step > 0
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
                ifTrue: [aSequence size]
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
                ifFalse: [1])
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
        by: step
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
on: aSequence from: start to: stop 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    "Create a reindexedCollection on aSequence from start to stop by 1 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
     (or -1 if start is greater than stop)"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
    ^ self
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
        on: aSequence
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
        from: start
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
        to: stop
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
        by: (start <= stop
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
                ifTrue: [1]
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
                ifFalse: [-1])
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
on: aSequence from: start to: stop by: step 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
    "Create a reindexedCollection on aSequence from start to stop by step"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    ^ self new
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
            initialize: aSequence
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
            from: start
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
            to: stop
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
            by: step
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
on: aSequence to: stop 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
    "Create a reindexedCollection on aSequence from 1 to stop by 1"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
    ^ self
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
        on: aSequence
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
        from: 1
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
        to: stop
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
        by: 1
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
on: aSequence to: stop by: step 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
    "Create a reindexedCollection on aSequence from 1 to stop (if step is 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
     positive) or the end to stop (if  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
     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
   159
     index specified by stop may  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
     not be in the interval."
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
    ^ self
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
        on: aSequence
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
        from: (step > 0
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
                ifTrue: [1]
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
                ifFalse: [aSequence size])
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
        to: stop
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
        by: step
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
on: aSequence with: anInterval 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    "Create a reindexedCollection on aSequence"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    ^ self new initialize: aSequence with: anInterval
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
! !
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
!ReindexedCollection methodsFor:'accessing'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
at: index 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
    "Answer the value of an indexable field in the sequence instance variable. "
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
    ^ sequence at: (interval at: index)
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
at: index put: value 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
    "Store the argument value in the indexable field of the sequence 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
     instance variable indicated by index.  
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
     Answer the value that was stored."
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
    ^ sequence at: (interval at: index) put: value
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
size
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
    "Answer how many elements the receiver contains."
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
    ^ interval size
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
slide
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
    "slide by 1"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
    self slide: 1
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
slide: anIncrement 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
    "given an increment, adjust the reindex map by sliding it that far"
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
    interval := interval + anIncrement
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
! !
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
!ReindexedCollection methodsFor:'adding & removing'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
add: anObject 
2931
0c2ab359a232 comment/format in: #add:
Claus Gittinger <cg@exept.de>
parents: 1924
diff changeset
   214
    "report an error; reindexedCollections cannot add elements"
0c2ab359a232 comment/format in: #add:
Claus Gittinger <cg@exept.de>
parents: 1924
diff changeset
   215
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
    self shouldNotImplement
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
! !
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
1453
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   219
!ReindexedCollection methodsFor:'converting-reindexed'!
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
from:startIndex
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   222
    "return a new collection representing the receivers elements starting at startIndex."
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   223
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   224
    interval step == 1 ifTrue:[
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   225
        ^ ReindexedCollection 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   226
            on:sequence 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   227
            from:(interval start + startIndex - 1) 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   228
            to:(interval stop)
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   229
            by:(interval step)
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
    "could be more intelligent here..."
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   232
    ^ super from:startIndex
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
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   235
     |coll cdr cddr cdddr|
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   236
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   237
     coll := #(1 2 3 4 5 6 7 8 9 10).
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   238
     cdr := coll from:2.            
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   239
     cddr := cdr from:2.        
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   240
     cdddr := cddr from:2.
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   241
    "
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
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   244
from:startIndex to:stopIndex
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   245
    "return a new collection representing the receivers elements 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   246
     starting at startIndex upTo and including endIndex."
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
    interval step == 1 ifTrue:[
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   249
        ^ ReindexedCollection 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   250
            on:sequence 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   251
            from:(interval start + startIndex - 1) 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   252
            to:((interval start + stopIndex - 1) min:interval stop)
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   253
            by:1
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   254
    ].
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   255
    "could be more intelligent here..."
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   256
    ^ super from:startIndex to:stopIndex
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   257
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   258
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   259
     |coll cdrButLast cddrButLast2 cdddrButLast3|
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   260
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   261
     coll := #(1 2 3 4 5 6 7 8 9 10).
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   262
     cdrButLast := coll from:2 to:9.             
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   263
     cddrButLast2 := cdrButLast from:2 to:7.          
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   264
     cdddrButLast3 := cddrButLast2 from:2 to:5.     
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
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   267
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   268
     |coll cdrButLast cddrButLast2 cdddrButLast3|
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   269
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   270
     coll := 1 to:100.
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   271
     cdrButLast := coll from:2 to:99.             
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   272
     cddrButLast2 := cdrButLast from:2 to:97.          
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   273
     cdddrButLast3 := cddrButLast2 from:2 to:95.     
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   274
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   275
!
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   276
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   277
to:stopIndex
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   278
    "return a new collection representing the receivers elements upTo and including endIndex."
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   279
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   280
    interval step == 1 ifTrue:[
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   281
        ^ ReindexedCollection 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   282
            on:sequence 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   283
            from:(interval start) 
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   284
            to:((interval start + stopIndex - 1) min:interval stop)
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   285
            by:1
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   286
    ].
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   287
    "could be more intelligent here..."
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   288
    ^ super to:stopIndex
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   289
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   290
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   291
     |coll butLast butLast2 butLast3|
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   292
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   293
     coll := #(1 2 3 4 5 6 7 8 9 10).
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   294
     butLast := coll to:9.              
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   295
     butLast2 := butLast to:8.          
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   296
     butLast3 := butLast2 to:7.     
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   297
    "
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   298
! !
ecdb7d5e8c13 reindexing & comments
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   299
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
!ReindexedCollection methodsFor:'initialization'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
initialize: aSequence from: start to: stop by: step 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
    sequence := aSequence.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
    interval := Interval from: start to: stop by: step
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
initialize: aSequence with: anInterval 
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
        sequence := aSequence.
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
        interval := anInterval
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
! !
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
!ReindexedCollection methodsFor:'queries'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
3020
a88b56ea6629 added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 2931
diff changeset
   314
isFixedSize
a88b56ea6629 added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 2931
diff changeset
   315
    "return true if the receiver cannot grow"
a88b56ea6629 added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 2931
diff changeset
   316
a88b56ea6629 added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 2931
diff changeset
   317
    ^ sequence isFixedSize
a88b56ea6629 added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 2931
diff changeset
   318
!
a88b56ea6629 added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 2931
diff changeset
   319
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
species
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
    "Answer the preferred class for reconstructing the receiver, that is, the sequence."
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
    ^ sequence species
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
! !
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
!ReindexedCollection class methodsFor:'documentation'!
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
version
3020
a88b56ea6629 added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 2931
diff changeset
   329
    ^ '$Header: /cvs/stx/stx/libbasic2/ReindexedCollection.st,v 1.8 2013-06-25 11:23:58 cg Exp $'
1190
82af4e7d6723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
! !
2931
0c2ab359a232 comment/format in: #add:
Claus Gittinger <cg@exept.de>
parents: 1924
diff changeset
   331