# check for already loaded models
unless ($MODEL) {
for (@REGISTRY, @models) {
my ($package, $model) = @$_;
if (${"$package\::VERSION"} > 0) {
if (eval "require $model") {
$MODEL = $model;
warn "AnyEvent: autodetected model '$model', using it.\n" if $verbose > 1;
last;
}
}
}
unless ($MODEL) {
# try to load a model
for (@REGISTRY, @models) {
my ($package, $model) = @$_;
if (eval "require $package"
and ${"$package\::VERSION"} > 0
and eval "require $model") {
$MODEL = $model;
warn "AnyEvent: autoprobed model '$model', using it.\n" if $verbose > 1;
last;
}
}
$MODEL
or die "No event module selected for AnyEvent and autodetect failed. Install any one of these modules: EV,
Event or Glib.";
}
}
unshift @ISA, $MODEL;
push @{"$MODEL\::ISA"}, "AnyEvent::Base";
(shift @post_detect)->() while @post_detect;
}
$MODEL
}
sub AUTOLOAD {
(my $func = $AUTOLOAD) =~ s/.*://;
$method{$func}
or croak "$func: not a valid method for AnyEvent objects";
detect unless $MODEL;
my $class = shift;
$class->$func (@_);
}
package AnyEvent::Base;
# default implementation for now and time
use Time::HiRes ();
sub time { Time::HiRes::time }
sub now { Time::HiRes::time }
# default implementation for ->condvar
sub condvar {
bless { @_ == 3 ? (_ae_cb => $_[2]) : () }, AnyEvent::CondVar::
}
# default implementation for ->signal
our %SIG_CB;
sub signal {
my (undef, %arg) = @_;
my $signal = uc $arg{signal}
or Carp::croak "required option 'signal' is missing";
$SIG_CB{$signal}{$arg{cb}} = $arg{cb};
$SIG{$signal} ||= sub {
$_->() for values %{ $SIG_CB{$signal} || {} };
};
bless [$signal, $arg{cb}], "AnyEvent::Base::Signal"
}
sub AnyEvent::Base::Signal::DESTROY {
my ($signal, $cb) = @{$_[0]};
delete $SIG_CB{$signal}{$cb};
$SIG{$signal} = 'DEFAULT' unless keys %{ $SIG_CB{$signal} };
}
# default implementation for ->child
our %PID_CB;
our $CHLD_W;
our $CHLD_DELAY_W;
=10= |