VirtualDictionary.st
author Claus Gittinger <cg@exept.de>
Tue, 25 Jun 2019 14:28:51 +0200
changeset 5050 44fa8672d102
parent 4549 a9d2d65fda08
child 5387 64a6ef96c06f
permissions -rw-r--r--
#DOCUMENTATION by cg class: SharedQueue comment/format in: #next #nextWithTimeout:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4549
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
     1
"{ Encoding: utf8 }"
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
     2
4541
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ Package: 'stx:libbasic2' }"
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
"{ NameSpace: Smalltalk }"
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
Collection subclass:#VirtualDictionary
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	instanceVariableNames:'fetchBlock'
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
	classVariableNames:''
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
	poolDictionaries:''
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
	category:'Collections-Unordered'
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
!VirtualDictionary class methodsFor:'documentation'!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
documentation
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
"
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
    a collection which looks like a (read-only) dictionary to the outside,
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
    but invokes a pluggable fetchBlock to retrieve keys.
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
    [author:]
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
        cg
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
    [instance variables:]
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
    [class variables:]
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
    [see also:]
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
"
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
! !
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
!VirtualDictionary methodsFor:'accessing'!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
4549
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    35
at:aKey
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    36
    ^ self at:aKey ifAbsent:nil
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    37
!
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    38
4541
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
at:aKey ifAbsent:exceptionValue
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    |value|
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    value := fetchBlock value:aKey.
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    value isNil ifTrue:[
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
        ^ exceptionValue value
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    ].
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    ^ value
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
fetchBlock:something
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    fetchBlock := something.
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
! !
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
4549
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    53
!VirtualDictionary methodsFor:'queries'!
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    54
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    55
includesKey:aKey
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    56
    ^ (fetchBlock value:aKey) notNil
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    57
! !
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    58
4541
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
!VirtualDictionary class methodsFor:'documentation'!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
version
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    ^ '$Header$'
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
version_CVS
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    ^ '$Header$'
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
! !
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68