/[cvs]/nfo/perl/libs/Data/Mungle/Compare/Struct.pm
ViewVC logotype

Diff of /nfo/perl/libs/Data/Mungle/Compare/Struct.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by joko, Fri Nov 29 04:49:30 2002 UTC revision 1.3 by joko, Fri Dec 13 21:47:04 2002 UTC
# Line 2  Line 2 
2  ##    $Id$  ##    $Id$
3  ##    --------------------------------------------------------------------------------  ##    --------------------------------------------------------------------------------
4  ##    $Log$  ##    $Log$
5    ##    Revision 1.3  2002/12/13 21:47:04  joko
6    ##    + fixes to 'sub isEmpty'
7    ##
8    ##    Revision 1.2  2002/12/05 07:56:34  joko
9    ##    + updated/enhanced isEmpty (hacky?)
10    ##
11  ##    Revision 1.1  2002/11/29 04:49:30  joko  ##    Revision 1.1  2002/11/29 04:49:30  joko
12  ##    + initial check-in  ##    + initial check-in
13  ##  ##
# Line 59  sub getDifference { Line 65  sub getDifference {
65  }  }
66    
67  sub isEmpty {  sub isEmpty {
68    
69    my $var = shift;    my $var = shift;
70    my $reftype = attributes::reftype($var);    my $ref = ref($var);
71      my $reftype = '';
72      $reftype = attributes::reftype($var) if $ref;
73    
74    if ($reftype eq 'HASH') {    #print "isEmpty is parsing variable ( ref $ref reftype $reftype )", "\n";
75      foreach (keys %$var) {    
76        return 0 if defined $var->{$_};  #print Dumper($var);
77      
78      my $found;
79    
80      if ($ref eq 'Set::Object') {
81        $found = 1;
82    #print "members:", "\n";
83    #print Dumper($var->members());
84    #print "\n";
85        my $tc = { ok => 0, count => 0, empty => 0 };
86        foreach ($var->members()) {
87    #print "member!!", "\n";
88          #print "empty: ", isEmpty($_), "\n";
89          #$tc->{ok} = 1;
90          $tc->{count}++;
91          $tc->{empty}++ if isEmpty($_);
92          #return $result if $result;
93      }      }
94    
95    } elsif ($reftype eq 'ARRAY') {  #print Dumper($tc);
96        
97        return 1 if ($tc->{count} == $tc->{empty});
98        return 0;
99        
100      }
101    
102      if ($reftype eq 'ARRAY') {
103        my @arr = @$var;
104        my $isReallyEmpty = ($#arr == -1 ? 1 : 0);
105        return 1 if $isReallyEmpty;
106        $found = 1;
107      foreach (@$var) {      foreach (@$var) {
108        return 0 if defined $_;        return 0 if defined $_;
109      }      }
110    
111      } elsif ($reftype eq 'HASH') {
112        my $empty = 1;
113        $found = 1;
114        foreach (keys %$var) {
115    # TODO: review and fix this!
116    =pod
117          # recursion
118          if (ref $var->{$_} eq 'Set::Object') {
119            print "==========set", "\n";
120            if (isEmpty($var->{$_})) {
121              return 0;
122              #next;
123            }
124          }
125    =cut
126          next if ref $var->{$_} eq 'Set::Object';
127          #return 0 if defined $var->{$_};
128          #return 1 if isEmpty($var->{$_});
129          my $elem_empty = isEmpty($var->{$_});
130          
131    #print "elem: $elem_empty\n";
132          $empty &&= $elem_empty;
133        }
134        return $empty;
135        #return 0;
136      
137      } else {
138        $found = 1;
139        return 0 if defined $var;
140      }
141      
142      if (!$found) {
143        print "isEmpty could not parse variable ( ref $ref reftype $reftype )", "\n";
144    }    }
145    
146    return 1;    return 1;
147      
148  }  }
149    
150  1;  1;

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.3

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed