Devel-ebug-Wx

 view release on metacpan or  search on metacpan

lib/Devel/ebug/Wx/Plugin/Listener/Base.pm  view on Meta::CPAN

package Devel::ebug::Wx::Plugin::Listener::Base;

use strict;
use base qw(Class::Accessor::Fast);
use Scalar::Util qw(weaken);

__PACKAGE__->mk_accessors( qw(_subscribed) );

sub add_subscription {
    my( $self, $source, @args ) = @_;

    $self->_subscribed( [] ) unless $self->_subscribed;
    $source->add_subscriber( @args );
    push @{$self->_subscribed}, [ $source, @args ];
    foreach my $ref ( @{$self->_subscribed->[-1]} ) {
        next unless ref $ref;
        weaken( $ref );
    }
}

sub delete_subscriptions {
    my( $self ) = @_;

    foreach my $sub ( @{$self->_subscribed || []} ) {
        next unless $sub->[0] && $sub->[1]; # might have been destroyed
        $sub->[0]->delete_subscriber( @$sub[1 .. $#$sub] );
    }



( run in 0.423 second using v1.01-cache-2.11-cpan-a5abf4f5562 )