PDLx-Mask

 view release on metacpan or  search on metacpan

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

package PDLx::MaskedData;

# ABSTRACT: Automatically synchronize data and valid data masks

use strict;
use warnings;

use 5.10.0;

our $VERSION = '0.06';

use Params::Check qw[ check ];
use Ref::Util ':all';
use Scalar::Util qw[ refaddr ];
use Safe::Isa;

use PDL::Core ':Internal';
use Package::Stash;

use overload;

use Moo;
use MooX::ProtectedAttributes;
use namespace::clean 0.16;

extends 'PDLx::DetachedObject';

with 'PDLx::Role::RestrictedPDL';

sub _trigger_mask_subscription;

use overload
  map {
    my $mth = overload::Method( 'PDL', $_ );
    $_ => sub {
        # operator should work on base, not effective, value
        my $data = $_[0]->{PDL};
        $_[0]->{PDL} = $_[0]->base;
        my $r = &$mth;
        $_[0]->{PDL} = $data;
        $_[0]->_clear_summary;
        $_[0]->update;
        $_[0];
    }
  } (
    map {
        grep { $_ =~ /=$/ }
          split( ' ', $_ )
    } @{overload::ops}{ 'assign', 'binary' }
  ),
  ( map { split( ' ', $_ ) } $overload::ops{mutators} );

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

has mask => (
    is     => 'rw',
    lazy   => 1,
    coerce => sub {
        return $_[0] if $_[0]->$_isa( 'PDLx::Mask' );
        require PDLx::Mask;
        PDLx::Mask->new( $_[0] );
    },
    default => sub {

        my $self = shift;

        $self->mask(



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