CacheDictionary.st
author claus
Fri, 16 Jul 1993 11:39:41 +0200
changeset 0 1cf8d1747859
child 2 07d9ee98e092
permissions -rw-r--r--
Initial revision
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     1
'From Smalltalk/X, Version:2.4.7 on 12-Jan-1993 at 21:32:36'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     2
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     3
Dictionary subclass:#CacheDictionary
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     4
         instanceVariableNames:''
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     5
         classVariableNames:''
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     6
         poolDictionaries:''
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     7
         category:'Collections-Unordered'
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     8
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     9
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    10
CacheDictionary comment:'
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    11
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    12
COPYRIGHT (c) 1993 by Claus Gittinger
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    13
              All Rights Reserved
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    14
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    15
a CacheDictionary is a Dictionary which will not grow - i.e. keep
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    16
only a limited number of elements.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    17
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    18
%W% %E%
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    19
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    20
written jan 93 by claus
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    21
'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    22
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    23
!CacheDictionary methodsFor:'private'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    24
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    25
findKeyOrNil:key  
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    26
    "Look for the key in the receiver.  If it is found, return
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    27
     the index of the association containing the key, otherwise
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    28
     return the index of the first unused slot. If no empty slot
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    29
     is available, make one empty"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    30
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    31
    |index  "{ Class:SmallInteger }"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    32
     length "{ Class:SmallInteger }"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    33
     startIndex
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    34
     probe|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    35
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    36
    length := keyArray basicSize.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    37
    startIndex := key hash \\ length + 1.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    38
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    39
    index := startIndex.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    40
    [true] whileTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    41
        probe := keyArray basicAt:index.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    42
        (probe == nil or: [probe = key]) ifTrue:[^ index].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    43
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    44
        index := index + 1.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    45
        index > length ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    46
            index := 1.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    47
        ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    48
        index == startIndex ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    49
            valueArray basicAt:startIndex put:nil.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    50
            tally := tally - 1.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    51
            ^ startIndex
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    52
        ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    53
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    54
    ]
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    55
! !