Context-Singleton
view release on metacpan or search on metacpan
lib/Context/Singleton/Frame/Promise.pm view on Meta::CPAN
use v5.10;
use strict;
use warnings;
package Context::Singleton::Frame::Promise;
$Context::Singleton::Frame::Promise::VERSION = '1.0.9';
use Moo;
use Scalar::Util qw[ weaken ];
use namespace::clean;
has q (depth)
=> is => q (ro)
;
has q (value)
=> is => q (rw)
=> writer => q (_value)
lib/Context/Singleton/Frame/Promise.pm view on Meta::CPAN
$self->_broadcast_deducible;
}
$self;
}
sub add_listeners {
my ($self, @new_listeners) = @_;
# - Listener life time is a frame it is created for
# weaken helps tracking them (children do listen parents here)
# - Listener is another promise
# - Listeners are stored in linked list
my $head = $self->_listeners;
for my $listener (@new_listeners) {
my $entry = $head->{next} = {
prev => $head,
next => $head->{next},
listener => $listener,
};
$entry->{next}{prev} = $head->{next}
if $entry->{next}
;
Scalar::Util::weaken $entry->{listener};
$self->_notify_listener ($entry->{listener})
if $self->is_deducible
;
}
$self;
}
sub listen {
lib/Context/Singleton/Frame/Promise.pm view on Meta::CPAN
$self;
}
sub add_dependencies {
my ($self, @new_dependencies) = @_;
@new_dependencies = grep defined, @new_dependencies;
for my $dependency (@new_dependencies) {
push @{ $self->_dependencies }, $dependency;
#Scalar::Util::weaken ($self->_dependencies->[-1]);
}
$_->add_listeners ($self)
for @new_dependencies
;
$self;
}
sub dependencies {
( run in 1.085 second using v1.01-cache-2.11-cpan-b16cb0d3907 )