OrderedDictionary.st
author Claus Gittinger <cg@exept.de>
Fri, 08 Nov 1996 22:16:44 +0100
changeset 457 c862c91716b6
parent 120 fa3590433788
child 497 1337168140ae
permissions -rw-r--r--
packages
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
457
c862c91716b6 packages
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
     1
"{ Package: 'goodies/Collections-OrderedDictionary' }"
c862c91716b6 packages
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
     2
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
     3
"       NAME            OrderedDictionary
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
     4
	AUTHOR          Ifor Wyn Williams <ifor@uk.ac.man.cs>
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
     5
	CONTRIBUTOR     Ifor Wyn Williams <ifor@uk.ac.man.cs>
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
     6
	FUNCTION        An ordered dictionary
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
     7
	ST-VERSIONS     2.3-5, 4.0
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
     8
	PREREQUISITES   
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
     9
	CONFLICTS       
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    10
	DISTRIBUTION    global
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    11
	VERSION         1.2
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    12
	DATE            28.3.90
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    13
SUMMARY         A dictionary that behaves like a SequencableCollection
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    14
(except that associations cannot be removed). 
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    15
"!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    16
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    17
'From Smalltalk-80, Version 2.4 of 28 January 1989 on 28 March 1990 at 11:32:50 am'!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    18
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    19
Dictionary subclass: #OrderedDictionary
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    20
	instanceVariableNames: 'order '
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    21
	classVariableNames: ''
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    22
	poolDictionaries: ''
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    23
	category: 'Collections-Sequenceable'
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    24
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    25
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    26
OrderedDictionary comment:
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    27
'I am a subclass of Dictionary whose elements (associations) are ordered in a
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    28
 similar fashion to OrderedCollection.
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    29
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    30
I have one instance variable:
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    31
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    32
order <OrderedCollection>       Ordered collection of keys reflecting the order of
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    33
				associations in the dictionary. '
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    34
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    35
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    36
!OrderedDictionary methodsFor: 'adding'!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    37
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    38
add: anAssociation 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    39
	"add anAssociation to the dictionary"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    40
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    41
	| key |
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    42
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    43
	key := anAssociation key.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    44
	(super includesKey: key)
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    45
		ifFalse: [order add: key].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    46
	super add: anAssociation
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    47
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    48
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    49
add: anAssociation after: oldAssociation 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    50
	"Add the argument, anAssociation, as an element of the dictionary. Put it 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    51
	in the position just succeeding oldAssociation. Return anAssociation."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    52
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    53
	| index |
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    54
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    55
	index := self indexOfAssociation: oldAssociation 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    56
				ifAbsent: [self error: 'association not found'].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    57
	self removeFromOrder: anAssociation key.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    58
	order add: anAssociation key after: (order at: index).
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    59
	super add: anAssociation.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    60
	^ anAssociation
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    61
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    63
add: anAssociation before: oldAssociation 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    64
	"Add the argument, anAssociation, as an element of the dictionary. Put it 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    65
	in the position just preceding oldAssociation. Return anAssociation."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    66
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    67
	| index |
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    68
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    69
	index := self indexOfAssociation: oldAssociation 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    70
				ifAbsent: [self error: 'association not found'].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    71
	self removeFromOrder: anAssociation key.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    72
	order add: anAssociation key before: (order at: index).
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    73
	super add: anAssociation.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    74
	^ anAssociation
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    75
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    76
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    77
add: anAssociation beforeIndex: spot 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    78
	"Add the argument, anAssociation, as an element of the receiver.  Put it
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    79
	in the position just preceding the indexed position spot.  Return newObject."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    80
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    81
	self removeFromOrder: anAssociation key.
120
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
    82
	order add: anAssociation key beforeIndex: spot.
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    83
	super add: anAssociation
120
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
    84
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
    85
    "Modified: 28.9.1995 / 14:06:53 / stefan"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    86
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    87
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    88
addAll: aCollectionOfAssociations 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    89
	"Add each element of aCollectionOfAssociations at my end."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    90
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    91
	aCollectionOfAssociations associationsDo: [:elems | self add: elems]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    92
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    93
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    94
addAllFirst: anOrderedCollectionOfAssociations 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    95
	"Add each element of anOrderedCollectionOfAssociations at the beginning 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    96
	 of the receiver."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    97
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
    98
	anOrderedCollectionOfAssociations reverseDo: [:each | self addFirst: each]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
    99
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   100
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   101
addAllLast: anOrderedCollectionOfAssociations 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   102
	"Add each element of anOrderedCollectionOfAssociations at the end of the 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   103
	receiver."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   104
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   105
	anOrderedCollectionOfAssociations do: [:each | self addLast: each]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   106
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   107
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   108
addFirst: anAssociation 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   109
	"Add anAssociation to the beginning of the receiver."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   110
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   111
	self removeFromOrder: anAssociation key.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   112
	order addFirst: anAssociation key.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   113
	super add: anAssociation.
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   114
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   115
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   116
addLast: anAssociation 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   117
	"Add anAssociation to the end of the receiver."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   118
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   119
	self removeFromOrder: anAssociation key.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   120
	order addLast: anAssociation key.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   121
	super add: anAssociation.
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   122
"/!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   123
"/
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   124
"/grow
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   125
"/        "Increase the number of elements in the dictionary"
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   126
"/
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   127
"/        ^ super grow
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   128
"/
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   129
"/        | newSelf |
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   130
"/
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   131
"/        newSelf := (self class) new: (self basicSize + self growSize).
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   132
"/        order do: [:key | newSelf add: (self associationAt: key)].
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   133
"/        self become: newSelf
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   134
"/
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   135
! !
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   136
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   137
!OrderedDictionary methodsFor: 'enumerating'!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   138
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   139
associationsDo: aBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   140
	"Evaluate aBlock for each of the dictionary's associations."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   141
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   142
	order do: [:key | aBlock value: (self associationAt: key)]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   143
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   144
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   145
associationsDo: aBlock from: firstIndex to: secondIndex 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   146
	"Evaluate aBlock with each of the dictionary's associations from index 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   147
	firstIndex to index secondIndex as the argument."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   148
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   149
	firstIndex to: secondIndex do: [:index | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   150
	    aBlock value: (self associationAt: (order at: index))
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   151
	]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   152
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   153
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   154
collect: aBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   155
	"Evaluate aBlock with each of the associations of the dictionary as the 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   156
	argument. The block should return an association which will be added to the
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   157
	new OrderedDictionary"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   158
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   159
	| newDict |
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   160
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   161
	newDict := OrderedDictionary new.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   162
	1 to: order size do: [:index | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   163
	    newDict add: (aBlock value: (self associationAt: (order at: index)))
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   164
	].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   165
	^ newDict
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   166
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   167
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   168
do: aBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   169
	"Evaluate aBlock for each of the dictionary's values."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   170
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   171
	order do: [:key | aBlock value: (self at: key)]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   172
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   173
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   174
do: aBlock from: firstIndex to: secondIndex 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   175
	"Evaluate aBlock with each of the dictionary's associations from index 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   176
	firstIndex to index secondIndex as the argument."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   177
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   178
	firstIndex to: secondIndex do: [:index | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   179
	    aBlock value: (self at: (order at: index))
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   180
	]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   181
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   182
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   183
findFirst: aBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   184
	"Return the index of the first association in the dictionary for which aBlock
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   185
	evaluates as true. If the block does not evaluate to true, return 0"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   186
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   187
	1 to: order size do: [:index | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   188
	    (aBlock value: (self associationAt: (order at: index))) ifTrue: [^index]
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   189
	].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   190
	^ 0
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   191
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   192
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   193
findLast: aBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   194
	"Return the index of the last association in the dictionary for which aBlock
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   195
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   196
	evaluates as true. If the block does not evaluate to true, return 0"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   197
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   198
	order size to: 1 by: -1 do: [:index | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   199
	    (aBlock value: (self associationAt: (order at: index))) ifTrue: [^index]
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   200
	].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   201
	^ 0
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   202
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   203
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   204
reverse
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   205
	"Return with a new OrderedDictionary with its associations in reverse order."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   206
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   207
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   208
	| newDict|
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   209
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   210
	newDict := OrderedDictionary new.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   211
	order size to: 1 by: -1 do:[:index | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   212
	    |key|
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   213
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   214
	    key := order at: index.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   215
	    newDict at: key put: (self at: key)
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   216
	].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   217
	^newDict
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   218
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   219
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   220
reverseDo: aBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   221
	"Evaluate aBlock with each of the dictionary's associations as the argument,
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   222
	starting with the last element and taking each in sequence up to the first."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   223
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   224
	order size to: 1 by: -1 do: [:index | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   225
	    aBlock value: (self associationAt: (order at: index))
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   226
	]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   227
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   228
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   229
select: aBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   230
	"Evaluate aBlock with each of the dictionary's associations as the argument.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   231
	Collect into a new OrderedDictionary only those associations for which 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   232
	aBlock evaluates to true. Return the new OrderedDictionary."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   233
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   234
	| newDict|
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   235
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   236
	newDict := OrderedDictionary new.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   237
	1 to: order size do:[:index | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   238
	    |key assoc|
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   239
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   240
	    key := order at: index.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   241
	    assoc := self associationAt: key.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   242
	    (aBlock value: assoc) ifTrue: [
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   243
		newDict add: assoc
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   244
	    ]
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   245
	].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   246
	^newDict
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   247
! !
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   248
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   249
!OrderedDictionary methodsFor: 'accessing index'!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   250
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   251
identityIndexOfAssociation: anAssociation 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   252
	"Return the identity index of anAssociation within the receiver. If the receiver
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   253
	does not contain anAssociation, return 0."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   254
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   255
	^self identityIndexOfAssociation: anAssociation ifAbsent: [0]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   256
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   257
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   258
identityIndexOfAssociation: anAssociation ifAbsent: exceptionBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   259
	"Return the identity index of anAssociation within the receiver. 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   260
	 If the receiver does not contain anAssociation, 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   261
	 return the result of evaluating the exceptionBlock."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   262
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   263
	1 to: order size do: [:i | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   264
	    (self associationAt: (order at: i)) == anAssociation ifTrue: [^i]
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   265
	].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   266
	^exceptionBlock value
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   267
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   268
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   269
identityIndexOfKey: aKey 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   270
	"Return the identity index of aKey within the receiver. If the receiver 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   271
	does not contain aKey, return 0."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   272
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   273
	^self identityIndexOfKey: aKey ifAbsent: [0]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   274
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   275
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   276
identityIndexOfKey: aKey ifAbsent: exceptionBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   277
	"Return the identity index of aKey within the receiver.  If the receiver does
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   278
	not contain aKey, return the result of evaluating the exceptionBlock."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   279
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   280
	1 to: order size do: [:i | (order at: i) == aKey ifTrue: [^i]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   281
	^exceptionBlock value
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   282
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   283
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   284
identityIndexOfValue: aValue 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   285
	"Return the identity index of aValue within the receiver. If the receiver 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   286
	does not contain aValue, return 0."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   287
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   288
	^self identityIndexOfValue: aValue ifAbsent: [0]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   289
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   290
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   291
identityIndexOfValue: aValue ifAbsent: exceptionBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   292
	"Return the identity index of aValue within the receiver. If the receiver 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   293
	does not contain aValue, return the result of evaluating the exceptionBlock."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   294
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   295
	1 to: order size do: [:i | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   296
	    (self at: (order at: i)) == aValue ifTrue: [^i]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   297
	^exceptionBlock value
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   298
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   299
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   300
indexOfAssociation: anAssociation 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   301
	"Return the index of anAssociation within the receiver. If the receiver does
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   302
	not contain anAssociation, return 0."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   303
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   304
	^self indexOfAssociation: anAssociation ifAbsent: [0]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   305
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   306
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   307
indexOfAssociation: anAssociation ifAbsent: exceptionBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   308
	"Return the identity index of anAssociation within the receiver. If the receiver
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   309
	does not contain anAssociation, return the result of evaluating the exceptionBlock."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   310
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   311
	1 to: order size do: [:i | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   312
	    (self associationAt: (order at: i)) = anAssociation ifTrue: [^i]
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   313
	].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   314
	^exceptionBlock value
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   315
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   316
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   317
indexOfKey: aKey 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   318
	"Return the index of aKey within the receiver. If the receiver does 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   319
	not contain aKey, return 0."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   320
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   321
	^self indexOfKey: aKey ifAbsent: [0]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   322
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   323
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   324
indexOfKey: aKey ifAbsent: exceptionBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   325
	"Return the identity index of aKey within the receiver.  If the receiver does
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   326
	not contain aKey, return the result of evaluating the exceptionBlock."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   327
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   328
	1 to: order size do: [:i | (order at: i) = aKey ifTrue: [^i]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   329
	^exceptionBlock value
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   330
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   331
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   332
indexOfValue: aValue 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   333
	"Return the index of aValue within the receiver. If the receiver does 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   334
	not contain aValue, return 0."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   335
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   336
	^self indexOfValue: aValue ifAbsent: [0]
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   337
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   338
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   339
indexOfValue: aValue ifAbsent: exceptionBlock 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   340
	"Return the identity index of aValue within the receiver. If the receiver 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   341
	does not contain aValue, return the result of evaluating the exceptionBlock."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   342
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   343
	1 to: order size do: [:i | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   344
	    (self at: (order at: i)) = aValue ifTrue: [^i]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   345
	^exceptionBlock value
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   346
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   347
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   348
nextIndexOfAssociation: aAssociation from: startIndex to: stopIndex 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   349
	"Return the next index of aAssociation within the receiver between startIndex
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   350
	and stopIndex. If the receiver does not contain aAssociation, return nil"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   351
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   352
	startIndex to: stopIndex do: [:i | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   353
	    (self associationAt: (order at: i)) = aAssociation ifTrue: [^i]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   354
	^nil
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   355
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   356
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   357
nextIndexOfKey: aKey from: startIndex to: stopIndex 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   358
	"Return the next index of aKey within the receiver between startIndex and 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   359
	stopIndex.  If the receiver does not contain aKey, return nil"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   360
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   361
	startIndex to: stopIndex do: [:i | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   362
	    (order at: i) = aKey ifTrue: [^i]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   363
	^nil
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   364
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   365
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   366
nextIndexOfValue: aValue from: startIndex to: stopIndex 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   367
	"Return the next index of aValue within the receiver between startIndex and
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   368
	stopIndex. If the receiver does not contain aValue, return nil"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   369
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   370
	startIndex to: stopIndex do: [:i | 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   371
	    (self at: (order at: i)) = aValue ifTrue: [^i]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   372
	^nil
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   373
!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   374
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   375
prevIndexOfAssociation: aAssociation from: startIndex to: stopIndex 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   376
	"Return the previous index of aAssociation within the receiver between 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   377
	startIndex 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   378
	and stopIndex working backwards through the receiver. If the receiver does 
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   379
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   380
	not contain aAssociation, return nil"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   381
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   382
	startIndex
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   383
		to: stopIndex
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   384
		by: -1
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   385
		do: [:i | (self associationAt: (order at: i))
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   386
				= aAssociation ifTrue: [^i]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   387
	^nil!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   388
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   389
prevIndexOfKey: aKey from: startIndex to: stopIndex 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   390
	"Return the previous index of aKey within the receiver between startIndex and
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   391
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   392
	stopIndex working backwards through the receiver. If the receiver does not 
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   393
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   394
	contain aKey, return nil"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   395
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   396
	startIndex
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   397
		to: stopIndex
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   398
		by: -1
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   399
		do: [:i | (order at: i)
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   400
				= aKey ifTrue: [^i]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   401
	^nil!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   402
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   403
prevIndexOfValue: aValue from: startIndex to: stopIndex 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   404
	"Return the previous index of aValue within the receiver between startIndex
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   405
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   406
	and stopIndex working backwards through the receiver. If the receiver does 
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   407
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   408
	not contain aValue, return nil"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   409
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   410
	startIndex
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   411
		to: stopIndex
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   412
		by: -1
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   413
		do: [:i | (self at: (order at: i))
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   414
				= aValue ifTrue: [^i]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   415
	^nil! !
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   416
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   417
!OrderedDictionary methodsFor: 'testing'!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   418
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   419
occurrencesOfKey: aKey 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   420
	"Return how many of the dictionary's keys are equal to aKey."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   421
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   422
	| count |
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   423
	count := 0.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   424
	1 to: self size do: [:index | aKey = (order at: index) ifTrue: [count := count
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   425
 + 1]].
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   426
	^count!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   427
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   428
occurrencesOfValue: aValue 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   429
	"Return how many of the dictionary's values are equal to aValue."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   430
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   431
	| count |
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   432
	count := 0.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   433
	1 to: self size do: [:index | aValue = (self at: (order at: index)) ifTrue:
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   434
 [count := count + 1]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   435
	^count! !
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   436
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   437
!OrderedDictionary methodsFor: 'accessing'!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   438
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   439
after: anAssociation 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   440
	"Return the association after anAssociation in the order. If anAssociation is
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   441
 the 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   442
	last association in the order, return the undefined object. If anAssociation
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   443
 is 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   444
	not found, invoke an error notifier"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   445
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   446
	1 to: order size - 1 do: [:index | (self associationAt: (order at: index))
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   447
			= anAssociation ifTrue: [^self associationAt: (order at: index + 1)]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   448
	(self associationAt: (order last))
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   449
		= anAssociation
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   450
		ifTrue: [^nil]
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   451
		ifFalse: [^self error: 'not found']!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   452
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   453
associations
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   454
	"Return an OrderedCollection containing the receiver's associations."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   455
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   456
	| anOrderedCollection |
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   457
	anOrderedCollection := OrderedCollection new: order size.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   458
	order do: [:key | anOrderedCollection add: (self associationAt: key)].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   459
	^anOrderedCollection!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   460
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   461
at: key put: anObject 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   462
	"Set the value at key to be anObject. If key is not found, create a new 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   463
	entry for key and set is value to anObject. Return anObject."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   464
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   465
	(order includes: key)
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   466
		ifFalse: [order add: key].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   467
	super at: key put: anObject!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   468
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   469
atAll: anInterval put: anObject 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   470
	"Put anObject into the value field of every association specified by the interval"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   471
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   472
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   473
	anInterval do: [:index | self at: (order at: index)
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   474
			put: anObject]!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   475
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   476
atAllPut: anObject 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   477
	"Put anObject into the value field of every association in the dictionary"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   478
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   479
	order do: [:key|  self at: key put: anObject]!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   480
120
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   481
atIndex:index
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   482
    "return an element at a given index"
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   483
    ^ self at:(order at:index)
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   484
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   485
    "Created: 28.9.1995 / 13:49:39 / stefan"
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   486
!
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   487
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   488
atIndex:index put:anAssociation
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   489
    "put an association to a given index. remove the old associatioan at this index"
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   490
    |key|
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   491
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   492
    key := anAssociation key.
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   493
    (super includesKey:key) ifTrue:[
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   494
	^ self error:'duplicate key'.
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   495
    ].
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   496
    super removeKey:(order at:index) ifAbsent:[].
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   497
    order at:index put:key.
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   498
    super add:anAssociation.
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   499
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   500
    "Created: 28.9.1995 / 16:30:15 / stefan"
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   501
!
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   502
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   503
before: anAssociation 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   504
	"Return the association before anAssociation in the order. If anAssociation
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   505
 is the 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   506
	first association in the order, return the undefined object. If anAssociation
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   507
 is 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   508
	not found, invoke an error notifier"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   509
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   510
	2 to: order size do: [:index | (self associationAt: (order at: index))
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   511
			= anAssociation ifTrue: [^self associationAt: (order at: index - 1)]].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   512
	(self associationAt: order first)
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   513
		= anAssociation
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   514
		ifTrue: [^nil]
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   515
		ifFalse: [^self error: 'not found']!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   516
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   517
first
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   518
	"Return the first association of the receiver.  Provide an error 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   519
	notification if the receiver contains no elements."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   520
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   521
	order emptyCheck.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   522
	^self associationAt: (order first)!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   523
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   524
keys
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   525
	"Return a OrderedCollection containing the receiver's keys."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   526
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   527
	^order copy.!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   528
120
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   529
keyAt:index
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   530
    "get the key at the given index"
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   531
    ^ order at:index.
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   532
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   533
    "Created: 29.9.1995 / 11:32:07 / stefan"
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   534
!
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   535
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   536
last
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   537
	"Return the last association of the receiver. Provide an error 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   538
	notification if the receiver contains no elements."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   539
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   540
	order emptyCheck.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   541
	^self associationAt: (order last)!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   542
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   543
order
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   544
	^order!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   545
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   546
values
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   547
	"Return a OrderedCollection containing the receiver's values."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   548
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   549
	| anOrderedCollection |
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   550
	anOrderedCollection := OrderedCollection new: order size.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   551
	order do: [:key | anOrderedCollection add: (self at: key)].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   552
	^anOrderedCollection! !
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   553
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   554
!OrderedDictionary methodsFor: 'private'!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   555
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   556
initialize
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   557
	order := OrderedCollection new!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   558
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   559
removeFromOrder: aKey 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   560
	order remove: aKey ifAbsent: []! !
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   561
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   562
!OrderedDictionary methodsFor: 'copying'!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   563
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   564
copyEmpty
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   565
	"Return a copy of the receiver that contains no elements."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   566
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   567
	^(self class) new: 10!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   568
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   569
copyEmpty: aSize
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   570
	"Return a copy of the receiver that contains no elements."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   571
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   572
	^(self class) new: aSize!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   573
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   574
copyFrom: startIndex to: endIndex 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   575
	"Return a copy of the receiver that contains elements from 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   576
	position startIndex to endIndex."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   577
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   578
	| newDict |
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   579
	endIndex < startIndex ifTrue: [^self copyEmpty].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   580
	(startIndex < 1 or: [endIndex > order size])
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   581
		ifTrue: [^self error: 'No such element'].
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   582
	newDict := self copyEmpty: endIndex - startIndex + 1.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   583
	startIndex to: endIndex do: [:index | newDict add: (self associationAt: (order
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   584
 at: index))].
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   585
	^newDict!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   586
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   587
copyWith: anAssociation 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   588
	"Return a copy of the dictionary that is 1 bigger than the receiver and 
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   589
	includes the argument, anAssociation, at the end."
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   590
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   591
	| newDict |
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   592
	newDict := self copy.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   593
	newDict add: anAssociation.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   594
	^newDict!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   595
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   596
copyWithout: anAssociation 
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   597
	"Return a copy of the dictionary that is 1 smaller than the receiver and does
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   598
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   599
	not includes the argument, anAssociation"
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   600
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   601
	| newDict |
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   602
	newDict := OrderedDictionary new: order size - 1.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   603
	self associationsDo: [:assoc | anAssociation = assoc ifFalse: [newDict add:
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   604
 assoc]]! !
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   605
120
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   606
!OrderedDictionary methodsFor:'removing'!
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   607
removeFromIndex:fromIndex toIndex:toIndex
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   608
    | keys |
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   609
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   610
    keys := order copyFrom:fromIndex to:toIndex.
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   611
    order removeFromIndex:fromIndex toIndex:toIndex.
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   612
    keys do:[ :key |
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   613
	super removeKey:key.
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   614
    ].
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   615
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   616
    "Created: 28.9.1995 / 12:04:33 / stefan"
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   617
! !
fa3590433788 New methods for SequencableCollection access.
Stefan Vogel <sv@exept.de>
parents: 67
diff changeset
   618
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   619
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   620
!OrderedDictionary class methodsFor: 'instance creation'!
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   621
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   622
new
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   623
	^super new initialize!
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   624
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   625
new: anInteger
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   626
	^(super new: anInteger) initialize! !
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   627
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   628
"COPYRIGHT.
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   629
 The above file is a Manchester Goodie protected by copyright.
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   630
 These conditions are imposed on the whole Goodie, and on any significant
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   631
 part of it which is separately transmitted or stored:
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   632
	* You must ensure that every copy includes this notice, and that
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   633
	  source and author(s) of the material are acknowledged.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   634
	* These conditions must be imposed on anyone who receives a copy.
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   635
	* The material shall not be used for commercial gain without the prior
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   636
	  written consent of the author(s).
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   637
 Further information on the copyright conditions may be obtained by
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   638
 sending electronic mail:
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   639
	To: goodies-lib@cs.man.ac.uk
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   640
	Subject: copyright
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   641
 or by writing to The Smalltalk Goodies Library Manager, Dept of
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   642
 Computer Science, The University, Manchester M13 9PL, UK
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   643
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   644
 (C) Copyright 1992 University of Manchester
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   645
 For more information about the Manchester Goodies Library (from which 
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   646
 this file was distributed) send e-mail:
67
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   647
	To: goodies-lib@cs.man.ac.uk
6d8a403eff0a *** empty log message ***
claus
parents: 62
diff changeset
   648
	Subject: help 
62
a759b5c72c98 Initial revision
claus
parents:
diff changeset
   649
"!