OrderedDictionary.st
author Stefan Vogel <sv@exept.de>
Tue, 28 Apr 2020 16:22:26 +0200
changeset 25375 b784fc06a5eb
parent 25321 05cb98fd500a
permissions -rw-r--r--
#REFACTORING by stefan class: KeyedCollection class added: #newWithCapacity:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24419
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
     1
"{ Encoding: utf8 }"
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
     2
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     3
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     4
 COPYRIGHT.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     5
 This is a Manchester Goodie protected by copyright.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     6
 These conditions are imposed on the whole Goodie, and on any significant
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     7
 part of it which is separately transmitted or stored:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     8
	* You must ensure that every copy includes this notice, and that
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     9
	  source and author(s) of the material are acknowledged.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    10
	* These conditions must be imposed on anyone who receives a copy.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    11
	* The material shall not be used for commercial gain without the prior
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
	  written consent of the author(s).
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
 Further information on the copyright conditions may be obtained by
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
 sending electronic mail:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
	To: goodies-lib@cs.man.ac.uk
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
	Subject: copyright
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
 or by writing to The Smalltalk Goodies Library Manager, Dept of
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
 Computer Science, The University, Manchester M13 9PL, UK
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
 (C) Copyright 1992 University of Manchester
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
 For more information about the Manchester Goodies Library (from which 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
 this file was distributed) send e-mail:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
	To: goodies-lib@cs.man.ac.uk
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    24
	Subject: help 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    25
"
15134
84e886ef6b5f Packet change libbasic2 -> libbasic
Stefan Vogel <sv@exept.de>
parents: 15133
diff changeset
    26
"{ Package: 'stx:libbasic' }"
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    27
18465
e9e4bb62235f added isOrdered query
Claus Gittinger <cg@exept.de>
parents: 16765
diff changeset
    28
"{ NameSpace: Smalltalk }"
e9e4bb62235f added isOrdered query
Claus Gittinger <cg@exept.de>
parents: 16765
diff changeset
    29
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    30
Dictionary subclass:#OrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    31
	instanceVariableNames:'order'
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    32
	classVariableNames:''
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    33
	poolDictionaries:''
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    34
	category:'Collections-Sequenceable'
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    35
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    36
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    37
!OrderedDictionary class methodsFor:'documentation'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
copyright
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
 COPYRIGHT.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
 This is a Manchester Goodie protected by copyright.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
 These conditions are imposed on the whole Goodie, and on any significant
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
 part of it which is separately transmitted or stored:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
	* You must ensure that every copy includes this notice, and that
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
	  source and author(s) of the material are acknowledged.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
	* These conditions must be imposed on anyone who receives a copy.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
	* The material shall not be used for commercial gain without the prior
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
	  written consent of the author(s).
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
 Further information on the copyright conditions may be obtained by
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
 sending electronic mail:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
	To: goodies-lib@cs.man.ac.uk
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
	Subject: copyright
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
 or by writing to The Smalltalk Goodies Library Manager, Dept of
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
 Computer Science, The University, Manchester M13 9PL, UK
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
 (C) Copyright 1992 University of Manchester
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
 For more information about the Manchester Goodies Library (from which 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
 this file was distributed) send e-mail:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
	To: goodies-lib@cs.man.ac.uk
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
	Subject: help 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    63
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    64
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    65
documentation
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    66
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
    I am a subclass of Dictionary whose elements (associations) are ordered in a
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    68
    similar fashion to OrderedCollection.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    69
    That is, while being filled via #at:put: messages (or similar Dictionary protocol),
19106
cfeb2d0d1ee4 #DOCUMENTATION
mawalch
parents: 19099
diff changeset
    70
    the order in which associations are added, is remembered and accessible via the #atIndex:
20633
36988fb613e3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19842
diff changeset
    71
    or #order messages. 
36988fb613e3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19842
diff changeset
    72
    Therefore, this combines fast access via hashing with a defined order when enumerating.
36988fb613e3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19842
diff changeset
    73
    
36988fb613e3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19842
diff changeset
    74
    [instance variables:]
36988fb613e3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19842
diff changeset
    75
        order <OrderedCollection>       Ordered collection of keys reflecting the order of
36988fb613e3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19842
diff changeset
    76
                                        associations in the dictionary.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    77
19099
3b1589b9e193 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18465
diff changeset
    78
    [complexity:]
3b1589b9e193 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18465
diff changeset
    79
        access by index: O(1)
3b1589b9e193 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18465
diff changeset
    80
        access by key: O(1)
22033
2b0868c15407 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21280
diff changeset
    81
        searching index: O(n)
2b0868c15407 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21280
diff changeset
    82
        insertion: mostly (asymptotical)  O(1)
2b0868c15407 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21280
diff changeset
    83
        removal: mostly O(N) (because order removal will have O(n) behavior)
19099
3b1589b9e193 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18465
diff changeset
    84
        
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
    [author:]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
        Ifor Wyn Williams <ifor@uk.ac.man.cs>
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
    87
        Changed by: exept
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
    [see also:]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    90
        OrderedCollection Dictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    91
        OrderedSet
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    92
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    93
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    95
examples
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    96
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    97
    |o|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    98
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    99
    o := OrderedDictionary new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   101
    o at:'one'   put:1.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
    o at:'two'   put:2.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
    o at:'three' put:3.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
    o at:'four'  put:4.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
    o at:'five'  put:5.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
    o at:'six'   put:6.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   107
    o at:'seven' put:7.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   108
    o at:'eight' put:8.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   109
    o at:'nine'  put:9.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   110
    o at:'zero'  put:0.
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 at:'eight'.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   113
    o atIndex:1.   
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   114
    o atIndex:5.    
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   115
    o atIndex:10.  
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
    o from:3 to:6 do:[:each | Transcript showCR:each ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   118
22322
e8e314fee20f #DOCUMENTATION by Maren
matilk
parents: 22050
diff changeset
   119
    o collect:[:eachValue | eachValue squared].
e8e314fee20f #DOCUMENTATION by Maren
matilk
parents: 22050
diff changeset
   120
    o associationsCollect:[:eachAssoc | eachAssoc key -> eachAssoc value squared]. 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   121
    o associations.  
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   122
    o order.         
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   123
    o reverse.    
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   124
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   125
    o atIndex:1.  
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
    o atIndex:5. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
    o atIndex:10. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   129
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
info
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
	NAME            OrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   134
	AUTHOR          Ifor Wyn Williams <ifor@uk.ac.man.cs>
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   135
	CONTRIBUTOR     Ifor Wyn Williams <ifor@uk.ac.man.cs>
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   136
	FUNCTION        An ordered dictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   137
	ST-VERSIONS     2.3-5, 4.0
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   138
	PREREQUISITES   
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   139
	CONFLICTS       
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   140
	DISTRIBUTION    global
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   141
	VERSION         1.2
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
	DATE            28.3.90
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   143
	SUMMARY         A dictionary that behaves like a SequencableCollection
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
			(except that associations cannot be removed). 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   145
"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   146
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   147
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   148
!OrderedDictionary class methodsFor:'instance creation'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   149
21218
fa26586f306b #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20633
diff changeset
   150
new:anInteger
fa26586f306b #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20633
diff changeset
   151
    ^ (super new:anInteger) initializeOrder:anInteger
24419
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   152
!
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   153
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   154
newFromObject:anObject
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   155
    "return a new instance with slots named after anObject's instance variables."
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   156
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   157
    |allNames newInst|
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   158
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   159
    allNames := anObject class allInstVarNames.
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   160
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   161
    newInst := self new:(allNames size + anObject basicSize).
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   162
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   163
    allNames doWithIndex:[:nm :idx |
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   164
        newInst at:nm put:(anObject instVarAt:idx).
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   165
    ].
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   166
    1 to:anObject basicSize do:[:idx |
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   167
        newInst at:idx put:(anObject basicAt:idx).
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   168
    ].
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   169
    ^ newInst
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   170
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   171
    "
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   172
     OrderedDictionary newFromObject:(100 @ 200)
d3a56dbbf696 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24363
diff changeset
   173
    "
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   174
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   175
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   176
!OrderedDictionary methodsFor:'accessing'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   177
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   178
after:anAssociation 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   179
    "Return the association after anAssociation in the order. 
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   180
     If anAssociation is the last association in the order, return nil.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   181
     If anAssociation is not found, invoke an error notifier"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   182
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   183
    |sz "{ Class:SmallInteger }"|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   184
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   185
    sz := order size.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   186
    1 to:sz do:[:index | 
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   187
        (self associationAt:(order at:index)) = anAssociation ifTrue:[
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   188
            index == sz ifTrue:[^ nil].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   189
            ^ self associationAt:(order at:index + 1)
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   190
        ]
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   191
    ].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   192
    ^ self errorNotFound:anAssociation.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   193
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   194
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   195
associations
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   196
    "Return an OrderedCollection containing the receiver's associations."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   197
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   198
    ^ order collect: [:key | self associationAt: key ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   199
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   200
19274
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   201
at:aKey ifAbsent:default update:aBlock 
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   202
    "update the element stored under aKey with the result from 
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   203
     evaluating aBlock with the previous stored value as argument, or with default,
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   204
     if there was no such key initially."
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   205
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   206
    ^ self at:aKey put:(aBlock value:(self at:aKey ifAbsent:default)).
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   207
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   208
    "
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   209
     |d|
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   210
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   211
     d := OrderedDictionary new.
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   212
     d at:'one'  ifAbsent:0 update:[:val | val + 1].
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   213
     d at:'two'  ifAbsent:0 update:[:val | val + 1].
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   214
     d at:'three' ifAbsent:0  update:[:val | val + 1].
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   215
     d at:'one' ifAbsent:0  update:[:val | val + 1].
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   216
     d at:'two' ifAbsent:0  update:[:val | val + 1].
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   217
     d
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   218
    "
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   219
!
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   220
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   221
at:aKey ifAbsentPut:valueBlock
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   222
    ^ self at:aKey ifAbsent:[self at:aKey put:valueBlock value]
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   223
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   224
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   225
at:key put:anObject 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   226
    "Set the value at key to be anObject. 
15759
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   227
     If key is not found, create a new entry for key and set its value to anObject. 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   228
     If key is already present, the order remains unchanged.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   229
     Return anObject."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   230
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   231
    (self includesKey: key) ifFalse:[order add: key].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   232
    ^ super at:key put:anObject
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   233
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   234
19274
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   235
at:aKey put:aValue ifPresent:aBlock
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   236
    |v|
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   237
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   238
    v := self at:aKey ifAbsent:[^ self at:aKey put:aValue].
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   239
    ^ aBlock value:v.
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   240
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   241
    "
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   242
     |d|
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   243
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   244
     d := OrderedDictionary new.
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   245
     d at:'foo' put:1234 ifPresent:[:v| self error: 'duplicate: ', v printString ].
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   246
     d at:'foo' put:1234 ifPresent:[:v| self halt:'duplicate: ', v printString. 5555 ].
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   247
    "
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   248
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   249
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   250
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   251
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   252
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   253
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   254
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   255
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   256
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   257
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   258
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   259
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   260
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   261
    "
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   262
     |d|
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   263
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   264
     d := Dictionary new.
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   265
     d at:'foo' put:1234 ifPresent:[:v| self error: 'duplicate: ', v printString ].
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   266
     d at:'foo' put:1234 ifPresent:[:v| self halt:'duplicate; ', v printString. 5555 ].
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   267
    "
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   268
!
Stefan Vogel <sv@exept.de>
parents: 19106
diff changeset
   269
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   270
atAll:indexCollection put: anObject 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   271
    "Put anObject into the value field of every association specified by indexCollection,
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   272
     which is typically an interval."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   273
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   274
    indexCollection do:[:index | self at:(order at: index) put:anObject]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   275
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   276
23979
7758f1dfa263 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 23843
diff changeset
   277
atAllPut:anObject 
7758f1dfa263 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 23843
diff changeset
   278
    "Put anObject into the value field of every association in the dictionary.
7758f1dfa263 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 23843
diff changeset
   279
     Return the receiver."
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   280
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   281
    order do:[:key | super at: key put:anObject]
23979
7758f1dfa263 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 23843
diff changeset
   282
7758f1dfa263 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 23843
diff changeset
   283
    "Modified (comment): / 26-03-2019 / 11:53:17 / Claus Gittinger"
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   284
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   285
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   286
atIndex:index
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   287
    "return an element at a given index"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   288
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   289
    ^ self at:(order at:index)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   290
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   291
    "Created: 28.9.1995 / 13:49:39 / stefan"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   292
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   293
15534
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   294
atIndex:index ifAbsent:aBlock
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   295
    "return an element at a given index"
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   296
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   297
    ^ self at:(order at:index ifAbsent:[^ aBlock value])
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   298
!
808593c7efb3 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15451
diff changeset
   299
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   300
atIndex:index put:anAssociation
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   301
    "put an association to a given index. remove the old association at this index"
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   302
    |key|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   303
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   304
    key := anAssociation key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   305
    (super includesKey:key) ifTrue:[
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   306
        ^ self error:'duplicate key'.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   307
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   308
    super removeKey:(order at:index) ifAbsent:[].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   309
    order at:index put:key.
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   310
    super at:key put:anAssociation value.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   311
    ^ anAssociation.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   312
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   313
    "Created: 28.9.1995 / 16:30:15 / stefan"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   314
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   315
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   316
before:anAssociation 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   317
    "Return the association before anAssociation in the order. 
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   318
     If anAssociation is the first association in the order, return nil.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   319
     If anAssociation is not found, invoke an error notifier"
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   320
    
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   321
    |sz "{ Class:SmallInteger }"|
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   322
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   323
    sz := order size.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   324
    1 to:sz do:[:index | 
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   325
        (self associationAt:(order at:index)) = anAssociation ifTrue:[
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   326
            index == 1 ifTrue:[^ nil].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   327
            ^ self associationAt:(order at:index - 1)
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   328
        ]
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   329
    ].
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   330
    ^ self errorNotFound:anAssociation.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   331
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   332
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   333
first
22048
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   334
    "Return the first value of the receiver.  
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   335
     Provide an error notification if the receiver contains no elements."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   336
22050
0f50787b77cf #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22048
diff changeset
   337
    ^ self firstAssociation value
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   338
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   339
    "
22044
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   340
     OrderedDictionary new first
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   341
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   342
     (OrderedDictionary new at:'one' put:1; yourself) first
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   343
     (OrderedDictionary new at:'one' put:1; yourself) firstKey
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   344
     (OrderedDictionary new at:'one' put:1; yourself) firstValue
22048
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   345
     (OrderedDictionary new at:'one' put:1; yourself) firstAssociation
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   346
    "
22044
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   347
22050
0f50787b77cf #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22048
diff changeset
   348
    "Modified: / 17-07-2017 / 17:27:27 / cg"
22048
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   349
!
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   350
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   351
firstAssociation
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   352
    "Return the first association of the receiver.  
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   353
     Provide an error notification if the receiver contains no elements."
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   354
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   355
    ^ self associationAt: (order first)
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   356
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   357
    "
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   358
     OrderedDictionary new firstAssociation
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   359
     OrderedDictionary new first
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   360
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   361
     (OrderedDictionary new at:'one' put:1; yourself) first
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   362
     (OrderedDictionary new at:'one' put:1; yourself) firstKey
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   363
     (OrderedDictionary new at:'one' put:1; yourself) firstValue
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   364
    "
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   365
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   366
    "Created: / 17-07-2017 / 17:21:06 / cg"
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   367
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   368
21280
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   369
firstKey
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   370
    "Return the first key of the receiver.  
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   371
     Raises an error if the receiver contains no elements."
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   372
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   373
    ^ order first
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   374
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   375
    "
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   376
     OrderedDictionary new first
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   377
     OrderedDictionary new firstKey
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   378
22044
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   379
     OrderedDictionary new first
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   380
     (OrderedDictionary new at:'one' put:1; yourself) first
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   381
     (OrderedDictionary new at:'one' put:1; yourself) firstKey
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   382
     (OrderedDictionary new at:'one' put:1; yourself) firstValue
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   383
21280
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   384
     OrderedDictionary new
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   385
        at:'foo' put:'Foo';
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   386
        at:'bar' put:'Bar';
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   387
        first
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   388
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   389
     OrderedDictionary new
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   390
        at:'foo' put:'Foo';
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   391
        at:'bar' put:'Bar';
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   392
        firstKey
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   393
    "
22044
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   394
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   395
    "Modified (comment): / 17-07-2017 / 17:01:17 / cg"
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   396
!
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   397
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   398
keyAt:index
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   399
    "get the key at the given index"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   400
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   401
    ^ order at:index.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   402
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   403
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   404
     |s|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   405
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   406
     s := OrderedDictionary new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   407
     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
   408
     s keyAt:2    
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   409
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   410
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   411
    "Created: 29.9.1995 / 11:32:07 / stefan"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   412
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   413
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   414
keys
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   415
    "Return a OrderedCollection containing the receiver's keys."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   416
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   417
    ^ order copy.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   418
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   419
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   420
     |s|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   421
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   422
     s := OrderedDictionary new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   423
     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
   424
     s keys       
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   425
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   426
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   427
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   428
last
22048
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   429
    "Return the last value of the receiver. 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   430
     Provide an error notification if the receiver contains no elements."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   431
22050
0f50787b77cf #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22048
diff changeset
   432
    ^ self lastAssociation value
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   433
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   434
    "
22044
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   435
     OrderedDictionary new last
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   436
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   437
     (OrderedDictionary new at:'one' put:1; yourself) last
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   438
     (OrderedDictionary new at:'one' put:1; yourself) lastKey
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   439
     (OrderedDictionary new at:'one' put:1; yourself) lastValue
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   440
    "
22044
48e271684376 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22033
diff changeset
   441
22050
0f50787b77cf #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22048
diff changeset
   442
    "Modified: / 17-07-2017 / 17:27:10 / cg"
22048
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   443
!
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   444
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   445
lastAssociation
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   446
    "Return the last association of the receiver. 
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   447
     Provide an error notification if the receiver contains no elements."
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   448
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   449
    ^ self associationAt: (order last)
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   450
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   451
    "
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   452
     OrderedDictionary new lastAssociation
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   453
     OrderedDictionary new last
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   454
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   455
     (OrderedDictionary new at:'one' put:1; at:'two' put:2;  at:'one' put:111; yourself) lastAssociation
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   456
     (OrderedDictionary new at:'one' put:1; at:'two' put:2;  at:'one' put:111; yourself) last
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   457
     (OrderedDictionary new at:'one' put:1; at:'two' put:2;  at:'one' put:111; yourself) lastKey
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   458
     (OrderedDictionary new at:'one' put:1; at:'two' put:2;  at:'one' put:111; yourself) lastValue
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   459
    "
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   460
0f68f6c65142 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22044
diff changeset
   461
    "Created: / 17-07-2017 / 17:22:40 / cg"
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   462
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   463
21280
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   464
lastKey
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   465
    "Return the last key of the receiver.  
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   466
     Raises an error if the receiver contains no elements."
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   467
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   468
    ^ order last
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   469
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   470
    "
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   471
     OrderedDictionary new last
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   472
     OrderedDictionary new lastKey
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   473
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   474
     OrderedDictionary new
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   475
        at:'foo' put:'Foo';
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   476
        at:'bar' put:'Bar';
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   477
        last
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   478
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   479
     OrderedDictionary new
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   480
        at:'foo' put:'Foo';
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   481
        at:'bar' put:'Bar';
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   482
        lastKey
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   483
    "
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   484
!
df927d1ac910 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21218
diff changeset
   485
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   486
order
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   487
    "returns the keys in the order of their appearance"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   488
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   489
    ^ order
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   490
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   491
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   492
     |s|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   493
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   494
     s := OrderedDictionary new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   495
     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
   496
     s order    
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   497
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   498
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   499
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   500
valueAt:index
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   501
    "get the value at the given index"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   502
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   503
    ^ self at:(order at:index).
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   504
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   505
    "
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   506
     |s|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   507
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   508
     s := OrderedDictionary new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   509
     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
   510
     s valueAt:2       
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
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   514
values
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   515
    "Return a OrderedCollection containing the receiver's values."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   516
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   517
    ^ order collect:[:key | self at:key].
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   518
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   519
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   520
!OrderedDictionary methodsFor:'adding'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   521
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   522
add: anAssociation after: oldAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   523
    "Add the argument, anAssociation, as an element of the dictionary. Put it 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   524
    in the position just succeeding oldAssociation. Return anAssociation."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   525
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   526
    | index key |
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   527
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   528
    index := self indexOfAssociation: oldAssociation 
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   529
                            ifAbsent: [^ self errorNotFound:anAssociation].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   530
    key := anAssociation key.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   531
    order remove:key ifAbsent:[].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   532
    order add:key after:(order at: index).
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   533
    super at:key put:anAssociation value.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   534
    ^ anAssociation
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   535
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   536
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   537
add:anAssociation before:oldAssociation 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   538
    "Add the argument, anAssociation, as an element of the dictionary. Put it 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   539
    in the position just preceding oldAssociation. Return anAssociation."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   540
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   541
    | index key |
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   542
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   543
    index := self indexOfAssociation: oldAssociation 
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   544
                            ifAbsent: [^ self errorNotFound:anAssociation].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   545
    key := anAssociation key.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   546
    order remove:key ifAbsent:[].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   547
    order add:key before:(order at: index).
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   548
    super at:key put:anAssociation value.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   549
    ^ anAssociation
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   550
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   551
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   552
add:anAssociation beforeIndex:spot 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   553
    "Add the argument, anAssociation, as an element of the receiver.  Put it
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   554
    in the position just preceding the indexed position spot.  Return newObject."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   555
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   556
    |key|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   557
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   558
    key := anAssociation key.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   559
    order remove:key ifAbsent:[].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   560
    order add:key beforeIndex:spot.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   561
    super at:key put:anAssociation value.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   562
    ^ anAssociation
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   563
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   564
    "Modified: 28.9.1995 / 14:06:53 / stefan"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   565
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   566
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   567
addAll:aCollectionOfAssociations 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   568
    "Add each element of anOrderedCollectionOfAssociations at my end. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   569
     We expect the argument to enumerate associations with #reverseDo:; 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   570
     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
   571
     Returns the argument, aCollectionOfAssociations (sigh)."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   572
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   573
    ^ self addAllLast:aCollectionOfAssociations.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   574
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   575
    "Modified: 28.2.1997 / 15:51:23 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   576
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   577
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   578
addAllAssociations:aDictionaryOrOrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   579
    "Add each association of aDictionaryOrOrderedDictionary to my end.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   580
     We expect the argument to respond to #associationsDo:."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   581
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   582
    ^ self addAllAssociationsLast:aDictionaryOrOrderedDictionary.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   583
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   584
    "Created: 28.2.1997 / 15:52:02 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   585
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   586
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   587
addAllAssociationsFirst:aDictionaryOrOrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   588
    "Add each association of aDictionaryOrOrderedDictionary at the beginning of the 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   589
     receiver. We expect the argument to respond to #associationsReverseDo:."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   590
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   591
    aDictionaryOrOrderedDictionary associationsReverseDo:[:each | self addFirst:each].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   592
    ^ aDictionaryOrOrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   593
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   594
    "Created: 28.2.1997 / 15:50:14 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   595
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   596
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   597
addAllAssociationsLast:aDictionaryOrOrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   598
    "Add each association of aDictionaryOrOrderedDictionary at the end of the 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   599
     receiver. We expect the argument to respond to #associationsDo:."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   600
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   601
    aDictionaryOrOrderedDictionary associationsDo:[:each | self addLast:each].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   602
    ^ aDictionaryOrOrderedDictionary
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   603
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   604
    "Created: 28.2.1997 / 15:48:37 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   605
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   606
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   607
addFirst:anAssociation 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   608
    "Add anAssociation to the beginning of the receiver."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   609
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   610
    |key|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   611
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   612
    key := anAssociation key.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   613
    order remove:key ifAbsent:[].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   614
    order addFirst:key.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   615
    super at:key put:anAssociation value.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   616
    ^ anAssociation
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   617
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   618
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   619
addLast:anAssociation 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   620
    "Add anAssociation to the end of the receiver.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   621
     If anAssociation is already present in the dictionary,
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   622
     it will be moved to the end. (See also: #add:)"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   623
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   624
    |key|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   625
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   626
    key := anAssociation key.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   627
    order remove:key ifAbsent:[].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   628
    order add:key.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   629
    super at:key put:anAssociation value.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   630
    ^ anAssociation
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   631
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   632
24363
3188fbab129f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24349
diff changeset
   633
!OrderedDictionary methodsFor:'converting'!
3188fbab129f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24349
diff changeset
   634
3188fbab129f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24349
diff changeset
   635
asInlineObject
3188fbab129f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24349
diff changeset
   636
    "return the receiver as an inline-object (which understands getters and setters for my slots)"
3188fbab129f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24349
diff changeset
   637
3188fbab129f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24349
diff changeset
   638
    ^ InlineObject slotNamesAndValuesFromDictionary:self
3188fbab129f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24349
diff changeset
   639
3188fbab129f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24349
diff changeset
   640
    "Created: / 25-06-2019 / 16:53:29 / Claus Gittinger"
3188fbab129f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24349
diff changeset
   641
! !
3188fbab129f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24349
diff changeset
   642
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   643
!OrderedDictionary methodsFor:'copying'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   644
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   645
copyEmpty
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   646
    "Return a copy of the receiver that contains no elements."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   647
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   648
    ^ self species new: 10
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   649
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   650
23728
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   651
copyFrom:startIndex 
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   652
    "Return a copy of the receiver that contains associations from 
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   653
     position startIndex to the end."
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   654
    
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   655
    ^ self copyFrom:startIndex to:self size
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   656
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   657
    "Created: / 13-02-2019 / 17:59:58 / Claus Gittinger"
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   658
!
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   659
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   660
copyFrom:startIndex to:endIndex 
23728
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   661
    "Return a copy of the receiver that contains associations from 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   662
     position startIndex to endIndex."
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   663
    
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   664
    |newDict|
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   665
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   666
    endIndex < startIndex ifTrue:[
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   667
        ^ self copyEmpty
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   668
    ].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   669
    (startIndex < 1 or:[ endIndex > order size ]) ifTrue:[
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   670
        ^ self errorNotFound
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   671
    ].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   672
    newDict := self copyEmpty:endIndex - startIndex + 1.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   673
    startIndex to:endIndex do:[:index | 
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   674
        newDict add:(self associationAt:(order at:index))
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   675
    ].
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   676
    ^ newDict
23728
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   677
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   678
    "Modified (comment): / 13-02-2019 / 18:01:03 / Claus Gittinger"
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   679
!
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   680
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   681
copyTo:endIndex 
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   682
    "Return a copy of the receiver that contains associations from 
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   683
     the start to endIndex."
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   684
    
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   685
    ^ self copyFrom:1 to:endIndex
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   686
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   687
    "Created: / 13-02-2019 / 18:00:24 / Claus Gittinger"
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   688
!
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   689
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   690
copyValuesFrom:startIndex 
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   691
    "Return a copy of the receiver that contains values from 
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   692
     position startIndex to the end."
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   693
    
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   694
    ^ self copyValuesFrom:startIndex to:self size
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   695
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   696
    "Created: / 13-02-2019 / 18:01:24 / Claus Gittinger"
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   697
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   698
23728
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   699
copyValuesFrom:startIndex to:endIndex 
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   700
    "Return a copy of the receiver that contains values from 
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   701
     position startIndex to endIndex."
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   702
    
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   703
    |outColl|
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   704
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   705
    endIndex < startIndex ifTrue:[
23735
77363fc65861 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23728
diff changeset
   706
        ^ OrderedCollection new
23728
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   707
    ].
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   708
    (startIndex < 1 or:[ endIndex > order size ]) ifTrue:[
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   709
        ^ self errorNotFound
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   710
    ].
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   711
    outColl := OrderedCollection new:(endIndex - startIndex + 1).
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   712
    startIndex to:endIndex do:[:index | 
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   713
        outColl add:(self at:(order at:index))
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   714
    ].
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   715
    ^ outColl
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   716
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   717
    "Created: / 13-02-2019 / 18:03:19 / Claus Gittinger"
23735
77363fc65861 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23728
diff changeset
   718
    "Modified: / 13-02-2019 / 21:44:04 / Claus Gittinger"
23728
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   719
!
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   720
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   721
copyValuesTo:endIndex 
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   722
    "Return a copy of the receiver that contains values from 
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   723
     the start to endIndex."
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   724
    
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   725
    ^ self copyValuesFrom:1 to:endIndex
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   726
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   727
    "Created: / 13-02-2019 / 18:02:13 / Claus Gittinger"
24183
88df79557f67 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24039
diff changeset
   728
! !
88df79557f67 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24039
diff changeset
   729
88df79557f67 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24039
diff changeset
   730
!OrderedDictionary methodsFor:'copying-private'!
23728
8a0345aa717e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23289
diff changeset
   731
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   732
postCopy
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   733
    "have to copy the order too"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   734
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   735
    super postCopy.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   736
    order := order copy
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   737
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   738
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   739
!OrderedDictionary methodsFor:'enumerating'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   740
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   741
associationsCollect: aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   742
    "Evaluate aBlock with each of the associations of the dictionary as argument,
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   743
     and return a new (ordered) collection with the results"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   744
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   745
    ^ order collect:[:key | (aBlock value: (self associationAt:key))].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   746
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   747
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   748
associationsDo: aBlock 
16765
72c7f90b2c4d class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 16216
diff changeset
   749
    "Evaluate aBlock for each of the dictionary's associations.
72c7f90b2c4d class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 16216
diff changeset
   750
     Enumerate them in the order by which they were added.
72c7f90b2c4d class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 16216
diff changeset
   751
72c7f90b2c4d class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 16216
diff changeset
   752
     See also:
72c7f90b2c4d class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 16216
diff changeset
   753
        #keysAndValuesDo:  (which passes keys & values separately)
72c7f90b2c4d class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 16216
diff changeset
   754
        #keysDo:           (which passes keys only)
72c7f90b2c4d class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 16216
diff changeset
   755
        #do:               (which passes values only)"
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   756
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   757
    order do: [:key | aBlock value: (self associationAt: key)]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   758
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   759
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   760
associationsDo: aBlock from: firstIndex to: secondIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   761
    "Evaluate aBlock with each of the dictionary's associations from index 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   762
    firstIndex to index secondIndex as the argument."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   763
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   764
    firstIndex to: secondIndex do: [:index | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   765
        aBlock value: (self associationAt: (order at: index))
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   766
    ]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   767
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   768
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   769
associationsReverseDo: aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   770
    "Evaluate aBlock for each of the dictionary's associations in reverse order."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   771
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   772
    order reverseDo:[:key | aBlock value:(self associationAt:key)]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   773
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   774
    "Created: 28.2.1997 / 15:52:31 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   775
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   776
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   777
associationsSelect:aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   778
    "Evaluate aBlock with each of the dictionary's associations as the argument.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   779
     Collect into a new OrderedDictionary only those associations for which 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   780
     aBlock evaluates to true. Return the new OrderedDictionary."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   781
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   782
    |newDict|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   783
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   784
    newDict := self species new.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   785
    order do:[:key | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   786
        |assoc|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   787
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   788
        assoc := self associationAt:key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   789
        (aBlock value:assoc) ifTrue: [
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   790
            newDict at:key put:assoc value.
15133
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
    ^ newDict
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   794
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   795
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   796
collect: aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   797
    "Evaluate aBlock with each of the values of the dictionary as argument,
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   798
     and return a new (ordered) collection with the results"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   799
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   800
    ^ order collect:[:key | (aBlock value: (self at:key))].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   801
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   802
16216
386578673083 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15801
diff changeset
   803
detect: aBlock ifNone:anExceptionValue
15759
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   804
    "evaluate the argument, aBlock for each element in the receiver until
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   805
     the block returns true; in this case return the element which caused
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   806
     the true evaluation.
16216
386578673083 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15801
diff changeset
   807
     If none of the evaluations returns true, return the value of anExceptionValue"
15759
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   808
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   809
    order do:[:key | 
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   810
        |el|
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   811
        el := self at:key.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   812
        (aBlock value:el) ifTrue:[^ el]
15759
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   813
    ].
16216
386578673083 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15801
diff changeset
   814
    ^ anExceptionValue value
15759
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   815
!
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   816
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   817
do: aBlock 
16765
72c7f90b2c4d class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 16216
diff changeset
   818
    "Evaluate aBlock for each of the dictionary's values.
72c7f90b2c4d class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 16216
diff changeset
   819
     Enumerate them in the order by which they were added."
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   820
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   821
    order do: [:key | aBlock value: (self at: key)]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   822
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   823
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   824
do: aBlock from: firstIndex to: lastIndex
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   825
    <resource: #obsolete>
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   826
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   827
    self obsoleteMethodWarning:'use #from:to:do:'.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   828
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   829
    self from:firstIndex to:lastIndex do:aBlock.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   830
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   831
24812
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   832
doWithIndex:aBlock 
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   833
    "like keysAndValuesDo:, but passes the index as second argument.
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   834
     Same as withIndexDo:, due to parallel evolution of different Smalltalk dialects"
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   835
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   836
    order doWithIndex: [:key :idx | aBlock value:(self at: key) value:idx ]
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   837
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   838
    "
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   839
     |d|
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   840
     d := OrderedDictionary new.
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   841
     d at:'z' put:'ZZZ'.
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   842
     d at:'b' put:'BBB'.
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   843
     d at:'a' put:'AAA'.
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   844
     d doWithIndex:[:val :idx | Transcript showCR:'idx: %1 val: %2' with:idx with:val].
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   845
    "
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   846
!
25a3fac40fce #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24419
diff changeset
   847
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   848
findFirst:aBlock ifNone:exceptionalValue
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   849
    "Return the index of the first association in the dictionary for which aBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   850
    evaluates as true. If the block does not evaluate to true, return exceptionalValue"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   851
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   852
    |stop  "{ Class: SmallInteger }" |
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   853
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   854
    stop := order size.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   855
    1 to:stop do:[:index | 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   856
        (aBlock value:(self associationAt:(order at:index))) ifTrue: [^ index]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   857
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   858
    ^ exceptionalValue value
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   859
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   860
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   861
findLast:aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   862
    "Return the index of the last association in the dictionary for which aBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   863
     evaluates as true. If the block does not evaluate to true, return 0"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   864
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   865
    |start "{ Class: SmallInteger }"|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   866
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   867
    start := order size.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   868
    start to:1 by:-1 do: [:index | 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   869
        (aBlock value:(self associationAt:(order at:index))) ifTrue: [^ index]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   870
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   871
    ^ 0
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   872
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   873
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   874
findLast:aBlock startingAt:startIndex
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   875
    "Return the index of the last association in the dictionary for which aBlock
15662
e87729351c27 comments
Claus Gittinger <cg@exept.de>
parents: 15534
diff changeset
   876
     evaluates as true. Start the backward search at startIndex.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   877
     If the block does not evaluate to true, return 0"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   878
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   879
    |start "{ Class: SmallInteger }"|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   880
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   881
    start := startIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   882
    start to:1 by:-1 do: [:index | 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   883
        (aBlock value:(self associationAt:(order at:index))) ifTrue: [^ index]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   884
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   885
    ^ 0
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   886
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   887
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   888
findLast:aBlock startingAt:startIndex endingAt:endIndex
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   889
    "Return the index of the last association in the dictionary for which aBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   890
     evaluates as true. Start the search at startIndex.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   891
     End the search at endIndex or when an element is found.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   892
     If the block does not evaluate to true, return 0"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   893
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   894
    |start "{ Class: SmallInteger }" 
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   895
     end "{ Class: SmallInteger }"|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   896
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   897
    start := startIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   898
    end := endIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   899
    start to:end by:-1 do: [:index | 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   900
        (aBlock value:(self associationAt:(order at:index))) ifTrue: [^ index]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   901
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   902
    ^ 0
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
from:firstIndex to:lastIndex do: aBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   906
    "Evaluate aBlock with each of the dictionary's associations from index 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   907
    firstIndex to index secondIndex as the argument."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   908
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   909
    |start "{ Class:SmallInteger }"
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   910
     stop  "{ Class:SmallInteger }" |
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   911
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   912
    start := firstIndex. "/ these assignments force type checking...
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   913
    stop := lastIndex.  "/ and guarantee inline loop code below.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   914
    order from:start to:stop do:[:key |
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   915
        aBlock value: (self at:key)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   916
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   917
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   918
15759
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   919
keysAndValuesDetect: aBlock ifNone:exceptionBlock
19736
184be3ec2f62 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19274
diff changeset
   920
    "evaluate the argument, aBlock for each key and value in the receiver,
184be3ec2f62 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19274
diff changeset
   921
     until the block returns true; 
22950
736804d40826 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22322
diff changeset
   922
     in this case return the value which caused the true evaluation.
15759
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   923
     If none of the evaluations returns true, return the result of the
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   924
     evaluation of the exceptionBlock"
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   925
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   926
    order do:[:key | 
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   927
        |el|
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   928
        el := self at:key.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   929
        (aBlock value:key value:el) ifTrue:[^ el]
15759
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   930
    ].
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   931
    ^ exceptionBlock value
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   932
!
3d3ab3a446e5 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15662
diff changeset
   933
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   934
keysAndValuesDo:aBlock
15451
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   935
    "perform the block for all keys and values in the collection.
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   936
     Enumerate them in the order by which they were added.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   937
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   938
     See also:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   939
        #associationsDo:   (which passes key-value associations)
16765
72c7f90b2c4d class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 16216
diff changeset
   940
        #keysDo:           (which passes keys only)
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   941
        #do:               (which passes values only)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   942
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   943
     WARNING: do not add/remove elements while iterating over the receiver.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   944
              Iterate over a copy to do this."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   945
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   946
    order do:[:key | aBlock value:key value:(self at: key)].
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   947
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   948
    "Modified: / 26.6.1999 / 10:55:30 / ps"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   949
    "Created: / 15.10.1999 / 16:49:31 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   950
    "Modified: / 15.10.1999 / 16:53:50 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   951
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   952
15451
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   953
keysAndValuesReverseDo:aBlock
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   954
    "perform the block for all keys and values in the collection.
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   955
     Enumerate them in the reverse order from which they were added.
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   956
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   957
     See also:
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   958
        #associationsDo:   (which passes key-value associations)
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   959
        #keysAndValuesDo:  (which passes keys & values separately)
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   960
        #do:               (which passes values only)
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   961
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   962
     WARNING: do not add/remove elements while iterating over the receiver.
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   963
              Iterate over a copy to do this."
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   964
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   965
    order reverseDo: [:key | aBlock value:key value:(self at: key)].
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   966
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   967
    "Modified: / 26.6.1999 / 10:55:30 / ps"
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   968
    "Created: / 15.10.1999 / 16:49:31 / cg"
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   969
    "Modified: / 15.10.1999 / 16:53:50 / cg"
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   970
!
8be26a61d680 class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 15134
diff changeset
   971
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   972
keysDo:aBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   973
    "evaluate the argument, aBlock for every key in the collection.
16765
72c7f90b2c4d class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 16216
diff changeset
   974
     Enumerate them in the order by which they were added.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   975
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   976
     See also:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   977
        #associationsDo:   (which passes key-value associations)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   978
        #keysAndValuesDo:  (which passes keys & values separately)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   979
        #do:               (which passes values only)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   980
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   981
     WARNING: do not add/remove elements while iterating over the receiver.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   982
              Iterate over a copy to do this."
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 do:[:key | aBlock value:key].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   985
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   986
    "Created: / 26-06-1999 / 10:53:00 / ps"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   987
    "Modified: / 24-08-2010 / 10:14:06 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   988
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   989
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   990
reverseDo: aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   991
    "Evaluate aBlock with each of the dictionary's associations as the argument,
16765
72c7f90b2c4d class: OrderedDictionary
Claus Gittinger <cg@exept.de>
parents: 16216
diff changeset
   992
     starting with the last added element and taking each in sequence up to the first."
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   993
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   994
    |sz  "{ Class:SmallInteger }"|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   995
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   996
    sz := order size.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
   997
    sz to:1 by:-1 do: [:index | 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   998
        aBlock value:(self associationAt:(order at:index))
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   999
    ]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1000
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1001
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1002
reversed
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1003
    "Return with a new OrderedDictionary with its associations in reverse order."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1004
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1005
    ^ self copy reverse.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1006
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1007
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1008
select:aBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1009
    "Evaluate aBlock with each of the dictionary's values as the argument.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1010
     Collect into a new OrderedDictionary only those associations for which 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1011
     aBlock evaluated to true. Return the new OrderedDictionary."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1012
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1013
    |newColl|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1014
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1015
    newColl := self species new.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1016
    order do:[:key | 
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1017
        |val|
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1018
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1019
        val := self at:key.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1020
        (aBlock value:val) ifTrue:[
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1021
            newColl at:key put:val.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1022
        ]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1023
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1024
    ^ newColl
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1025
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1026
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1027
!OrderedDictionary methodsFor:'initialization'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1028
25321
05cb98fd500a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 24812
diff changeset
  1029
initializeForCapacity:minSize
05cb98fd500a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 24812
diff changeset
  1030
    "initialize the contents array (for at least minSize slots)
05cb98fd500a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 24812
diff changeset
  1031
     and set tally to zero.
05cb98fd500a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 24812
diff changeset
  1032
     The size is increased to the next prime for better hashing behavior."
05cb98fd500a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 24812
diff changeset
  1033
05cb98fd500a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 24812
diff changeset
  1034
    super initializeForCapacity:minSize.
05cb98fd500a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 24812
diff changeset
  1035
    self initializeOrder:minSize
05cb98fd500a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 24812
diff changeset
  1036
!
05cb98fd500a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 24812
diff changeset
  1037
21218
fa26586f306b #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20633
diff changeset
  1038
initializeOrder:count
fa26586f306b #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20633
diff changeset
  1039
    order := OrderedCollection new:count
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1040
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1041
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1042
!OrderedDictionary methodsFor:'private'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1043
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1044
removeFromOrder: aKey
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1045
    <resource: #obsolete>
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1046
 
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1047
    order remove: aKey ifAbsent: []
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1048
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1049
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1050
!OrderedDictionary methodsFor:'queries'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1051
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1052
occurrencesOfKey: aKey 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1053
    "Return how many of the dictionary's keys are equal to aKey."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1054
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1055
    ^ order count:[:eachKey | aKey = eachKey]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1056
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1057
"/ cg: the original code was not very smalltalkish:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1058
"/
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1059
"/    | count |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1060
"/
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1061
"/    count := 0.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1062
"/    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
  1063
"/    ^count
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1064
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1065
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1066
occurrencesOfValue: aValue 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1067
    "Return how many of the dictionary's values are equal to aValue."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1068
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1069
    ^ order count:[:eachKey | aValue = (self at:eachKey)]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1070
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1071
"/ cg: the original code was not very smalltalkish:
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1072
"/
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1073
"/    | count |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1074
"/
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1075
"/    count := 0.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1076
"/    1 to: self size do: [:index | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1077
"/        aValue = (self at: (order at: index)) ifTrue: [count := count + 1]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1078
"/    ^count
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1079
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1080
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1081
!OrderedDictionary methodsFor:'removing'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1082
19814
8a82761e599f #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 19736
diff changeset
  1083
clearContents
8a82761e599f #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 19736
diff changeset
  1084
    "remove all elements from the receiver, but do not shrink. Returns the receiver."
8a82761e599f #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 19736
diff changeset
  1085
8a82761e599f #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 19736
diff changeset
  1086
    super clearContents.
8a82761e599f #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 19736
diff changeset
  1087
    order clearContents.
8a82761e599f #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 19736
diff changeset
  1088
!
8a82761e599f #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 19736
diff changeset
  1089
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1090
removeFirst
24348
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1091
    "remove the first element from the receiver.
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1092
     Return the removed element.
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1093
     Raise an error if the receiver is empty"
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1094
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1095
    |key|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1096
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1097
    order size == 0 ifTrue:[
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1098
        "error if collection is empty"
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1099
        ^ self emptyCollectionError.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1100
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1101
    key := order removeFirst.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1102
    ^ super removeKey:key.
24348
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1103
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1104
    "Modified (comment): / 24-06-2019 / 12:45:56 / Claus Gittinger"
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1105
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1106
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1107
removeFromIndex:fromIndex toIndex:toIndex
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1108
    "Returns the receiver."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1109
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1110
    |start "{ Class:SmallInteger }"
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1111
     stop  "{ Class:SmallInteger }" |
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1112
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1113
    start := fromIndex. 
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1114
    stop := toIndex. 
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1115
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1116
    order from:start to:stop do:[:key |
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1117
        super removeKey:key.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1118
    ].
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1119
    order removeFromIndex:fromIndex toIndex:toIndex.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1120
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1121
    "Created: 28.9.1995 / 12:04:33 / stefan"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1122
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1123
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1124
removeIndex:anInteger
24349
c660ae249716 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24348
diff changeset
  1125
    "remove an element from the receiver.
c660ae249716 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24348
diff changeset
  1126
     Return the removed element.
c660ae249716 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24348
diff changeset
  1127
     Raise an error if the index is invalid"
24348
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1128
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1129
    self removeFromIndex:anInteger toIndex:anInteger.
24348
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1130
24349
c660ae249716 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24348
diff changeset
  1131
    "Modified (comment): / 24-06-2019 / 12:49:44 / Claus Gittinger"
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1132
!
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1133
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1134
removeKey:aKey
24346
6e8e1a508372 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24183
diff changeset
  1135
    "remove the association under aKey from the collection,
6e8e1a508372 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24183
diff changeset
  1136
     return the value previously stored there.
6e8e1a508372 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24183
diff changeset
  1137
     If it was not in the collection report an error.
6e8e1a508372 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24183
diff changeset
  1138
6e8e1a508372 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24183
diff changeset
  1139
     WARNING: do not remove elements while iterating over the receiver.
6e8e1a508372 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24183
diff changeset
  1140
              See #saveRemoveKey: to do this."
6e8e1a508372 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24183
diff changeset
  1141
              
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1142
    order remove:aKey.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1143
    ^ super removeKey:aKey.
24346
6e8e1a508372 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24183
diff changeset
  1144
6e8e1a508372 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24183
diff changeset
  1145
    "Modified (comment): / 24-06-2019 / 12:44:45 / Claus Gittinger"
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1146
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1147
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1148
removeKey:aKey ifAbsent:aBlock
19842
ffc412b82f42 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19814
diff changeset
  1149
    "remove key (and the associated value) from the receiver, 
ffc412b82f42 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19814
diff changeset
  1150
     return the value previously stored there.
ffc412b82f42 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19814
diff changeset
  1151
     If it was not in the collection return the result
ffc412b82f42 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19814
diff changeset
  1152
     from evaluating aBlock."
ffc412b82f42 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19814
diff changeset
  1153
     
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1154
    |oldValue|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1155
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1156
    oldValue := super removeKey:aKey ifAbsent:aBlock.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1157
    order remove:aKey ifAbsent:[].
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1158
    ^ oldValue.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1159
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1160
    "Created: / 31-01-2011 / 22:04:01 / cg"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1161
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1162
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1163
removeLast
24348
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1164
    "remove the last element from the receiver.
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1165
     Return the removed element.
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1166
     Raise an error if the receiver is empty"
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1167
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1168
    |key|
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1169
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1170
    order size == 0 ifTrue:[
24348
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1171
        "error if collection is empty"
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1172
24348
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1173
        ^ self emptyCollectionError.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1174
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1175
    key := order removeLast.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1176
    ^ super removeKey:key.
24348
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1177
f6fb3ad93210 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24346
diff changeset
  1178
    "Modified (comment): / 24-06-2019 / 12:45:45 / Claus Gittinger"
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1179
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1180
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1181
!OrderedDictionary methodsFor:'searching'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1182
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1183
identityIndexOfAssociation: anAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1184
    "Return the identity index of anAssociation within the receiver. If the receiver
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1185
    does not contain anAssociation, return 0."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1186
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1187
    ^ self identityIndexOfAssociation: anAssociation ifAbsent: [0]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1188
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1189
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1190
identityIndexOfAssociation: anAssociation ifAbsent: exceptionBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1191
    "Return the identity index of anAssociation within the receiver. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1192
     If the receiver does not contain anAssociation, 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1193
     return the result of evaluating the exceptionBlock."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1194
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1195
    "/ as ST/X's dictionaries do not store the associations 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1196
    "/ (instead, they store the keys and values in separate collections)
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1197
    "/ 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
  1198
    self error:'this does not work in Smalltalk/X'.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1199
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1200
    order keysAndValuesDo:[:i :key |
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1201
        (self associationAt:key) == anAssociation ifTrue: [^i]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1202
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1203
    ^exceptionBlock value
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1204
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1205
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1206
identityIndexOfKey: aKey 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1207
    "Return the identity index of aKey within the receiver. If the receiver 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1208
    does not contain aKey, return 0."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1209
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1210
    ^self identityIndexOfKey: aKey ifAbsent: [0]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1211
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1212
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1213
identityIndexOfKey: aKey ifAbsent: exceptionBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1214
    "Return the identity index of aKey within the receiver.  If the receiver does
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1215
    not contain aKey, return the result of evaluating the exceptionBlock."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1216
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1217
    ^ order identityIndexOf:aKey ifAbsent:exceptionBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1218
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1219
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1220
identityIndexOfValue: aValue 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1221
    "Return the identity index of aValue within the receiver. If the receiver 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1222
    does not contain aValue, return 0."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1223
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1224
    ^self identityIndexOfValue: aValue ifAbsent: [0]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1225
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1226
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1227
identityIndexOfValue: aValue ifAbsent: exceptionBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1228
    "Return the identity index of aValue within the receiver. If the receiver 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1229
    does not contain aValue, return the result of evaluating the exceptionBlock."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1230
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1231
    order keysAndValuesDo:[:i :key | (self at:key) == aValue ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1232
    ^exceptionBlock value
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1233
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1234
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1235
indexOfAssociation: anAssociation 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1236
    "Return the index of anAssociation within the receiver. If the receiver does
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1237
    not contain anAssociation, return 0."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1238
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1239
    ^self indexOfAssociation: anAssociation ifAbsent: [0]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1240
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1241
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1242
indexOfAssociation: anAssociation ifAbsent: exceptionBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1243
    "Return the identity index of anAssociation within the receiver. If the receiver
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1244
    does not contain anAssociation, return the result of evaluating the exceptionBlock."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1245
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1246
    order keysAndValuesDo:[:i :key | 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1247
        (self associationAt:key) = anAssociation ifTrue: [^i]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1248
    ].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1249
    ^exceptionBlock value
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1250
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1251
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1252
indexOfKey: aKey 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1253
    "Return the index of aKey within the receiver. If the receiver does 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1254
     not contain aKey, return 0."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1255
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1256
    ^self indexOfKey: aKey ifAbsent: [0]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1257
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1258
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1259
indexOfKey: aKey ifAbsent: exceptionBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1260
    "Return the identity index of aKey within the receiver.  If the receiver does
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1261
     not contain aKey, return the result of evaluating the exceptionBlock."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1262
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1263
    ^ order indexOf:aKey ifAbsent:exceptionBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1264
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1265
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1266
indexOfValue: aValue 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1267
    "Return the index of aValue within the receiver. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1268
     If the receiver does not contain aValue, return 0."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1269
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1270
    ^self indexOfValue: aValue ifAbsent: [0]
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1271
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1272
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1273
indexOfValue: aValue ifAbsent: exceptionBlock 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1274
    "Return the identity index of aValue within the receiver. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1275
     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
  1276
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1277
    order keysAndValuesDo:[:i :key | (self at:key) = aValue ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1278
    ^ exceptionBlock value
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1279
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1280
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1281
nextIndexOfAssociation: aAssociation from: startIndex to: stopIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1282
    "Return the next index of aAssociation within the receiver between startIndex
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1283
     and stopIndex. If the receiver does not contain aAssociation, return nil"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1284
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1285
    |start "{ Class:SmallInteger }"
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1286
     stop  "{ Class:SmallInteger }"|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1287
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1288
    start := startIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1289
    stop := stopIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1290
    start to: stop do: [:i | 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1291
        (self associationAt: (order at: i)) = aAssociation ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1292
    ^nil
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1293
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1294
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1295
nextIndexOfKey: aKey from: startIndex to: stopIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1296
    "Return the next index of aKey within the receiver between startIndex and 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1297
     stopIndex.  If the receiver does not contain aKey, return nil"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1298
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1299
    |start "{ Class:SmallInteger }"
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1300
     stop  "{ Class:SmallInteger }"|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1301
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1302
    start := startIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1303
    stop := stopIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1304
    start to: stop do: [:i | 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1305
        (order at: i) = aKey ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1306
    ^nil
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1307
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1308
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1309
nextIndexOfValue: aValue from: startIndex to: stopIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1310
    "Return the next index of aValue within the receiver between startIndex and
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1311
     stopIndex. If the receiver does not contain aValue, return nil"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1312
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1313
    |start "{ Class:SmallInteger }"
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1314
     stop  "{ Class:SmallInteger }" |
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1315
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1316
    start := startIndex. 
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1317
    stop := stopIndex.  
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1318
    start to: stop do: [:i | 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1319
        (self at: (order at: i)) = aValue ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1320
    ^nil
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1321
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1322
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1323
prevIndexOfAssociation: aAssociation from: startIndex to: stopIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1324
    "Return the previous index of aAssociation within the receiver between 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1325
     startIndex  and stopIndex working backwards through the receiver. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1326
     If the receiver does not contain aAssociation, return nil"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1327
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1328
    |start "{ Class:SmallInteger }"
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1329
     stop  "{ Class:SmallInteger }"|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1330
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1331
    start := startIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1332
    stop := stopIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1333
    start to: stop by: -1
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1334
            do: [:i | (self associationAt: (order at: i)) = aAssociation ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1335
    ^nil
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1336
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1337
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1338
prevIndexOfKey: aKey from: startIndex to: stopIndex 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1339
    "Return the previous index of aKey within the receiver between startIndex and
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1340
     stopIndex working backwards through the receiver. 
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1341
     If the receiver does not contain aKey, return nil"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1342
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1343
    |start "{ Class:SmallInteger }"
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1344
     stop  "{ Class:SmallInteger }"|
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1345
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1346
    start := startIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1347
    stop := stopIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1348
    start to: stop by: -1
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1349
            do: [:i | (order at: i) = aKey ifTrue: [^i]].
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1350
    ^nil
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1351
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1352
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1353
prevIndexOfValue:aValue from:startIndex to:stopIndex 
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1354
    "Return the previous index of aValue within the receiver between startIndex
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1355
     and stopIndex working backwards through the receiver.
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1356
     If the receiver does not contain aValue, return nil"
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1357
    
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1358
    |start "{ Class:SmallInteger }"
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1359
     stop  "{ Class:SmallInteger }"|
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1360
15801
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1361
    start := startIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1362
    stop := stopIndex.
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1363
    start to:stop by:-1 do:[:i | 
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1364
        (self at:(order at:i)) = aValue ifTrue:[
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1365
            ^ i
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1366
        ]
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1367
    ].
9a2b30dc6345 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents: 15759
diff changeset
  1368
    ^ nil
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1369
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1370
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1371
!OrderedDictionary methodsFor:'sorting & reordering'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1372
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1373
reverse
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1374
    "Destructively reverse my order.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1375
     WARNING: this is a destructive operation, which modifies the receiver.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1376
              Please use reversed (with a d) for a functional version."
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1377
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1378
    order reverse
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1379
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1380
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1381
sort
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1382
    "Destructively sort my order.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1383
     WARNING: this is a destructive operation, which modifies the receiver"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1384
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1385
    order sort
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1386
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1387
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1388
sort:aSortBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1389
    "Destructively sort my order.
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1390
     WARNING: this is a destructive operation, which modifies the receiver"
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1391
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1392
    order sort:aSortBlock
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1393
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1394
18465
e9e4bb62235f added isOrdered query
Claus Gittinger <cg@exept.de>
parents: 16765
diff changeset
  1395
!OrderedDictionary methodsFor:'testing'!
e9e4bb62235f added isOrdered query
Claus Gittinger <cg@exept.de>
parents: 16765
diff changeset
  1396
e9e4bb62235f added isOrdered query
Claus Gittinger <cg@exept.de>
parents: 16765
diff changeset
  1397
isOrdered
e9e4bb62235f added isOrdered query
Claus Gittinger <cg@exept.de>
parents: 16765
diff changeset
  1398
    "return true, if the receiver's elements are ordered.
e9e4bb62235f added isOrdered query
Claus Gittinger <cg@exept.de>
parents: 16765
diff changeset
  1399
     Re-redefined to true here, as I do have an order"
e9e4bb62235f added isOrdered query
Claus Gittinger <cg@exept.de>
parents: 16765
diff changeset
  1400
e9e4bb62235f added isOrdered query
Claus Gittinger <cg@exept.de>
parents: 16765
diff changeset
  1401
    ^ true
e9e4bb62235f added isOrdered query
Claus Gittinger <cg@exept.de>
parents: 16765
diff changeset
  1402
! !
e9e4bb62235f added isOrdered query
Claus Gittinger <cg@exept.de>
parents: 16765
diff changeset
  1403
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1404
!OrderedDictionary class methodsFor:'documentation'!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1405
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1406
version
19099
3b1589b9e193 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18465
diff changeset
  1407
    ^ '$Header$'
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1408
!
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1409
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1410
version_CVS
19099
3b1589b9e193 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18465
diff changeset
  1411
    ^ '$Header$'
15133
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1412
! !
e47fbf1e1fe0 class: OrderedDictionary
Stefan Vogel <sv@exept.de>
parents:
diff changeset
  1413