HandlerCollection.st
author Claus Gittinger <cg@exept.de>
Sat, 02 May 2020 21:40:13 +0200
changeset 5476 7355a4b11cb6
parent 785 d7e55477dba2
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:
43
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
     1
"
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1994 by Claus Gittinger
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
     3
	      All Rights Reserved
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
     4
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    11
"
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    12
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    13
OrderedCollection subclass:#HandlerCollection
785
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    14
	instanceVariableNames:''
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    15
	classVariableNames:''
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    16
	poolDictionaries:''
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    17
	category:'Kernel-Exceptions'
43
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    18
!
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    19
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    20
!HandlerCollection class methodsFor:'documentation'!
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    21
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    22
copyright
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    23
"
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    24
 COPYRIGHT (c) 1994 by Claus Gittinger
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    25
	      All Rights Reserved
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    26
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    27
 This software is furnished under a license and may be used
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    28
 only in accordance with the terms of that license and with the
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    29
 inclusion of the above copyright notice.   This software may not
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    30
 be provided or otherwise made available to, or used by, any
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    31
 other person.  No title to or ownership of the software is
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    32
 hereby transferred.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    33
"
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    34
!
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    35
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    36
documentation
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    37
"
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    38
    A HandlerCollection allows a group of unrelated signals to be handled
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    39
    by individual handlers - their evaluation is equivalent to a corresponding
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    40
    number of nested signal handlers, but somwehat easier to program.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    41
    In the real world, handlerCollections are seldom needed and actually currently
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    42
    not used by the system.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    43
"
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    44
! !
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    45
785
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    46
!HandlerCollection methodsFor:'adding'!
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    47
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    48
on:aSignal handle:aHandler
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    49
    "add a signal<->handler pair to the receiver collection"
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    50
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    51
    self addFirst:(aSignal -> aHandler)
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    52
! !
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    53
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    54
!HandlerCollection methodsFor:'private'!
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    55
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    56
from:start to:stop handleDo:aBlock
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    57
    "this method recursively sets up a bunch of nested
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    58
     handlers, and finally evaluates the argument, aBlock"
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    59
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    60
    |signalHandlerPair|
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    61
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    62
    stop < start ifTrue:[
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    63
	^ aBlock value
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    64
    ].
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    65
    signalHandlerPair := self at:start.
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    66
    ^ (signalHandlerPair key) 
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    67
	  handle:(signalHandlerPair value)
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    68
	  do:[self from:start+1 to:stop handleDo:aBlock]
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    69
! !
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    70
43
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    71
!HandlerCollection methodsFor:'save evaluation'!
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    72
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    73
handleDo:aBlock
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    74
    "evaluate the argument, aBlock.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    75
     If any of the signals in the receiver is raised during evaluation,
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    76
     evaluate the corresponding handleBlock from the receiver,
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    77
     passing it an Exception argument.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    78
     The handler may decide how to react to the signal by sending
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    79
     a corresponding message to the exception (see there).
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    80
     If none of the signals is raised during evaluation, return the 
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    81
     value returned by aBlock."
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    82
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    83
     ^ self from:1 to:self size handleDo:aBlock
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    84
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    85
    "
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    86
     |h num|
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    87
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    88
     h := HandlerCollection new.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    89
     h on:(Number divisionByZeroSignal)
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    90
       handle:[:ex | 'division by zero' printNL. ex proceed].
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    91
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    92
     h on:(Object haltSignal)
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    93
       handle:[:ex | 'halt encountered ' printNL. ex proceed].
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    94
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    95
     h on:(Float domainErrorSignal)
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    96
       handle:[:ex | 'domain error  ' printNL. ex proceed].
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    97
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    98
     h handleDo:[
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
    99
	num := 0.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   100
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   101
	'now dividing' printNL.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   102
	1 // num.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   103
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   104
	'now doing bad arcSin' printNL.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   105
	num := 50.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   106
	num arcSin.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   107
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   108
	'now halting' printNL.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   109
	self halt.
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   110
     ]
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   111
    "
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   112
! !
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   113
785
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   114
!HandlerCollection class methodsFor:'documentation'!
43
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   115
785
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   116
version
d7e55477dba2 copyrights added; typo in docu
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   117
    ^ '$Header: /cvs/stx/stx/libbasic2/HandlerCollection.st,v 1.5 1999-07-28 21:00:09 cg Exp $'
43
5fba1e20bca2 Initial revision
claus
parents:
diff changeset
   118
! !