OrderedDictionary.st
author Stefan Vogel <sv@exept.de>
Sat, 10 Aug 2013 13:22:40 +0200
changeset 15614 70bf14a15a59
parent 15534 808593c7efb3
child 15662 e87729351c27
permissions -rw-r--r--
class: Method changed: #sourceChunkFromStream: use #position/#position: instead of #positionXBased
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     1
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     2
 COPYRIGHT.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     3
 This is a Manchester Goodie protected by copyright.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     4
 These conditions are imposed on the whole Goodie, and on any significant
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     5
 part of it which is separately transmitted or stored:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     6
	* You must ensure that every copy includes this notice, and that
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     7
	  source and author(s) of the material are acknowledged.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     8
	* These conditions must be imposed on anyone who receives a copy.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     9
	* The material shall not be used for commercial gain without the prior
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    10
	  written consent of the author(s).
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    11
 Further information on the copyright conditions may be obtained by
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
 sending electronic mail:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
	To: goodies-lib@cs.man.ac.uk
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
	Subject: copyright
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
 or by writing to The Smalltalk Goodies Library Manager, Dept of
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
 Computer Science, The University, Manchester M13 9PL, UK
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
 (C) Copyright 1992 University of Manchester
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
 For more information about the Manchester Goodies Library (from which 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
 this file was distributed) send e-mail:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
	To: goodies-lib@cs.man.ac.uk
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
	Subject: help 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
"
15134
84e886ef6b5f Packet change libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents: 15133
diff changeset
    24
"{ Package: 'stx:libbasic' }"
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    25
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    26
Dictionary subclass:#OrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    27
	instanceVariableNames:'order'
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    28
	classVariableNames:''
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    29
	poolDictionaries:''
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    30
	category:'Collections-Sequenceable'
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    31
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    32
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    33
!OrderedDictionary class methodsFor:'documentation'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    34
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    35
copyright
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    36
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    37
 COPYRIGHT.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
 This is a Manchester Goodie protected by copyright.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
 These conditions are imposed on the whole Goodie, and on any significant
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
 part of it which is separately transmitted or stored:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
	* You must ensure that every copy includes this notice, and that
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
	  source and author(s) of the material are acknowledged.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
	* These conditions must be imposed on anyone who receives a copy.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
	* The material shall not be used for commercial gain without the prior
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
	  written consent of the author(s).
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
 Further information on the copyright conditions may be obtained by
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
 sending electronic mail:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
	To: goodies-lib@cs.man.ac.uk
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
	Subject: copyright
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
 or by writing to The Smalltalk Goodies Library Manager, Dept of
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
 Computer Science, The University, Manchester M13 9PL, UK
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
 (C) Copyright 1992 University of Manchester
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
 For more information about the Manchester Goodies Library (from which 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
 this file was distributed) send e-mail:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
	To: goodies-lib@cs.man.ac.uk
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
	Subject: help 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
documentation
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    63
    I am a subclass of Dictionary whose elements (associations) are ordered in a
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    64
    similar fashion to OrderedCollection.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    65
    That is, while being filled via #at:put: messages (or similar Dictionary protocol),
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    66
    the order in which associations are added is remembered and accessable via the #atIndex:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
    or #order messages.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    68
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    69
    I have one instance variable:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    70
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    71
    order <OrderedCollection>       Ordered collection of keys reflecting the order of
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    72
                                    associations in the dictionary.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    73
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    74
    [author:]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    75
        Ifor Wyn Williams <ifor@uk.ac.man.cs>
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    76
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    77
    [see also:]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    78
        OrderedCollection Dictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    79
        OrderedSet
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    80
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    81
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    82
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    83
examples
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
    |o|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    87
    o := OrderedDictionary new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
    o at:'one'   put:1.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    90
    o at:'two'   put:2.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    91
    o at:'three' put:3.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    92
    o at:'four'  put:4.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    93
    o at:'five'  put:5.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
    o at:'six'   put:6.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    95
    o at:'seven' put:7.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    96
    o at:'eight' put:8.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    97
    o at:'nine'  put:9.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    98
    o at:'zero'  put:0.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    99
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
    o at:'eight'.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   101
    o atIndex:1.   
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
    o atIndex:5.    
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
    o atIndex:10.  
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
    o from:3 to:6 do:[:each | Transcript showCR:each ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   107
    o collect:[:eachAssoc | eachAssoc key -> eachAssoc value squared]. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   108
    o associations.  
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   109
    o order.         
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   110
    o reverse.    
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   111
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   112
    o atIndex:1.  
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   113
    o atIndex:5. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   114
    o atIndex:10. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   115
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   118
info
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   119
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   120
	NAME            OrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   121
	AUTHOR          Ifor Wyn Williams <ifor@uk.ac.man.cs>
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   122
	CONTRIBUTOR     Ifor Wyn Williams <ifor@uk.ac.man.cs>
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   123
	FUNCTION        An ordered dictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   124
	ST-VERSIONS     2.3-5, 4.0
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   125
	PREREQUISITES   
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
	CONFLICTS       
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
	DISTRIBUTION    global
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
	VERSION         1.2
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   129
	DATE            28.3.90
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
	SUMMARY         A dictionary that behaves like a SequencableCollection
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
			(except that associations cannot be removed). 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   134
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   135
!OrderedDictionary class methodsFor:'instance creation'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   136
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   137
new
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   138
        ^ super new initializeOrder
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   139
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   140
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   141
new: anInteger
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
        ^(super new: anInteger) initializeOrder
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   143
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   145
!OrderedDictionary methodsFor:'accessing'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   146
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   147
after: anAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   148
    "Return the association after anAssociation in the order. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   149
     If anAssociation is the last association in the order, return nil. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   150
     If anAssociation is not found, invoke an error notifier"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   151
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   152
    1 to: order size - 1 do: [:index | (self associationAt: (order at: index))
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   153
                    = anAssociation ifTrue: [^self associationAt: (order at: index + 1)]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   154
    (self associationAt: (order last))
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   155
            = anAssociation
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   156
            ifTrue: [^nil]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   157
            ifFalse: [^self error: 'not found']
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   158
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   159
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   160
associations
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   161
    "Return an OrderedCollection containing the receiver's associations."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   162
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   163
    ^ order collect: [:key | self associationAt: key ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   164
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   165
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   166
at:aKey ifAbsentPut:valueBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   167
    |val|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   168
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   169
    ^ self at:aKey ifAbsent:[ self at:aKey put:valueBlock value ]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   170
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   171
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   172
at: key put: anObject 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   173
    "Set the value at key to be anObject. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   174
     If key is not found, create a new entry for key and set is value to anObject. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   175
     If key is already present, the order remains unchanged.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   176
     Return anObject."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   177
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   178
    "/ claus: super can check this much faster ...
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   179
    "/ (super includesKey:key)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   180
    "/ ... but that leads to trouble in add:* methods. (sigh)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   181
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   182
    (order includes: key) ifFalse: [order add: key].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   183
    ^ super at: key put: anObject
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   184
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   185
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   186
atAll:indexCollection put: anObject 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   187
    "Put anObject into the value field of every association specified by indexCollection,
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   188
     which is typically an interval."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   189
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   190
    indexCollection do:[:index | self at:(order at: index) put:anObject]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   191
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   192
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   193
atAllPut: anObject 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   194
    "Put anObject into the value field of every association in the dictionary"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   195
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   196
    order do: [:key | self at: key put: anObject]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   197
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   198
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   199
atIndex:index
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   200
    "return an element at a given index"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   201
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   202
    ^ self at:(order at:index)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   203
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   204
    "Created: 28.9.1995 / 13:49:39 / stefan"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   205
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   206
15534
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   207
atIndex:index ifAbsent:aBlock
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   208
    "return an element at a given index"
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   209
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   210
    ^ self at:(order at:index ifAbsent:[^ aBlock value])
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   211
!
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   212
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   213
atIndex:index put:anAssociation
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   214
    "put an association to a given index. remove the old associatioan at this index"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   215
    |key|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   216
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   217
    key := anAssociation key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   218
    (super includesKey:key) ifTrue:[
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   219
        ^ self error:'duplicate key'.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   220
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   221
    super removeKey:(order at:index) ifAbsent:[].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   222
    order at:index put:key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   223
    ^ super add:anAssociation.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   224
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   225
    "Created: 28.9.1995 / 16:30:15 / stefan"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   226
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   227
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   228
before: anAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   229
    "Return the association before anAssociation in the order. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   230
     If anAssociation is the first association in the order, return nil. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   231
     If anAssociation is not found, invoke an error notifier"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   232
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   233
    2 to:order size do:[:index | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   234
        (self associationAt:(order at:index)) = anAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   235
            ifTrue:[ ^ self associationAt:(order at:index - 1)] 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   236
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   237
    (self associationAt:order first) = anAssociation ifTrue: [^ nil].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   238
    ^ self error: 'not found'
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   239
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   240
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   241
first
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   242
    "Return the first association of the receiver.  
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   243
     Provide an error notification if the receiver contains no elements."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   244
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   245
    ^ self associationAt: (order first)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   246
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   247
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   248
        OrderedDictionary new first
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   249
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   250
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   251
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   252
keyAt:index
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   253
    "get the key at the given index"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   254
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   255
    ^ order at:index.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   256
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   257
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   258
     |s|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   259
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   260
     s := OrderedDictionary new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   261
     s at:#a put:'aaa'; at:#b put:'bbb'; at:#c put:'ccc'; at:#d put:'ddd'; at:#a put:'aaaa'.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   262
     s keyAt:2    
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   263
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   264
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   265
    "Created: 29.9.1995 / 11:32:07 / stefan"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   266
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   267
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   268
keys
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   269
    "Return a OrderedCollection containing the receiver's keys."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   270
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   271
    ^ order copy.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   272
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   273
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   274
     |s|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   275
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   276
     s := OrderedDictionary new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   277
     s at:#a put:'aaa'; at:#b put:'bbb'; at:#c put:'ccc'; at:#d put:'ddd'; at:#a put:'aaaa'.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   278
     s keys       
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   279
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   280
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   281
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   282
last
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   283
    "Return the last association of the receiver. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   284
     Provide an error notification if the receiver contains no elements."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   285
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   286
    ^ self associationAt: (order last)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   287
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   288
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   289
        OrderedDictionary new last
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   290
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   291
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   292
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   293
order
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   294
    "returns the keys in the order of their appearance"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   295
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   296
    ^ order
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   297
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   298
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   299
     |s|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   300
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   301
     s := OrderedDictionary new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   302
     s at:#a put:'aaa'; at:#b put:'bbb'; at:#c put:'ccc'; at:#d put:'ddd'; at:#a put:'aaaa'.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   303
     s order    
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   304
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   305
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   306
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   307
valueAt:index
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   308
    "get the value at the given index"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   309
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   310
    ^ super at:(order at:index).
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   311
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   312
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   313
     |s|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   314
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   315
     s := OrderedDictionary new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   316
     s at:#a put:'aaa'; at:#b put:'bbb'; at:#c put:'ccc'; at:#d put:'ddd'; at:#a put:'aaaa'.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   317
     s valueAt:2       
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   318
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   319
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   320
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   321
values
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   322
    "Return a OrderedCollection containing the receiver's values."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   323
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   324
    ^ order collect: [:key | (self at: key) ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   325
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   326
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   327
!OrderedDictionary methodsFor:'adding'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   328
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   329
add: anAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   330
    "add anAssociation to the dictionary. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   331
     If anAssociation is already present in the dictionary,
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   332
     the order will not be changed. (See also: #addLast:)"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   333
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   334
    | key |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   335
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   336
    key := anAssociation key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   337
    (super includesKey: key)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   338
            ifFalse: [order add: key].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   339
    ^ super add: anAssociation
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   340
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   341
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   342
add: anAssociation after: oldAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   343
    "Add the argument, anAssociation, as an element of the dictionary. Put it 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   344
    in the position just succeeding oldAssociation. Return anAssociation."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   345
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   346
    | index |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   347
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   348
    index := self indexOfAssociation: oldAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   349
                            ifAbsent: [self error: 'association not found'].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   350
    self removeFromOrder: anAssociation key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   351
    order add: anAssociation key after: (order at: index).
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   352
    super add: anAssociation.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   353
    ^ anAssociation
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   354
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   355
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   356
add: anAssociation before: oldAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   357
    "Add the argument, anAssociation, as an element of the dictionary. Put it 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   358
    in the position just preceding oldAssociation. Return anAssociation."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   359
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   360
    | index |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   361
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   362
    index := self indexOfAssociation: oldAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   363
                            ifAbsent: [self error: 'association not found'].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   364
    self removeFromOrder: anAssociation key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   365
    order add: anAssociation key before: (order at: index).
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   366
    super add: anAssociation.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   367
    ^ anAssociation
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   368
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   369
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   370
add: anAssociation beforeIndex: spot 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   371
    "Add the argument, anAssociation, as an element of the receiver.  Put it
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   372
    in the position just preceding the indexed position spot.  Return newObject."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   373
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   374
    self removeFromOrder: anAssociation key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   375
    order add: anAssociation key beforeIndex: spot.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   376
    ^ super add: anAssociation
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   377
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   378
    "Modified: 28.9.1995 / 14:06:53 / stefan"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   379
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   380
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   381
addAll:aCollectionOfAssociations 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   382
    "Add each element of anOrderedCollectionOfAssociations at my end. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   383
     We expect the argument to enumerate associations with #reverseDo:; 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   384
     if it does not (i.e. it is another OD or a dictionary), use #addAllAssociationsFirst:.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   385
     Returns the argument, aCollectionOfAssociations (sigh)."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   386
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   387
    self addAllLast:aCollectionOfAssociations.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   388
    ^ aCollectionOfAssociations
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   389
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   390
    "Modified: 28.2.1997 / 15:51:23 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   391
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   392
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   393
addAllAssociations:aDictionaryOrOrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   394
    "Add each association of aDictionaryOrOrderedDictionary to my end.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   395
     We expect the argument to respond to #associationsDo:."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   396
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   397
    self addAllAssociationsLast:aDictionaryOrOrderedDictionary.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   398
    ^ aDictionaryOrOrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   399
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   400
    "Created: 28.2.1997 / 15:52:02 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   401
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   402
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   403
addAllAssociationsFirst:aDictionaryOrOrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   404
    "Add each association of aDictionaryOrOrderedDictionary at the beginning of the 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   405
     receiver. We expect the argument to respond to #associationsReverseDo:."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   406
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   407
    aDictionaryOrOrderedDictionary associationsReverseDo:[:each | self addFirst:each].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   408
    ^ aDictionaryOrOrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   409
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   410
    "Created: 28.2.1997 / 15:50:14 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   411
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   412
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   413
addAllAssociationsLast:aDictionaryOrOrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   414
    "Add each association of aDictionaryOrOrderedDictionary at the end of the 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   415
     receiver. We expect the argument to respond to #associationsDo:."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   416
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   417
    aDictionaryOrOrderedDictionary associationsDo:[:each | self addLast:each].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   418
    ^ aDictionaryOrOrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   419
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   420
    "Created: 28.2.1997 / 15:48:37 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   421
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   422
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   423
addFirst: anAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   424
    "Add anAssociation to the beginning of the receiver."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   425
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   426
    self removeFromOrder: anAssociation key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   427
    order addFirst: anAssociation key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   428
    ^ super add: anAssociation.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   429
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   430
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   431
addLast: anAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   432
    "Add anAssociation to the end of the receiver.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   433
     If anAssociation is already present in the dictionary,
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   434
     it will be moved to the end. (See also: #add:)"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   435
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   436
    self removeFromOrder: anAssociation key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   437
    order add: anAssociation key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   438
    ^ super add: anAssociation.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   439
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   440
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   441
!OrderedDictionary methodsFor:'copying'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   442
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   443
copyEmpty
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   444
    "Return a copy of the receiver that contains no elements."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   445
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   446
    ^ (self class) new: 10
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   447
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   448
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   449
copyFrom: startIndex to: endIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   450
    "Return a copy of the receiver that contains elements from 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   451
     position startIndex to endIndex."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   452
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   453
    | newDict |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   454
    endIndex < startIndex ifTrue: [^self copyEmpty].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   455
    (startIndex < 1 or: [endIndex > order size])
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   456
            ifTrue: [^ self errorNotFound].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   457
    newDict := self copyEmpty: endIndex - startIndex + 1.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   458
    startIndex to: endIndex do: [:index | newDict add: (self associationAt: (order at: index))].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   459
    ^ newDict
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   460
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   461
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   462
copyWith: anAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   463
    "Return a copy of the dictionary that is 1 bigger than the receiver and 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   464
     includes the argument, anAssociation, at the end."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   465
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   466
    | newDict |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   467
    newDict := self copy.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   468
    newDict add: anAssociation.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   469
    ^ newDict
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   470
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   471
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   472
copyWithout: anAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   473
    "Return a copy of the dictionary that is 1 smaller than the receiver and 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   474
     does not include the argument, anAssociation
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   475
     No error is reported, if elementToSkip is not in the collection."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   476
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   477
    | newDict |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   478
    newDict := self class new:order size - 1.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   479
    self associationsDo: [:assoc | anAssociation = assoc ifFalse: [newDict add: assoc]]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   480
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   481
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   482
postCopy
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   483
    "have to copy the order too"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   484
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   485
    super postCopy.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   486
    order := order copy
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   487
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   488
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   489
!OrderedDictionary methodsFor:'enumerating'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   490
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   491
associationsCollect: aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   492
    "Evaluate aBlock with each of the associations of the dictionary as argument,
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   493
     and return a new (ordered) collection with the results"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   494
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   495
    ^ order collect:[:key | (aBlock value: (self associationAt:key))].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   496
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   497
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   498
associationsDo: aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   499
    "Evaluate aBlock for each of the dictionary's associations."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   500
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   501
    order do: [:key | aBlock value: (self associationAt: key)]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   502
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   503
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   504
associationsDo: aBlock from: firstIndex to: secondIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   505
    "Evaluate aBlock with each of the dictionary's associations from index 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   506
    firstIndex to index secondIndex as the argument."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   507
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   508
    firstIndex to: secondIndex do: [:index | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   509
        aBlock value: (self associationAt: (order at: index))
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   510
    ]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   511
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   512
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   513
associationsReverseDo: aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   514
    "Evaluate aBlock for each of the dictionary's associations in reverse order."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   515
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   516
    order reverseDo:[:key | aBlock value:(self associationAt:key)]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   517
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   518
    "Created: 28.2.1997 / 15:52:31 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   519
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   520
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   521
associationsSelect:aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   522
    "Evaluate aBlock with each of the dictionary's associations as the argument.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   523
     Collect into a new OrderedDictionary only those associations for which 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   524
     aBlock evaluates to true. Return the new OrderedDictionary."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   525
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   526
    |newDict|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   527
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   528
    newDict := self class new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   529
    order do:[:key | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   530
        |assoc|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   531
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   532
        assoc := self associationAt:key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   533
        (aBlock value:assoc) ifTrue: [
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   534
            newDict add:assoc
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   535
        ]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   536
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   537
    ^ newDict
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   538
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   539
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   540
collect: aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   541
    "Evaluate aBlock with each of the values of the dictionary as argument,
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   542
     and return a new (ordered) collection with the results"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   543
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   544
    ^ order collect:[:key | (aBlock value: (self at:key))].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   545
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   546
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   547
do: aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   548
    "Evaluate aBlock for each of the dictionary's values."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   549
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   550
    order do: [:key | aBlock value: (self at: key)]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   551
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   552
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   553
do: aBlock from: firstIndex to: lastIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   554
    "Evaluate aBlock with each of the dictionary's associations from index 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   555
    firstIndex to index secondIndex as the argument."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   556
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   557
    self from:firstIndex to:lastIndex do:aBlock.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   558
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   559
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   560
findFirst:aBlock ifNone:exceptionalValue
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   561
    "Return the index of the first association in the dictionary for which aBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   562
    evaluates as true. If the block does not evaluate to true, return exceptionalValue"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   563
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   564
    1 to:order size do:[:index | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   565
        (aBlock value:(self associationAt:(order at:index))) ifTrue: [^ index]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   566
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   567
    ^ exceptionalValue value
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   568
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   569
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   570
findLast:aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   571
    "Return the index of the last association in the dictionary for which aBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   572
     evaluates as true. If the block does not evaluate to true, return 0"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   573
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   574
    order size to:1 by:-1 do: [:index | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   575
        (aBlock value:(self associationAt:(order at:index))) ifTrue: [^ index]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   576
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   577
    ^ 0
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   578
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   579
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   580
findLast:aBlock startingAt:startIndex
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   581
    "Return the index of the last association in the dictionary for which aBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   582
     evaluates as true. Start the search at startIndex.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   583
     If the block does not evaluate to true, return 0"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   584
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   585
    startIndex to:1 by:-1 do: [:index | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   586
        (aBlock value:(self associationAt:(order at:index))) ifTrue: [^ index]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   587
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   588
    ^ 0
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   589
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   590
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   591
findLast:aBlock startingAt:startIndex endingAt:endIndex
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   592
    "Return the index of the last association in the dictionary for which aBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   593
     evaluates as true. Start the search at startIndex.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   594
     End the search at endIndex or when an element is found.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   595
     If the block does not evaluate to true, return 0"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   596
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   597
    startIndex to:endIndex by:-1 do: [:index | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   598
        (aBlock value:(self associationAt:(order at:index))) ifTrue: [^ index]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   599
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   600
    ^ 0
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   601
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   602
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   603
from:firstIndex to:lastIndex do: aBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   604
    "Evaluate aBlock with each of the dictionary's associations from index 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   605
    firstIndex to index secondIndex as the argument."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   606
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   607
    order from:firstIndex to:lastIndex do:[:key |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   608
        aBlock value: (self at:key)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   609
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   610
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   611
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   612
keysAndValuesDo:aBlock
15451
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   613
    "perform the block for all keys and values in the collection.
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   614
     Enumerate them in the order by which they were added.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   615
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   616
     See also:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   617
        #associationsDo:   (which passes key-value associations)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   618
        #keysAndValuesDo:  (which passes keys & values separately)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   619
        #do:               (which passes values only)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   620
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   621
     WARNING: do not add/remove elements while iterating over the receiver.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   622
              Iterate over a copy to do this."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   623
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   624
    order do: [:key | aBlock value:key value:(self at: key)].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   625
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   626
    "Modified: / 26.6.1999 / 10:55:30 / ps"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   627
    "Created: / 15.10.1999 / 16:49:31 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   628
    "Modified: / 15.10.1999 / 16:53:50 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   629
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   630
15451
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   631
keysAndValuesReverseDo:aBlock
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   632
    "perform the block for all keys and values in the collection.
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   633
     Enumerate them in the reverse order from which they were added.
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   634
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   635
     See also:
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   636
        #associationsDo:   (which passes key-value associations)
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   637
        #keysAndValuesDo:  (which passes keys & values separately)
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   638
        #do:               (which passes values only)
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   639
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   640
     WARNING: do not add/remove elements while iterating over the receiver.
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   641
              Iterate over a copy to do this."
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   642
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   643
    order reverseDo: [:key | aBlock value:key value:(self at: key)].
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   644
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   645
    "Modified: / 26.6.1999 / 10:55:30 / ps"
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   646
    "Created: / 15.10.1999 / 16:49:31 / cg"
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   647
    "Modified: / 15.10.1999 / 16:53:50 / cg"
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   648
!
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   649
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   650
keysDo:aBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   651
    "evaluate the argument, aBlock for every key in the collection.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   652
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   653
     See also:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   654
        #associationsDo:   (which passes key-value associations)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   655
        #keysAndValuesDo:  (which passes keys & values separately)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   656
        #do:               (which passes values only)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   657
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   658
     WARNING: do not add/remove elements while iterating over the receiver.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   659
              Iterate over a copy to do this."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   660
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   661
    order do:[:key | aBlock value:key].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   662
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   663
    "Created: / 26-06-1999 / 10:53:00 / ps"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   664
    "Modified: / 24-08-2010 / 10:14:06 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   665
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   666
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   667
reverseDo: aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   668
    "Evaluate aBlock with each of the dictionary's associations as the argument,
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   669
    starting with the last element and taking each in sequence up to the first."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   670
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   671
    order size to:1 by:-1 do: [:index | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   672
        aBlock value:(self associationAt:(order at:index))
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   673
    ]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   674
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   675
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   676
reversed
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   677
    "Return with a new OrderedDictionary with its associations in reverse order."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   678
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   679
    | newDict|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   680
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   681
    newDict := self class new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   682
    order size to:1 by:-1 do:[:index | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   683
        |key|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   684
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   685
        key := order at:index.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   686
        newDict at:key put:(self at:key)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   687
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   688
    ^ newDict
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   689
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   690
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   691
select:aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   692
    "Evaluate aBlock with each of the dictionary's values as the argument.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   693
     Collect into a new OrderedDictionary only those associations for which 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   694
     aBlock evaluated to true. Return the new OrderedDictionary."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   695
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   696
    |newColl|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   697
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   698
    newColl := self species new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   699
    order do:[:key | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   700
        |assoc|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   701
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   702
        assoc := self associationAt:key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   703
        (aBlock value:(assoc value)) ifTrue: [
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   704
            newColl add:assoc
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   705
        ]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   706
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   707
    ^ newColl
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   708
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   709
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   710
!OrderedDictionary methodsFor:'initialization'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   711
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   712
initializeOrder
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   713
        order := OrderedCollection new
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   714
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   715
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   716
!OrderedDictionary methodsFor:'private'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   717
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   718
removeFromOrder: aKey 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   719
	order remove: aKey ifAbsent: []
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   720
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   721
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   722
!OrderedDictionary methodsFor:'queries'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   723
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   724
occurrencesOfKey: aKey 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   725
    "Return how many of the dictionary's keys are equal to aKey."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   726
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   727
    ^ order count:[:eachKey | aKey = eachKey]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   728
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   729
"/ cg: the original code was not very smalltalkish:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   730
"/
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   731
"/    | count |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   732
"/
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   733
"/    count := 0.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   734
"/    1 to: self size do: [:index | aKey = (order at: index) ifTrue: [count := count + 1]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   735
"/    ^count
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   736
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   737
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   738
occurrencesOfValue: aValue 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   739
    "Return how many of the dictionary's values are equal to aValue."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   740
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   741
    ^ order count:[:eachKey | aValue = (self at:eachKey)]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   742
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   743
"/ cg: the original code was not very smalltalkish:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   744
"/
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   745
"/    | count |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   746
"/
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   747
"/    count := 0.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   748
"/    1 to: self size do: [:index | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   749
"/        aValue = (self at: (order at: index)) ifTrue: [count := count + 1]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   750
"/    ^count
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   751
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   752
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   753
!OrderedDictionary methodsFor:'removing'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   754
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   755
removeFirst
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   756
    |key|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   757
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   758
    order size == 0 ifTrue:[
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   759
	"error if collection is empty"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   760
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   761
	^ self emptyCollectionError.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   762
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   763
    key := order removeFirst.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   764
    ^ super removeKey:key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   765
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   766
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   767
removeFromIndex:fromIndex toIndex:toIndex
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   768
    "Returns the receiver."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   769
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   770
    | keys |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   771
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   772
    keys := order copyFrom:fromIndex to:toIndex.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   773
    order removeFromIndex:fromIndex toIndex:toIndex.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   774
    keys do:[ :key |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   775
        super removeKey:key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   776
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   777
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   778
    "Created: 28.9.1995 / 12:04:33 / stefan"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   779
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   780
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   781
removeKey:aKey
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   782
    order remove:aKey.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   783
    ^ super removeKey:aKey.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   784
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   785
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   786
removeKey:aKey ifAbsent:aBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   787
    order remove:aKey ifAbsent:[].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   788
    ^ super removeKey:aKey ifAbsent:aBlock.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   789
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   790
    "Created: / 31-01-2011 / 22:04:01 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   791
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   792
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   793
removeLast
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   794
    |key|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   795
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   796
    order size == 0 ifTrue:[
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   797
	"error if collection is empty"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   798
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   799
	^ self emptyCollectionError.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   800
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   801
    key := order removeLast.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   802
    ^ super removeKey:key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   803
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   804
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   805
!OrderedDictionary methodsFor:'searching'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   806
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   807
identityIndexOfAssociation: anAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   808
    "Return the identity index of anAssociation within the receiver. If the receiver
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   809
    does not contain anAssociation, return 0."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   810
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   811
    ^ self identityIndexOfAssociation: anAssociation ifAbsent: [0]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   812
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   813
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   814
identityIndexOfAssociation: anAssociation ifAbsent: exceptionBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   815
    "Return the identity index of anAssociation within the receiver. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   816
     If the receiver does not contain anAssociation, 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   817
     return the result of evaluating the exceptionBlock."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   818
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   819
    "/ as ST/X's dictionaries do not store the associations 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   820
    "/ (instead, they store the keys and values in separate collections)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   821
    "/ this will not work. You have to think about it and rewrite your code.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   822
    self error:'this does not work in Smalltalk/X'.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   823
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   824
    order keysAndValuesDo:[:i :key |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   825
        (self associationAt:key) == anAssociation ifTrue: [^i]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   826
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   827
    ^exceptionBlock value
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   828
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   829
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   830
identityIndexOfKey: aKey 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   831
    "Return the identity index of aKey within the receiver. If the receiver 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   832
    does not contain aKey, return 0."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   833
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   834
    ^self identityIndexOfKey: aKey ifAbsent: [0]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   835
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   836
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   837
identityIndexOfKey: aKey ifAbsent: exceptionBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   838
    "Return the identity index of aKey within the receiver.  If the receiver does
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   839
    not contain aKey, return the result of evaluating the exceptionBlock."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   840
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   841
    ^ order identityIndexOf:aKey ifAbsent:exceptionBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   842
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   843
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   844
identityIndexOfValue: aValue 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   845
    "Return the identity index of aValue within the receiver. If the receiver 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   846
    does not contain aValue, return 0."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   847
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   848
    ^self identityIndexOfValue: aValue ifAbsent: [0]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   849
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   850
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   851
identityIndexOfValue: aValue ifAbsent: exceptionBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   852
    "Return the identity index of aValue within the receiver. If the receiver 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   853
    does not contain aValue, return the result of evaluating the exceptionBlock."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   854
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   855
    order keysAndValuesDo:[:i :key | (self at:key) == aValue ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   856
    ^exceptionBlock value
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   857
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   858
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   859
indexOfAssociation: anAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   860
    "Return the index of anAssociation within the receiver. If the receiver does
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   861
    not contain anAssociation, return 0."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   862
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   863
    ^self indexOfAssociation: anAssociation ifAbsent: [0]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   864
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   865
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   866
indexOfAssociation: anAssociation ifAbsent: exceptionBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   867
    "Return the identity index of anAssociation within the receiver. If the receiver
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   868
    does not contain anAssociation, return the result of evaluating the exceptionBlock."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   869
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   870
    order keysAndValuesDo:[:i :key | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   871
        (self associationAt:key) = anAssociation ifTrue: [^i]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   872
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   873
    ^exceptionBlock value
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   874
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   875
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   876
indexOfKey: aKey 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   877
    "Return the index of aKey within the receiver. If the receiver does 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   878
     not contain aKey, return 0."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   879
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   880
    ^self indexOfKey: aKey ifAbsent: [0]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   881
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   882
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   883
indexOfKey: aKey ifAbsent: exceptionBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   884
    "Return the identity index of aKey within the receiver.  If the receiver does
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   885
     not contain aKey, return the result of evaluating the exceptionBlock."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   886
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   887
    ^ order indexOf:aKey ifAbsent:exceptionBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   888
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   889
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   890
indexOfValue: aValue 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   891
    "Return the index of aValue within the receiver. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   892
     If the receiver does not contain aValue, return 0."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   893
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   894
    ^self indexOfValue: aValue ifAbsent: [0]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   895
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   896
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   897
indexOfValue: aValue ifAbsent: exceptionBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   898
    "Return the identity index of aValue within the receiver. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   899
     If the receiver does not contain aValue, return the result of evaluating the exceptionBlock."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   900
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   901
    order keysAndValuesDo:[:i :key | (self at:key) = aValue ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   902
    ^ exceptionBlock value
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   903
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   904
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   905
nextIndexOfAssociation: aAssociation from: startIndex to: stopIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   906
    "Return the next index of aAssociation within the receiver between startIndex
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   907
     and stopIndex. If the receiver does not contain aAssociation, return nil"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   908
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   909
    startIndex to: stopIndex do: [:i | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   910
        (self associationAt: (order at: i)) = aAssociation ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   911
    ^nil
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   912
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   913
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   914
nextIndexOfKey: aKey from: startIndex to: stopIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   915
    "Return the next index of aKey within the receiver between startIndex and 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   916
     stopIndex.  If the receiver does not contain aKey, return nil"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   917
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   918
    startIndex to: stopIndex do: [:i | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   919
        (order at: i) = aKey ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   920
    ^nil
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   921
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   922
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   923
nextIndexOfValue: aValue from: startIndex to: stopIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   924
    "Return the next index of aValue within the receiver between startIndex and
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   925
     stopIndex. If the receiver does not contain aValue, return nil"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   926
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   927
    startIndex to: stopIndex do: [:i | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   928
        (self at: (order at: i)) = aValue ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   929
    ^nil
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   930
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   931
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   932
prevIndexOfAssociation: aAssociation from: startIndex to: stopIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   933
    "Return the previous index of aAssociation within the receiver between 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   934
     startIndex  and stopIndex working backwards through the receiver. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   935
     If the receiver does not contain aAssociation, return nil"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   936
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   937
    startIndex to: stopIndex by: -1
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   938
            do: [:i | (self associationAt: (order at: i)) = aAssociation ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   939
    ^nil
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   940
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   941
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   942
prevIndexOfKey: aKey from: startIndex to: stopIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   943
    "Return the previous index of aKey within the receiver between startIndex and
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   944
     stopIndex working backwards through the receiver. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   945
     If the receiver does not contain aKey, return nil"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   946
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   947
    startIndex to: stopIndex by: -1
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   948
            do: [:i | (order at: i) = aKey ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   949
    ^nil
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   950
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   951
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   952
prevIndexOfValue: aValue from: startIndex to: stopIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   953
    "Return the previous index of aValue within the receiver between startIndex
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   954
     and stopIndex working backwards through the receiver. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   955
     If the receiver does not contain aValue, return nil"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   956
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   957
    startIndex to: stopIndex by: -1
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   958
            do: [:i | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   959
                (self at: (order at: i)) = aValue ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   960
    ^nil
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   961
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   962
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   963
!OrderedDictionary methodsFor:'sorting & reordering'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   964
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   965
reverse
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   966
    "Destructively reverse my order.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   967
     WARNING: this is a destructive operation, which modifies the receiver.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   968
              Please use reversed (with a d) for a functional version."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   969
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   970
    order reverse
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   971
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   972
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   973
sort
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   974
    "Destructively sort my order.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   975
     WARNING: this is a destructive operation, which modifies the receiver"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   976
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   977
    order sort
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   978
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   979
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   980
sort:aSortBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   981
    "Destructively sort my order.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   982
     WARNING: this is a destructive operation, which modifies the receiver"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   983
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   984
    order sort:aSortBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   985
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   986
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   987
!OrderedDictionary class methodsFor:'documentation'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   988
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   989
version
15534
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   990
    ^ '$Header: /cvs/stx/stx/libbasic/OrderedDictionary.st,v 1.42 2013-07-22 08:25:33 stefan Exp $'
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   991
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   992
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   993
version_CVS
15534
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   994
    ^ '$Header: /cvs/stx/stx/libbasic/OrderedDictionary.st,v 1.42 2013-07-22 08:25:33 stefan Exp $'
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   995
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   996