VirtualDictionary.st
author Claus Gittinger <cg@exept.de>
Fri, 22 Dec 2017 15:25:48 +0100
changeset 4541 af34585a0a2f
child 4549 a9d2d65fda08
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4541
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ NameSpace: Smalltalk }"
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
Collection subclass:#VirtualDictionary
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:'fetchBlock'
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:''
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
	category:'Collections-Unordered'
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
!VirtualDictionary class methodsFor:'documentation'!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
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
    a collection which looks like a (read-only) dictionary to the outside,
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
    but invokes a pluggable fetchBlock to retrieve keys.
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
    [author:]
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
        cg
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
    [instance variables:]
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
    [class 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
    [see also:]
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
"
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
!VirtualDictionary methodsFor:'accessing'!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
at:aKey ifAbsent:exceptionValue
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
    |value|
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
    value := fetchBlock value:aKey.
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
    value isNil ifTrue:[
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
        ^ exceptionValue value
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
    ].
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
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
fetchBlock:something
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    fetchBlock := something.
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
! !
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
!VirtualDictionary class methodsFor:'documentation'!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
version
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    ^ '$Header$'
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
version_CVS
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    ^ '$Header$'
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
! !
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56