VirtualDictionary.st
author Claus Gittinger <cg@exept.de>
Sat, 02 May 2020 21:40:13 +0200
changeset 5476 7355a4b11cb6
parent 5387 64a6ef96c06f
permissions -rw-r--r--
#FEATURE by cg class: Socket class added: #newTCPclientToHost:port:domain:domainOrder:withTimeout: changed: #newTCPclientToHost:port:domain:withTimeout:
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
5387
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
     3
"
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
     4
 COPYRIGHT (c) 2018 by eXept Software AG
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
     5
              All Rights Reserved
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
     6
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
     7
 This software is furnished under a license and may be used
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
     8
 only in accordance with the terms of that license and with the
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    10
 be provided or otherwise made available to, or used by, any
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    11
 other person.  No title to or ownership of the software is
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    12
 hereby transferred.
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    13
"
4541
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ Package: 'stx:libbasic2' }"
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
"{ NameSpace: Smalltalk }"
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
Collection subclass:#VirtualDictionary
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:'fetchBlock'
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	classVariableNames:''
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	category:'Collections-Unordered'
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!VirtualDictionary class methodsFor:'documentation'!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
5387
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    27
copyright
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    28
"
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    29
 COPYRIGHT (c) 2018 by eXept Software AG
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    30
              All Rights Reserved
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    31
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    32
 This software is furnished under a license and may be used
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    33
 only in accordance with the terms of that license and with the
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    35
 be provided or otherwise made available to, or used by, any
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    36
 other person.  No title to or ownership of the software is
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    37
 hereby transferred.
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    38
"
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    39
!
64a6ef96c06f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4549
diff changeset
    40
4541
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
documentation
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
"
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    a collection which looks like a (read-only) dictionary to the outside,
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    but invokes a pluggable fetchBlock to retrieve keys.
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    [author:]
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
        cg
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    [instance variables:]
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    [class variables:]
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    [see also:]
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
"
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
! !
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
!VirtualDictionary methodsFor:'accessing'!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
4549
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    60
at:aKey
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    61
    ^ self at:aKey ifAbsent:nil
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    62
!
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    63
4541
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
at:aKey ifAbsent:exceptionValue
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    |value|
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
    value := fetchBlock value:aKey.
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    value isNil ifTrue:[
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
        ^ exceptionValue value
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    ].
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    ^ value
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
fetchBlock:something
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    fetchBlock := something.
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
! !
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
4549
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    78
!VirtualDictionary methodsFor:'queries'!
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    79
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    80
includesKey:aKey
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    81
    ^ (fetchBlock value:aKey) notNil
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    82
! !
a9d2d65fda08 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4541
diff changeset
    83
4541
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
!VirtualDictionary class methodsFor:'documentation'!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
version
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    ^ '$Header$'
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
!
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
version_CVS
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    ^ '$Header$'
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
! !
af34585a0a2f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93