diff options
Diffstat (limited to 'lib/Data/MultiValued/TagContainerForRanges.pm')
-rw-r--r-- | lib/Data/MultiValued/TagContainerForRanges.pm | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/lib/Data/MultiValued/TagContainerForRanges.pm b/lib/Data/MultiValued/TagContainerForRanges.pm new file mode 100644 index 0000000..826df9d --- /dev/null +++ b/lib/Data/MultiValued/TagContainerForRanges.pm @@ -0,0 +1,82 @@ +package Data::MultiValued::TagContainerForRanges; +use Moose; +use MooseX::Types::Moose qw(HashRef); +use Moose::Util::TypeConstraints; +use Data::MultiValued::RangeContainer; + +# ABSTRACT: container for tagged values that are ranged containers + +=head1 DESCRIPTION + +Please don't use this module directly, use +L<Data::MultiValued::TagsAndRanges>. + +This module is a subclass of L<Data::MultiValued::TagContainer>, which +only allows instances of L<Data::MultiValued::RangeContainer> as +"storage cells". + +=head1 METHODS + +=cut + +extends 'Data::MultiValued::TagContainer'; + +has '+_storage' => ( + isa => HashRef[class_type('Data::MultiValued::RangeContainer')], +); + +has '+_default_tag' => ( + isa => class_type('Data::MultiValued::RangeContainer'), +); + +=head2 C<_create_new_inferior> + +Returns a new L<Data::MultiValued::RangeContainer> instance. + +=cut + +sub _create_new_inferior { + Data::MultiValued::RangeContainer->new(); +} + +=head1 Serialisation helpers + +These are used through +L<Data::MultiValued::UglySerializationHelperRole>. + +=head2 C<_rebless_storage> + +Blesses the "storage cells" into L<Data::MultiValued::RangeContainer>. + +=cut + +sub _rebless_storage { + my ($self) = @_; + bless $_,'Data::MultiValued::RangeContainer' + for values %{$self->{_storage}}; + bless $self->{_default_tag},'Data::MultiValued::RangeContainer'; + return; +} + +=head2 C<_as_hash> + +Returns the internal representation with no blessed hashes, with as +few copies as possible. + +=cut + +sub _as_hash { + my ($self) = @_; + my %st; + for my $k (keys %{$self->_storage}) { + my %v = %{$self->_storage->{$k}}; + $st{$k}=\%v; + } + my %dt = %{$self->_default_tag}; + return { + _storage => \%st, + _default_tag => \%dt, + }; +} + +1; |