PDLx-Mask

 view release on metacpan or  search on metacpan

lib/PDLx/Mask.pm  view on Meta::CPAN

# ABSTRACT: Mask multiple piddles with automatic two way feedback
package PDLx::Mask;

use strict;
use warnings;
use Carp;

use v5.10;

our $VERSION = '0.06';

use Params::Check qw[ check ];
use Ref::Util ':all';
use Data::GUID;
use Safe::Isa;

use PDL::Core ':Internal';


use Moo;
use MooX::ProtectedAttributes;

use namespace::clean;

extends 'PDLx::DetachedObject';

with 'PDLx::Role::RestrictedPDL';


use overload
  map {
    my $mth = overload::Method( 'PDL', $_ );
    $_ => sub {
        # operator should work on base value, not
        # effective mask
        my $mask = $_[0]->{PDL};
        $_[0]->{PDL} = $_[0]->base;
        my $r = &$mth;
        $_[0]->{PDL} = $mask;
        $_[0]->clear_nvalid;
        $_[0]->update;
        $_[0];
    }
  } qw[ |= &= ^= .= ];

has base => (
    is       => 'ro',
    required => 1,
    coerce   => sub {
        return topdl( $_[0] )->byte;
    },
);

has nvalid => (

    is        => 'lazy',
    init_args => undef,
    clearer   => 'clear_nvalid',
);

# PDL requires subclasses to have a PDL attribute, but it shouldn't be
# generally accessible outside of this class
protected_has PDL => ( is => 'rwp' );

protected_has subscribers => (
    is      => 'ro',
    default => sub { {} },
);

sub BUILDARGS {

    my $class = shift;



( run in 2.198 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )