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 0.591 second using v1.01-cache-2.11-cpan-b16cb0d3907 )