use
vars
qw(@ISA @EXPORT)
;
@ISA
=
qw(Exporter)
;
@EXPORT
=
qw(read write sleep readwrite predicate)
;
sub
readwrite(&)
{
return
this-> override_handler(
'readwrite'
, \
&readwrite
,
shift
)
if
this-> {
override
}->{readwrite};
my
@c
= context;
this-> add_watch(
_subname(
readwrite
=>
shift
), \
&readwrite
,
@c
[0,1,2,0,1,2]
)
}
sub
read
(&)
{
return
this-> override_handler(
'read'
, \
&read
,
shift
)
if
this-> {
override
}->{
read
};
my
@c
= context;
this-> add_watch(
_subname(
read
=>
shift
), \
&read
, IO_READ,
@c
[0,1,0,1]
)
}
sub
write
(&)
{
return
this-> override_handler(
'write'
, \
&write
,
shift
)
if
this-> {
override
}->{
write
};
my
@c
= context;
this-> add_watch(
_subname(
write
=>
shift
), \
&write
, IO_WRITE,
@c
[0,1,0,1]
)
}
sub
sleep
(&)
{
return
this-> override_handler(
'sleep'
, \
&sleep
,
shift
)
if
this-> {
override
}->{
sleep
};
my
@c
= context;
this-> add_timer( _subname(
sleep
=>
shift
), \
&sleep
,
@c
[0,0])
}
*predicate
= \
&IO::Lambda::condition
;
1;