Context-Singleton
view release on metacpan or search on metacpan
lib/Context/Singleton/Frame.pm view on Meta::CPAN
$self->{root} = $class->{root};
$self->{parent} = $class;
$self->{db} = $class->{db};
$self->{depth} = $class->{depth} + 1;
$class = ref $class;
}
unless ($self->{root}) {
$self->{root} = $self;
Scalar::Util::weaken $self->{root};
}
$self = bless $self, $class;
$self->proclaim (%proclaim);
return $self;
}
sub depth {
lib/Context/Singleton/Frame/Promise.pm view on Meta::CPAN
use v5.10;
use strict;
use warnings;
package Context::Singleton::Frame::Promise;
our $VERSION = v1.0.5;
use Scalar::Util qw[ weaken ];
use namespace::clean;
sub new {
my ($class, %params) = @_;
bless {
depth => $params{depth},
is_resolvable => 0,
dependencies => [],
lib/Context/Singleton/Frame/Promise.pm view on Meta::CPAN
}
sub _listeners {
$_[0]->{listeners};
}
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 {
my ($self, @promises) = @_;
lib/Context/Singleton/Frame/Promise.pm view on Meta::CPAN
$_[0]->{dependencies};
}
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 {
@{ $_[0]->_dependencies };
}
lib/Context/Singleton/Frame/Result.pm view on Meta::CPAN
sub new {
my ($class, $resolver, $value) = @_;
my $self = bless {
resolver => $resolver,
value => $value,
};
die "Oops"
unless $resolver->isa ('Context::Singleton::Frame');
Scalar::Util::weaken ($self->{resolver});
return $self;
}
sub resolver {
$_[0]->{resolver};
}
sub value {
$_[0]->{value};
( run in 0.634 second using v1.01-cache-2.11-cpan-65fba6d93b7 )