From 18f76ee8eef6fe006f7574e2d52d5ff00c587888 Mon Sep 17 00:00:00 2001 From: "Jonathan \"Duke\" Leto" Date: Mon, 30 Oct 2017 00:07:51 -0700 Subject: [PATCH] Hashes make various common operations O(1); add methods for adding+removing zaddrs from HushLists --- lib/Hush/List.pm | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/Hush/List.pm b/lib/Hush/List.pm index 652edcf..c7c4734 100644 --- a/lib/Hush/List.pm +++ b/lib/Hush/List.pm @@ -40,8 +40,34 @@ sub new { sub new_list { my ($self,$name) = @_; my $lists = $self->{lists}; - die "Hush list $name already exists" if $lists->{$name}; - $lists->{$name}++; + # a list is simply a list of addresses, which can be looked up by name, and maybe some other metadata + $lists->{$name} = { recipients => {} }; + return $self; +} + +sub add_zaddr { + my ($self,$name,$zaddr) = @_; + die "Invalid zaddr=$zaddr" unless $zaddr; + + my $lists = $self->{lists}; + my $list = $lists->{$name}; + + die "Hush list $list does not exist" unless $list; + $list->{recipients}->{$zaddr}++; + return $self; +} + +sub remove_zaddr { + my ($self,$name,$zaddr) = @_; + die "Invalid zaddr=$zaddr" unless $zaddr; + + my $lists = $self->{lists}; + my $list = $lists->{$name}; + + die "Hush list $list does not exist" unless $list; + + delete $list->{recipients}->{$zaddr}; + return $self; }