OrderedSet.st
author Stefan Vogel <sv@exept.de>
Thu, 25 Apr 2013 09:32:44 +0200
changeset 15143 7a1e2ff50fd5
child 15878 ed345dd0ab0c
permissions -rw-r--r--
Change package libbasic2 -> libbasic
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15143
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     1
"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 2001 by eXept Software AG
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     3
              All Rights Reserved
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     4
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    10
 hereby transferred.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    11
"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic' }"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
Set subclass:#OrderedSet
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:'order'
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
	classVariableNames:''
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
	category:'Collections-Sequenceable'
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
!OrderedSet class methodsFor:'documentation'!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
copyright
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    24
"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    25
 COPYRIGHT (c) 2001 by eXept Software AG
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    26
              All Rights Reserved
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    27
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    28
 This software is furnished under a license and may be used
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    29
 only in accordance with the terms of that license and with the
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    31
 be provided or otherwise made available to, or used by, any
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    32
 other person.  No title to or ownership of the software is
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    33
 hereby transferred.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    34
"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    35
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    36
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    37
documentation
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
    I am a subclass of Set whose elements are ordered in a
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
    similar fashion to OrderedCollection.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
    That is, I have both Set behavior (only keeping a single instance of
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
    an element) but I also remember the original order, in which elements
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
    were added.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
    I have one additional instance variable:
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
    order <OrderedCollection>       Ordered collection of values reflecting the order 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
                                    in the set. 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
    [author:]
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
        Claus Gittinger
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
    [see also:]
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
        OrderedCollection 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
        Dictionary OrderedDictionary
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
        Set Bag
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
examples
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
                                                                    [exBegin]
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    63
        |s|
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    64
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    65
        s := OrderedSet new.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    66
        s add:'one'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
        s add:'two'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    68
        s add:'one'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    69
        s add:'two'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    70
        s add:'three'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    71
        s size.         
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    72
        s do:[:each | Transcript showCR:each].         
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    73
                                                                    [exEnd]
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    74
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    75
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    76
                                                                    [exBegin]
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    77
        |s|
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    78
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    79
        s := OrderedSet new.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    80
        s add:'one'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    81
        s add:'two'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    82
        s add:'one'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    83
        s add:'two'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
        s add:'three'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
        s remove:'one'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
        s size.         
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    87
        s do:[:each | Transcript showCR:each].         
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
                                                                    [exEnd]
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    90
                                                                    [exBegin]
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    91
        |s|
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    92
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    93
        s := OrderedSet new.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
        s add:'one'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    95
        s addFirst:'two'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    96
        s addFirst:'three'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    97
        s add:'one'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    98
        s add:'two'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    99
        s add:'three'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
        s size.         
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   101
        s do:[:each | Transcript showCR:each].         
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
                                                                    [exEnd]
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
! !
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
!OrderedSet class methodsFor:'instance creation'!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   107
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   108
new
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   109
        ^super new initializeOrder
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   110
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   111
    "Created: / 16.11.2001 / 10:10:37 / cg"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   112
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   113
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   114
new: anInteger
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   115
        ^(super new: anInteger) initializeOrder
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
    "Created: / 16.11.2001 / 10:10:07 / cg"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   118
! !
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   119
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   120
!OrderedSet methodsFor:'accessing'!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   121
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   122
at:index
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   123
    "return the indexed instance variable with index, anInteger.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   124
     Report an error, if the index is wrong."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   125
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
    ^ order at:index
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
    "Modified: / 16.11.2001 / 10:27:40 / cg"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   129
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
at:index ifAbsent:exceptionalValue
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
    "return the indexed instance variable with index, anInteger.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
     If not present, return the value from exceptionalValue."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   134
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   135
    ^ order at:index ifAbsent:exceptionalValue
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   136
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   137
    "Modified: / 16.11.2001 / 10:27:40 / cg"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   138
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   139
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   140
order
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   141
    "returns the values in the order of their appearance"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   143
    ^ order
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   145
    "
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   146
     |s|
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   147
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   148
     s := OrderedSet new.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   149
     s add:'aaa'; add:'bbb'; add:'ccc'; add:'ddd'; add:'aaa'.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   150
     s order
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   151
    "
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   152
! !
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   153
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   154
!OrderedSet methodsFor:'adding & removing'!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   155
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   156
add:anObject 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   157
    "Add anObject to the receiver (if not already included). 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   158
     Also, remember in the order (i.e. add to the end)
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   159
     If anAssociation is already present in the dictionary,
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   160
     the order will not be changed. (See also: #addLast:)"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   161
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   162
    (super testAndAdd:anObject) ifFalse:[
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   163
        order add:anObject.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   164
    ].
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   165
    ^ anObject
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   166
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   167
    "
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   168
        self new 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   169
                add:1;
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   170
                add:2;
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   171
                add:nil;
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   172
                add:1;
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   173
                yourself
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   174
    "
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   175
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   176
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   177
addFirst:anObject 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   178
    "Add anObject to the receiver (if not already included). 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   179
     Also, remember in the order (i.e. add to the beginning)"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   180
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   181
    |oldObject|
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   182
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   183
    (self includes:anObject) ifTrue:[
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   184
        "/ must either remove the old one from both and add the new one to both,
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   185
        "/ or ensure that the old one is also in the order.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   186
        "/ otherwise, the constraint that the object in the set and the one in the order
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   187
        "/ must be identical could be broken.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   188
        oldObject := order remove:anObject.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   189
    ] ifFalse:[
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   190
        oldObject := super add:anObject.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   191
    ].
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   192
    order addFirst:oldObject.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   193
    ^ anObject
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   194
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   195
    "
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   196
        self new 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   197
                addFirst:1;
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   198
                addFirst:nil;
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   199
                yourself
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   200
    "
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   201
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   202
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   203
addLast:anObject 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   204
    "Add anObject to the receiver (if not already included). 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   205
     Also, remember in the order (i.e. add to the end)
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   206
     If anAssociation is already present in the receiver,
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   207
     it will be moved to the end. (See also: #add:)"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   208
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   209
    |oldObject|
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   210
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   211
    (self includes:anObject) ifTrue:[
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   212
        oldObject := order remove:anObject.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   213
    ] ifFalse:[
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   214
        oldObject := super add:anObject.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   215
    ].
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   216
    order add:oldObject.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   217
    ^ anObject
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   218
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   219
    "
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   220
        self new 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   221
                addLast:1;
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   222
                addLast:nil;
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   223
                yourself
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   224
    "
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   225
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   226
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   227
remove:oldObject ifAbsent:exceptionValueProvider
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   228
    "remove oldObject from the collection and return it.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   229
     If it was not in the collection return the value of exceptionValueProvider.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   230
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   231
     WARNING: do not remove elements while iterating over the receiver."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   232
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   233
    |removedObject|
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   234
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   235
    removedObject := super remove:oldObject 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   236
                           ifAbsent:[ ^ exceptionValueProvider value].      
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   237
    order removeIdentical:removedObject.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   238
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   239
    ^ removedObject
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   240
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   241
    "
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   242
        OrderedSet new remove:nil
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   243
    "
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   244
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   245
    "Modified: / 16.11.2001 / 10:21:07 / cg"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   246
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   247
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   248
removeAll
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   249
    "remove all elements from the receiver. Returns the receiver."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   250
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   251
    super removeAll.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   252
    self initializeOrder.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   253
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   254
    "Created: / 16.11.2001 / 10:21:40 / cg"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   255
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   256
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   257
removeFirst
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   258
    "remove the first object from the collection and return it.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   259
     If it was not in the collection, raise an error.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   260
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   261
     WARNING: do not remove elements while iterating over the receiver."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   262
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   263
    ^ self removeFirstIfAbsent:[self emptyCollectionError].
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   264
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   265
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   266
removeFirstIfAbsent:exceptionalValue
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   267
    "remove the first object from the collection and return it.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   268
     If it was not in the collection, return the value from exceptionalValue.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   269
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   270
     WARNING: do not remove elements while iterating over the receiver."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   271
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   272
    |element|
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   273
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   274
    order isEmpty ifTrue:[^ exceptionalValue value].
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   275
    element := order first.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   276
    ^ self remove:element.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   277
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   278
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   279
removeLast
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   280
    "remove the last object from the collection and return it.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   281
     If it was not in the collection, raise an error.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   282
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   283
     WARNING: do not remove elements while iterating over the receiver."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   284
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   285
    ^ self removeLastIfAbsent:[self emptyCollectionError].
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   286
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   287
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   288
removeLastIfAbsent:exceptionalValue
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   289
    "remove the last object from the collection and return it.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   290
     If it was not in the collection, return the value from exceptionalValue.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   291
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   292
     WARNING: do not remove elements while iterating over the receiver."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   293
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   294
    |lastElement|
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   295
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   296
    order isEmpty ifTrue:[^ exceptionalValue value].
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   297
    lastElement := order last.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   298
    ^ self remove:lastElement.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   299
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   300
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   301
saveRemove:oldObject ifAbsent:exceptionValueProvider
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   302
    "remove the element, oldObject from the collection.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   303
     Return the element 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   304
     (could be non-identical to oldObject, since I hash on equality, not on identity).
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   305
     If it was not in the collection return the value of exceptionValueProvider.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   306
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   307
     In contrast to #remove:, this does not resize the underlying collection
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   308
     and therefore does NOT rehash & change the elements order.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   309
     Therefor this can be used while enumerating the receiver,
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   310
     which is not possible if #remove: is used.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   311
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   312
     WARNING: since no resizing is done, the physical amount of memory used
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   313
              by the container remains the same, although the logical size shrinks.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   314
              You may want to manually resize the receiver using #emptyCheck.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   315
              (after the loop)"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   316
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   317
    |removedObject|
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   318
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   319
    removedObject := super saveRemove:oldObject ifAbsent:[^ exceptionValueProvider value].
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   320
    order removeIdentical:removedObject.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   321
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   322
    ^ removedObject
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   323
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   324
    "Created: / 16.11.2001 / 10:23:48 / cg"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   325
    "Modified: / 16.11.2001 / 10:24:03 / cg"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   326
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   327
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   328
testAndAdd:anObject 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   329
    "add the argument, anObject to the receiver.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   330
     Answer true, if the element did already exist in the collection,
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   331
     false otherwise.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   332
     Also, remember in the order (i.e. add to the end)
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   333
     If anObject is already present in the set,
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   334
     the order will not be changed. (See also: #addLast:)"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   335
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   336
    (super testAndAdd:anObject) ifFalse:[
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   337
        order add:anObject.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   338
        ^ false.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   339
    ].
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   340
    ^ true
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   341
! !
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   342
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   343
!OrderedSet methodsFor:'converting'!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   344
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   345
asNewOrderedSet
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   346
    "make sure to return a unique new set"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   347
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   348
    "could be an instance of a subclass..."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   349
    self class == OrderedSet ifTrue:[
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   350
        ^ self copy
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   351
    ].
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   352
    ^ super asOrderedSet
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   353
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   354
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   355
asOrderedSet
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   356
    "make sure to return a unique new set"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   357
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   358
    "could be an instance of a subclass..."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   359
    self class == OrderedSet ifTrue:[
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   360
        ^ self.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   361
    ].
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   362
    ^ super asOrderedSet
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   363
! !
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   364
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   365
!OrderedSet methodsFor:'copying'!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   366
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   367
postCopy
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   368
    "have to copy the keyArray too"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   369
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   370
    super postCopy.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   371
    order := order copy.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   372
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   373
    "Created: / 16.11.2001 / 10:28:50 / cg"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   374
! !
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   375
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   376
!OrderedSet methodsFor:'enumerating'!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   377
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   378
do:aBlock 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   379
    "Evaluate aBlock for each of the sets's values
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   380
     in the order they have been added."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   381
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   382
    order do:aBlock
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   383
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   384
    "Modified: / 16.11.2001 / 10:04:00 / cg"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   385
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   386
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   387
doWithIndex:aBlock 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   388
    "Squeak/V'Age compatibility; 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   389
     Evaluate aBlock for each of the sets's values and index
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   390
     in the order they have been added."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   391
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   392
    order doWithIndex:aBlock
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   393
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   394
    "Created: / 09-11-2010 / 16:09:17 / cg"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   395
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   396
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   397
reverseDo:aBlock 
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   398
    "Evaluate aBlock for each of the sets's values
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   399
     in the reverse order they have been added."
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   400
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   401
    order reverseDo:aBlock
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   402
! !
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   403
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   404
!OrderedSet methodsFor:'initialization'!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   405
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   406
initializeOrder
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   407
    order := OrderedCollection new
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   408
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   409
    "Created: / 16.11.2001 / 10:06:05 / cg"
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   410
! !
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   411
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   412
!OrderedSet methodsFor:'searching'!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   413
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   414
indexOf:anObject
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   415
    ^ order indexOf:anObject.
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   416
! !
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   417
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   418
!OrderedSet class methodsFor:'documentation'!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   419
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   420
version
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   421
    ^ '$Header: /cvs/stx/stx/libbasic/OrderedSet.st,v 1.24 2013-04-25 07:32:44 stefan Exp $'
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   422
!
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   423
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   424
version_CVS
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   425
    ^ '$Header: /cvs/stx/stx/libbasic/OrderedSet.st,v 1.24 2013-04-25 07:32:44 stefan Exp $'
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   426
! !
7a1e2ff50fd5 Change package libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   427