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 )