CacheDictionary.st
author claus
Wed, 13 Oct 1993 01:17:11 +0100
changeset 2 07d9ee98e092
parent 0 1cf8d1747859
child 13 f089ff744cd1
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
07d9ee98e092 *** empty log message ***
claus
parents: 0
diff changeset
     1
"
07d9ee98e092 *** empty log message ***
claus
parents: 0
diff changeset
     2
 COPYRIGHT (c) 1993 by Claus Gittinger
07d9ee98e092 *** empty log message ***
claus
parents: 0
diff changeset
     3
              All Rights Reserved
07d9ee98e092 *** empty log message ***
claus
parents: 0
diff changeset
     4
07d9ee98e092 *** empty log message ***
claus
parents: 0
diff changeset
     5
 This software is furnished under a license and may be used
07d9ee98e092 *** empty log message ***
claus
parents: 0
diff changeset
     6
 only in accordance with the terms of that license and with the
07d9ee98e092 *** empty log message ***
claus
parents: 0
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
07d9ee98e092 *** empty log message ***
claus
parents: 0
diff changeset
     8
 be provided or otherwise made available to, or used by, any
07d9ee98e092 *** empty log message ***
claus
parents: 0
diff changeset
     9
 other person.  No title to or ownership of the software is
07d9ee98e092 *** empty log message ***
claus
parents: 0
diff changeset
    10
 hereby transferred.
07d9ee98e092 *** empty log message ***
claus
parents: 0
diff changeset
    11
"
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    12
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    13
Dictionary subclass:#CacheDictionary
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    14
         instanceVariableNames:''
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    15
         classVariableNames:''
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    16
         poolDictionaries:''
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    17
         category:'Collections-Unordered'
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    18
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    19
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    20
CacheDictionary comment:'
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    21
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    22
COPYRIGHT (c) 1993 by Claus Gittinger
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    23
              All Rights Reserved
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    24
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    25
a CacheDictionary is a Dictionary which will not grow - i.e. keep
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    26
only a limited number of elements.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    27
2
07d9ee98e092 *** empty log message ***
claus
parents: 0
diff changeset
    28
$Header: /cvs/stx/stx/libbasic2/CacheDictionary.st,v 1.3 1993-10-13 00:15:06 claus Exp $
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    29
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    30
written jan 93 by claus
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    31
'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    32
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    33
!CacheDictionary methodsFor:'private'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    34
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    35
findKeyOrNil:key  
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    36
    "Look for the key in the receiver.  If it is found, return
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    37
     the index of the association containing the key, otherwise
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    38
     return the index of the first unused slot. If no empty slot
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    39
     is available, make one empty"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    40
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    41
    |index  "{ Class:SmallInteger }"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    42
     length "{ Class:SmallInteger }"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    43
     startIndex
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    44
     probe|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    45
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    46
    length := keyArray basicSize.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    47
    startIndex := key hash \\ length + 1.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    48
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    49
    index := startIndex.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    50
    [true] whileTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    51
        probe := keyArray basicAt:index.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    52
        (probe == nil or: [probe = key]) ifTrue:[^ index].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    53
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    54
        index := index + 1.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    55
        index > length ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    56
            index := 1.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    57
        ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    58
        index == startIndex ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    59
            valueArray basicAt:startIndex put:nil.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    60
            tally := tally - 1.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    61
            ^ startIndex
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    62
        ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    63
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    64
    ]
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    65
! !