--- nfo/perl/libs/Data/Mungle/Compare/Struct.pm 2002/11/29 04:49:30 1.1 +++ nfo/perl/libs/Data/Mungle/Compare/Struct.pm 2002/12/05 07:56:34 1.2 @@ -1,7 +1,10 @@ ## -------------------------------------------------------------------------------- -## $Id: Struct.pm,v 1.1 2002/11/29 04:49:30 joko Exp $ +## $Id: Struct.pm,v 1.2 2002/12/05 07:56:34 joko Exp $ ## -------------------------------------------------------------------------------- ## $Log: Struct.pm,v $ +## Revision 1.2 2002/12/05 07:56:34 joko +## + updated/enhanced isEmpty (hacky?) +## ## Revision 1.1 2002/11/29 04:49:30 joko ## + initial check-in ## @@ -59,21 +62,70 @@ } sub isEmpty { + my $var = shift; - my $reftype = attributes::reftype($var); + my $ref = ref($var); + my $reftype = ''; + $reftype = attributes::reftype($var) if $ref; + + #print "isEmpty is parsing variable ( ref $ref reftype $reftype )", "\n"; + + my $found; + + if ($ref eq 'Set::Object') { + $found = 1; + #print "members:", "\n"; + #print Dumper($var->members()); + #print "\n"; + my $tc = { ok => 0, count => 0, empty => 0 }; + foreach ($var->members()) { + #print "empty: ", isEmpty($_), "\n"; + #$tc->{ok} = 1; + $tc->{count}++; + $tc->{empty}++ if isEmpty($_); + #return $result if $result; + } + + return 1 if ($tc->{count} == $tc->{empty}); + return 0; + + } if ($reftype eq 'HASH') { + $found = 1; foreach (keys %$var) { - return 0 if defined $var->{$_}; +=pod + # recursion + if (ref $var->{$_} eq 'Set::Object') { + print "==========set", "\n"; + if (isEmpty($var->{$_})) { + return 0; + #next; + } + } +=cut + next if ref $var->{$_} eq 'Set::Object'; + #return 0 if defined $var->{$_}; + return 1 if isEmpty($var->{$_}); } } elsif ($reftype eq 'ARRAY') { + $found = 1; foreach (@$var) { return 0 if defined $_; } + + } else { + $found = 1; + return 0 if defined $var; + } + + if (!$found) { + print "isEmpty could not parse variable ( ref $ref reftype $reftype )", "\n"; } return 1; + } 1;