diff options
Diffstat (limited to 'Data-MultiValued/lib/Data/MultiValued/TagContainer.pm')
-rw-r--r-- | Data-MultiValued/lib/Data/MultiValued/TagContainer.pm | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/Data-MultiValued/lib/Data/MultiValued/TagContainer.pm b/Data-MultiValued/lib/Data/MultiValued/TagContainer.pm index e0c7f4f..cdd0456 100644 --- a/Data-MultiValued/lib/Data/MultiValued/TagContainer.pm +++ b/Data-MultiValued/lib/Data/MultiValued/TagContainer.pm @@ -14,6 +14,7 @@ has _storage => ( _has_tag => 'exists', _get_tag => 'get', _create_tag => 'set', + _delete_tag => 'delete', }, ); @@ -21,6 +22,7 @@ has _default_tag => ( is => 'rw', init_arg => undef, predicate => '_has_default_tag', + clearer => '_clear_default_tag', ); sub get { @@ -68,6 +70,27 @@ sub get_or_create { return $self->_get_tag($tag); } +sub _clear_storage { + my ($self) = @_; + + $self->_storage({}); +} + +sub clear { + my ($self,$args) = @_; + + my $tag = $args->{tag}; + + if (!defined($tag)) { + $self->_clear_default_tag; + $self->_clear_storage; + } + elsif ($self->_has_tag($tag)) { + $self->_delete_tag($tag); + } + return; +} + sub _create_new_inferior { my ($self) = @_; return {}; |