-=item B<merge_idents> ()
-
-Merges idents. Does magic, don't interfere ;)
-
-=cut
-
-sub merge_idents
-{
- my @idents = keys (%IdentToNick);
-
- for (@idents)
- {
- my $ident = $_;
- my $name = ident_to_name ($ident);
-
- if (!defined ($DATA->{'byident'}{$ident}))
- {
- next;
- }
-
- if (!defined ($DATA->{'byname'}{$name}))
- {
- $DATA->{'byname'}{$name} = {};
- }
-
- add_hash ($DATA->{'byname'}{$name}, $DATA->{'byident'}{$ident});
- }
-}
-
-sub add_hash
-{
- my $dst = shift;
- my $src = shift;
-
- my @keys = keys (%$src);
-
- for (@keys)
- {
- my $key = $_;
- my $val = $src->{$key};
-
- if (!defined ($dst->{$key}))
- {
- $dst->{$key} = $val;
- }
- elsif (!ref ($val))
- {
- if ($val =~ m/\D/)
- {
- # FIXME
- print STDERR $/, __FILE__, ": ``$key'' = ``$val''" if ($::DEBUG);
- }
- else
- {
- $dst->{$key} += $val;
- }
- }
- elsif (ref ($val) ne ref ($dst->{$key}))
- {
- print STDERR $/, __FILE__, ": Destination and source type do not match!" if ($::DEBUG);
- }
- elsif (ref ($val) eq "HASH")
- {
- add_hash ($dst->{$key}, $val);
- }
- elsif (ref ($val) eq "ARRAY")
- {
- my $i = 0;
- for (@$val)
- {
- my $j = $_;
- if ($j =~ m/\D/)
- {
- # FIXME
- print STDERR $/, __FILE__, ": ``", $key, '[', $i, "]'' = ``$j''" if ($::DEBUG);
- }
- else
- {
- $dst->{$key}->[$i] += $j;
- }
- $i++;
- }
- }
- else
- {
- my $type = ref ($val);
- print STDERR $/, __FILE__, ": Reference type ``$type'' is not supported!", $/;
- }
- }
-}
-