summaryrefslogtreecommitdiff
path: root/Data-MultiValued/lib/Data/MultiValued/TagContainer.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Data-MultiValued/lib/Data/MultiValued/TagContainer.pm')
-rw-r--r--Data-MultiValued/lib/Data/MultiValued/TagContainer.pm23
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 {};