Visitor.st
author Claus Gittinger <cg@exept.de>
Fri, 08 Jul 2005 19:15:03 +0200
changeset 8913 b9498d27a554
parent 8392 17648405fc9b
child 11036 69e153cab289
permissions -rw-r--r--
64bit; mkSmallInteger
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8391
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     1
"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 2002 by eXept Software AG
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     3
              All Rights Reserved
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     4
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    10
 hereby transferred.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    11
"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
"{ Package: 'stx:libbasic' }"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
Object subclass:#Visitor
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
	instanceVariableNames:''
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
	classVariableNames:''
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
	poolDictionaries:''
8392
17648405fc9b Category change
Stefan Vogel <sv@exept.de>
parents: 8391
diff changeset
    19
	category:'System-Visiting'
8391
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
!Visitor class methodsFor:'documentation'!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    24
copyright
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    25
"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    26
 COPYRIGHT (c) 2002 by eXept Software AG
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    27
              All Rights Reserved
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    28
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    29
 This software is furnished under a license and may be used
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    30
 only in accordance with the terms of that license and with the
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    32
 be provided or otherwise made available to, or used by, any
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    33
 other person.  No title to or ownership of the software is
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    34
 hereby transferred.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    35
"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    36
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    37
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
documentation
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
    This class is abstract and implements the visitor pattern.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
    It defines #visitXXX:with: messages for various kinds of objects.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
    Any of these messsages is eventually mapped to #visitObject:with:.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
    When a class redefines #acceptVisitor:with:, an method has to be defined here, too.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
    Subclasses have to define at least #visitObject:with:
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
    [author:]
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
        Stefan Vogel (stefan@zwerg)
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
    [see also:]
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
        Object>>acceptVisitor:with:
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
! !
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
!Visitor methodsFor:'helpers'!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
doesNotUnderstand:aMessage
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
    "catch unimplemented #visitXXX:with: messages and redirect them to #visitObject:with:.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
     maybe someone implemented an #acceptVisitor:with: in the XXX class and didn't
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
     implement the corresponding method here.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    63
     This should not happen, and a error message is printed, because this can also
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    64
     occur due to a typo."
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    65
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    66
    |selector args|
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    68
    selector := aMessage selector.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    69
    ((selector startsWith:'visit') and:[selector endsWith:'with:']) ifTrue:[
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    70
        ('Visitor: unimplemented #', selector, ' in class ', self className, '. Please define as #visitObject:with:') errorPrintCR.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    71
        args := aMessage arguments.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    72
        ^ self visitObject:(args at:1) with:(args at:2).
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    73
    ].
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    74
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    75
    ^ super doesNotUnderstand:aMessage
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    76
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    77
    "
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    78
       Visitor new visitFoo:#foo with:'arg'
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    79
    "
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    80
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    81
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    82
visitChildrenOf:anObject
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    83
    "recursively enumerate anObjects refs, visiting each of the child objects.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
     nil childs are not visited"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
    |instVarNames theClass 
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    87
     sz "{ Class: SmallInteger }"|
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
    theClass := anObject class.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    90
    sz := theClass instSize.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    91
    sz ~~ 0 ifTrue:[
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    92
        instVarNames := theClass allInstVarNames.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    93
        1 to:sz do:[:i |  |ref|
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
            ref := anObject instVarAt:i.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    95
            ref notNil ifTrue:[
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    96
                ref acceptVisitor:self with:(instVarNames at:i).
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    97
                self nextObject.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    98
            ].
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    99
        ].
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
    ].
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   101
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
    theClass isVariable ifTrue:[
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
        sz := anObject basicSize.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
        sz ~~ 0 ifTrue:[
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
            1 to:sz do:[:i |
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
                (anObject basicAt:i) acceptVisitor:self with:i.   
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   107
                self nextObject.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   108
            ]
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   109
        ].
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   110
    ].
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   111
! !
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   112
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   113
!Visitor methodsFor:'subclass responsibility'!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   114
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   115
nextObject
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
    "this is sent, when a new Object is going to be visited.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
     Subclasses may redefine this to perform specific actions"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   118
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   119
    ^ self 
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   120
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   121
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   122
visitObject:anObject with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   123
    "visit an object. Subclasses must at least implement this method"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   124
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   125
    self subclassResponsibility
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
! !
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
!Visitor methodsFor:'visiting smalltalk types'!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   129
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
visitBehavior:aSymbol with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
    "visit a class"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
    self visitObject:aSymbol with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   134
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   135
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   136
visitBitArray:aByteArray with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   137
    "visit an absolute time value"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   138
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   139
    self visitSequenceableCollection:aByteArray with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   140
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   141
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
visitBlock:aBlock with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   143
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
    self visitObject:aBlock with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   145
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   146
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   147
visitBoolean:aBoolean with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   148
    "visit a Boolean"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   149
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   150
    self visitObject:aBoolean with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   151
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   152
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   153
visitByteArray:aByteArray with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   154
    "visit an absolute time value"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   155
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   156
    self visitSequenceableCollection:aByteArray with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   157
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   158
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   159
visitCharacter:aCharacter with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   160
    "visit a Character"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   161
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   162
    self visitObject:aCharacter with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   163
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   164
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   165
visitCollection:aCollection with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   166
    "visit a Collection"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   167
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   168
    self visitObject:aCollection with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   169
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   170
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   171
visitDictionary:aDictionary with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   172
    "visit a Dictionary"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   173
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   174
    self visitCollection:aDictionary with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   175
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   176
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   177
visitFloat:aFloat with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   178
    "visit a Float"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   179
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   180
    self visitNumber:aFloat with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   181
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   182
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   183
visitFraction:aFraction with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   184
    "visit a Fraction"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   185
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   186
    self visitNumber:aFraction with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   187
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   188
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   189
visitInteger:anInteger with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   190
    "visit an Integer"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   191
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   192
    self visitNumber:anInteger with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   193
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   194
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   195
visitInterval:anInterval with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   196
    "intervals are a special flavor of sequenceable collection (saving memory)
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   197
     We treat it as SequenceableCollection by default.
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   198
     Encoders that do a dense representation, redefine this to #visitObject"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   199
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   200
    ^ self visitSequenceableCollection:anInterval with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   201
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   202
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   203
visitNilWith:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   204
    "visit a nil"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   205
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   206
    self visitObject:nil with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   207
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   208
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   209
visitNumber:aNumber with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   210
    "visit an Integer"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   211
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   212
    self visitObject:aNumber with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   213
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   214
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   215
visitSequenceableCollection:aCollection with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   216
    "visit a SequenceableCollection"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   217
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   218
    self visitCollection:aCollection with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   219
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   220
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   221
visitSet:aCollection with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   222
    "visit a Set"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   223
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   224
    self visitCollection:aCollection with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   225
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   226
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   227
visitString:aString with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   228
    "visit a String"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   229
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   230
    self visitObject:aString with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   231
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   232
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   233
visitSymbol:aSymbol with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   234
    "visit a Symbol"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   235
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   236
    self visitObject:aSymbol with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   237
!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   238
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   239
visitTimestamp:aTimestamp with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   240
    "visit an absolute time value"
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   241
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   242
    self visitObject:aTimestamp with:aParameter
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   243
! !
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   244
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   245
!Visitor class methodsFor:'documentation'!
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   246
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   247
version
8392
17648405fc9b Category change
Stefan Vogel <sv@exept.de>
parents: 8391
diff changeset
   248
    ^ '$Header: /cvs/stx/stx/libbasic/Visitor.st,v 1.2 2004-06-11 17:54:29 stefan Exp $'
8391
1ed9d94d2ba8 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   249
! !