From: Geoffrey T. D. <da...@us...> - 2005-02-16 03:56:43
|
Update of /cvsroot/discnw/discnw/src/perl/modules/ALE/Database In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28781/modules/ALE/Database Modified Files: MapTable.pm Log Message: Added an overloaded '%{}' operator so that a Database::MapTable can be used as an implementation for the get_*_map methods of ALE::Individual. Index: MapTable.pm =================================================================== RCS file: /cvsroot/discnw/discnw/src/perl/modules/ALE/Database/MapTable.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- MapTable.pm 15 Feb 2005 21:00:19 -0000 1.2 +++ MapTable.pm 16 Feb 2005 03:56:28 -0000 1.3 @@ -20,22 +20,29 @@ $invmap{$value} = $key; } - bless { -database => $database, - -table => $table, - -key_column => $key_column, - -value_column => $value_column, - -map => \%map, - -invmap => \%invmap, - }, $type; + bless [ $database, + $table, + $key_column, + $value_column, + \%map, + \%invmap, + ], $type; } +sub database { shift->[0]; } +sub table { shift->[1]; } +sub key_column { shift->[2]; } +sub value_column { shift->[3]; } +sub _map { shift->[4]; } +sub _invmap { shift->[5]; } + sub coerce_to_key { my $self = shift; my ($value) = @_; - my ($invmap, $map) = @{$self}{qw(-invmap -map)}; + my $invmap = $self->_invmap; return $invmap->{$value} if defined $invmap->{$value}; - return $value if defined $map->{$value}; + return $value if defined $self->_map->{$value}; throw ALE::ValueError sprintf("Bad value '%s' for map %s", $value, $self->{-table}); } @@ -43,18 +50,22 @@ sub map { my $self = shift; my ($key) = @_; - my $val = $self->{-map}{$key} or - throw ALE::ValueError sprintf("Bad key '%s' for map %s", - $key, $self->{-table}); + my $val = $self->_map->{$key} or + throw ALE::ValueError sprintf("Bad key '%s' for map %s.%x", + $key, $self->table, $self->value_column); return $val; } sub values { my $self = shift; - my $map = $self->{-map}; + my $map = $self->_map; return map { $map->{$_} } sort keys %$map; } +use overload + '%{}' => sub { shift->_map }, + 'bool' => sub { 1 }; + ################################################################ package ALE::Database::MapTable::MappedValue; |