SharedPool.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 02 Dec 2009 21:30:55 +0000
branchjv
changeset 17735 6a5bc05f696a
parent 17734 406b1590afe8
child 17761 b0e5971141bc
permissions -rw-r--r--
Merged with trunk
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8728
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
     1
"
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
     2
 COPYRIGHT (c) 2004 by eXept Software AG
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
     3
              All Rights Reserved
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
     4
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
     5
 This software is furnished under a license and may be used
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
     6
 only in accordance with the terms of that license and with the
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
     8
 be provided or otherwise made available to, or used by, any
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
     9
 other person.  No title to or ownership of the software is
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    10
 hereby transferred.
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    11
"
8538
68e006f46d87 initial checkin
ca
parents:
diff changeset
    12
"{ Package: 'stx:libbasic' }"
68e006f46d87 initial checkin
ca
parents:
diff changeset
    13
68e006f46d87 initial checkin
ca
parents:
diff changeset
    14
Object subclass:#SharedPool
68e006f46d87 initial checkin
ca
parents:
diff changeset
    15
	instanceVariableNames:''
68e006f46d87 initial checkin
ca
parents:
diff changeset
    16
	classVariableNames:''
68e006f46d87 initial checkin
ca
parents:
diff changeset
    17
	poolDictionaries:''
68e006f46d87 initial checkin
ca
parents:
diff changeset
    18
	category:'Kernel-Classes'
68e006f46d87 initial checkin
ca
parents:
diff changeset
    19
!
68e006f46d87 initial checkin
ca
parents:
diff changeset
    20
68e006f46d87 initial checkin
ca
parents:
diff changeset
    21
!SharedPool class methodsFor:'documentation'!
68e006f46d87 initial checkin
ca
parents:
diff changeset
    22
8728
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    23
copyright
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    24
"
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    25
 COPYRIGHT (c) 2004 by eXept Software AG
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    26
              All Rights Reserved
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    27
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    28
 This software is furnished under a license and may be used
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    29
 only in accordance with the terms of that license and with the
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    31
 be provided or otherwise made available to, or used by, any
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    32
 other person.  No title to or ownership of the software is
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    33
 hereby transferred.
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    34
"
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    35
!
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8551
diff changeset
    36
8538
68e006f46d87 initial checkin
ca
parents:
diff changeset
    37
documentation
68e006f46d87 initial checkin
ca
parents:
diff changeset
    38
"
68e006f46d87 initial checkin
ca
parents:
diff changeset
    39
    A shared pool represents a set of bindings which are accessible to all classes
68e006f46d87 initial checkin
ca
parents:
diff changeset
    40
    which import the pool in its 'pool dictionaries'.
68e006f46d87 initial checkin
ca
parents:
diff changeset
    41
    SharedPool is NOT a dictionary but rather a name space.
68e006f46d87 initial checkin
ca
parents:
diff changeset
    42
    Bindings are represented by 'class variables' - as long as we have no better way to represent
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    43
    them at least. This is done to make stc happy (or at least, to not be forced to adapt it
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    44
    to any new semantics).
8538
68e006f46d87 initial checkin
ca
parents:
diff changeset
    45
"
68e006f46d87 initial checkin
ca
parents:
diff changeset
    46
! !
68e006f46d87 initial checkin
ca
parents:
diff changeset
    47
9091
35b746ada800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
    48
!SharedPool class methodsFor:'Compatibility-V''Age'!
35b746ada800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
    49
35b746ada800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
    50
declareConstant:constantName value:value
35b746ada800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
    51
    self == SharedPool ifTrue:[ self error ].
35b746ada800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
    52
35b746ada800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
    53
    (self classVarNames includes:constantName) ifFalse:[
35b746ada800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
    54
        self addClassVarName:constantName
35b746ada800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
    55
    ].
35b746ada800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
    56
35b746ada800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
    57
    self classVarAt:constantName put:value.
35b746ada800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
    58
! !
35b746ada800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
    59
8538
68e006f46d87 initial checkin
ca
parents:
diff changeset
    60
!SharedPool class methodsFor:'name lookup'!
68e006f46d87 initial checkin
ca
parents:
diff changeset
    61
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    62
at:name
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    63
    "retrieve a pool variable by name"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    64
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    65
    ^ self at:name ifAbsent:[self errorKeyNotFound:name]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    66
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    67
10853
72acafda369f dictionary compatible protocol added
Claus Gittinger <cg@exept.de>
parents: 9091
diff changeset
    68
at:name ifAbsent:aBlock
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    69
    "retrieve a pool variable by name"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    70
10853
72acafda369f dictionary compatible protocol added
Claus Gittinger <cg@exept.de>
parents: 9091
diff changeset
    71
    (self includesKey:name) ifFalse:[^ aBlock value].
72acafda369f dictionary compatible protocol added
Claus Gittinger <cg@exept.de>
parents: 9091
diff changeset
    72
    ^ self classVarAt:name
72acafda369f dictionary compatible protocol added
Claus Gittinger <cg@exept.de>
parents: 9091
diff changeset
    73
!
72acafda369f dictionary compatible protocol added
Claus Gittinger <cg@exept.de>
parents: 9091
diff changeset
    74
8538
68e006f46d87 initial checkin
ca
parents:
diff changeset
    75
bindingOf: varName
68e006f46d87 initial checkin
ca
parents:
diff changeset
    76
    "Answer the binding of some variable resolved in the scope of the receiver"
68e006f46d87 initial checkin
ca
parents:
diff changeset
    77
68e006f46d87 initial checkin
ca
parents:
diff changeset
    78
    | aSymbol binding |
68e006f46d87 initial checkin
ca
parents:
diff changeset
    79
11305
83f14d00b6a7 Change #halt: to #shouldImplement or #assert:
Stefan Vogel <sv@exept.de>
parents: 10853
diff changeset
    80
    self shouldImplement.       "not yet finished"
8538
68e006f46d87 initial checkin
ca
parents:
diff changeset
    81
    aSymbol := varName asSymbol.
68e006f46d87 initial checkin
ca
parents:
diff changeset
    82
68e006f46d87 initial checkin
ca
parents:
diff changeset
    83
    "First look in classVar dictionary."
68e006f46d87 initial checkin
ca
parents:
diff changeset
    84
    binding := self classPool bindingOf: aSymbol.
68e006f46d87 initial checkin
ca
parents:
diff changeset
    85
    binding ifNotNil:[^binding].
68e006f46d87 initial checkin
ca
parents:
diff changeset
    86
68e006f46d87 initial checkin
ca
parents:
diff changeset
    87
    "Next look in shared pools."
68e006f46d87 initial checkin
ca
parents:
diff changeset
    88
    self sharedPools do:[:pool |
68e006f46d87 initial checkin
ca
parents:
diff changeset
    89
            binding := pool bindingOf: aSymbol.
68e006f46d87 initial checkin
ca
parents:
diff changeset
    90
            binding ifNotNil:[^binding].
68e006f46d87 initial checkin
ca
parents:
diff changeset
    91
    ].
68e006f46d87 initial checkin
ca
parents:
diff changeset
    92
68e006f46d87 initial checkin
ca
parents:
diff changeset
    93
    "subclassing and environment are not preserved"
68e006f46d87 initial checkin
ca
parents:
diff changeset
    94
    ^nil
68e006f46d87 initial checkin
ca
parents:
diff changeset
    95
!
68e006f46d87 initial checkin
ca
parents:
diff changeset
    96
68e006f46d87 initial checkin
ca
parents:
diff changeset
    97
bindingsDo: aBlock
68e006f46d87 initial checkin
ca
parents:
diff changeset
    98
self halt:'unfinished implementation'.
68e006f46d87 initial checkin
ca
parents:
diff changeset
    99
    ^ self classPool bindingsDo: aBlock
68e006f46d87 initial checkin
ca
parents:
diff changeset
   100
!
68e006f46d87 initial checkin
ca
parents:
diff changeset
   101
68e006f46d87 initial checkin
ca
parents:
diff changeset
   102
classBindingOf: varName
68e006f46d87 initial checkin
ca
parents:
diff changeset
   103
    "For initialization messages grant the regular scope"
68e006f46d87 initial checkin
ca
parents:
diff changeset
   104
11305
83f14d00b6a7 Change #halt: to #shouldImplement or #assert:
Stefan Vogel <sv@exept.de>
parents: 10853
diff changeset
   105
    self shouldImplement.       "not yet finished"
83f14d00b6a7 Change #halt: to #shouldImplement or #assert:
Stefan Vogel <sv@exept.de>
parents: 10853
diff changeset
   106
    ^ super bindingOf: varName
8551
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   107
!
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   108
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   109
includesKey:aSymbol
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   110
    ^ self keys includes:aSymbol
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   111
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   112
    "
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   113
     OpenGLConstants includesKey:#GL3Bytes
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   114
    "
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   115
!
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   116
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   117
keys
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   118
    ^ self classVarNames
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   119
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   120
    "
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   121
     OpenGLConstants keys
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   122
    "
10853
72acafda369f dictionary compatible protocol added
Claus Gittinger <cg@exept.de>
parents: 9091
diff changeset
   123
!
72acafda369f dictionary compatible protocol added
Claus Gittinger <cg@exept.de>
parents: 9091
diff changeset
   124
72acafda369f dictionary compatible protocol added
Claus Gittinger <cg@exept.de>
parents: 9091
diff changeset
   125
keysDo:aBlock
72acafda369f dictionary compatible protocol added
Claus Gittinger <cg@exept.de>
parents: 9091
diff changeset
   126
    ^ self keys do:aBlock
8551
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   127
! !
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   128
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   129
!SharedPool class methodsFor:'printing & storing'!
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   130
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   131
displayString
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   132
    "return a printed represenation - here, a reminder is appended,
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   133
     that this is not a regular class"
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   134
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   135
    self == SharedPool ifTrue:[
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   136
        ^ super displayString
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   137
    ].
de314b9f8fa3 sharedPools
ca
parents: 8538
diff changeset
   138
    ^ self name , ' (* SharedPool *)'
8538
68e006f46d87 initial checkin
ca
parents:
diff changeset
   139
! !
68e006f46d87 initial checkin
ca
parents:
diff changeset
   140
68e006f46d87 initial checkin
ca
parents:
diff changeset
   141
!SharedPool class methodsFor:'queries'!
68e006f46d87 initial checkin
ca
parents:
diff changeset
   142
68e006f46d87 initial checkin
ca
parents:
diff changeset
   143
isSharedPool
68e006f46d87 initial checkin
ca
parents:
diff changeset
   144
    ^ self ~~ SharedPool
68e006f46d87 initial checkin
ca
parents:
diff changeset
   145
! !
68e006f46d87 initial checkin
ca
parents:
diff changeset
   146
68e006f46d87 initial checkin
ca
parents:
diff changeset
   147
!SharedPool class methodsFor:'documentation'!
68e006f46d87 initial checkin
ca
parents:
diff changeset
   148
68e006f46d87 initial checkin
ca
parents:
diff changeset
   149
version
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
   150
    ^ '$Id: SharedPool.st 10480 2009-12-02 21:30:55Z vranyj1 $'
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   151
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   152
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   153
version_CVS
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
   154
    ^ '§Header: /cvs/stx/stx/libbasic/SharedPool.st,v 1.8 2009/10/12 19:09:14 cg Exp §'
8538
68e006f46d87 initial checkin
ca
parents:
diff changeset
   155
! !
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   156
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
   157
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
   158