1# -*- cperl -*- 2# ----------------------------------------------------------------------------- 3# $Id: PersonInChannel.pm 11365 2008-05-10 14:58:28Z topia $ 4# ----------------------------------------------------------------------------- 5# なるとや発言権を持っているかどうかの情報とPersonalInfoのセット。 6# ----------------------------------------------------------------------------- 7package PersonInChannel; 8use strict; 9use warnings; 10use Carp; 11use PersonalInfo; 12use Tiarra::DefineEnumMixin qw(PERSON HAS_O HAS_V REMARKS); 13use Tiarra::Utils; 14Tiarra::Utils->define_array_attr_getter(0, qw(person)); 15Tiarra::Utils->define_array_attr_accessor(0, qw(has_o has_v)); 16 17sub new { 18 my ($class,$person,$has_o,$has_v) = @_; 19 croak "PersonInChannel->new requires 3 parameters.\n" if @_ != 4; 20 my $obj = bless [] => $class; 21 $obj->[PERSON] = $person; 22 $obj->[HAS_O] = $has_o; 23 $obj->[HAS_V] = $has_v; 24 $obj->[REMARKS] = undef; 25 $obj; 26} 27 28sub info { 29 my ($this, $wantarray) = @_; 30 shift->[PERSON]->info($wantarray); 31} 32 33sub priv_symbol { 34 my $this = shift; 35 36 return '@' if ($this->has_o); 37 return '+' if ($this->has_v); 38 return ''; 39} 40 41*remarks = \&remark; 42sub remark { 43 my ($this,$key,$value) = @_; 44 my $remarks = $this->[REMARKS]; 45 46 if (defined $value) { 47 if (!$remarks) { 48 $remarks = $this->[REMARKS] = {}; 49 } 50 51 $remarks->{$key} = $value; 52 } 53 elsif (@_ >= 3) { 54 if ($remarks) { 55 delete $remarks->{$key}; 56 } 57 } 58 59 if ($remarks) { 60 $remarks->{$key}; 61 } 62 else { 63 undef; 64 } 65} 66 67sub delete_remark { 68 my ($this,$key) = @_; 69 if ($_ = $this->[REMARKS]) { 70 delete $_->{$key}; 71 } 72} 73 741; 75