/[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.8 by jonen, Thu Oct 7 14:06:46 2004 UTC
# Line 2  Line 2 
2  ##    $Id$  ##    $Id$
3  ##    --------------------------------------------------------------------------------  ##    --------------------------------------------------------------------------------
4  ##    $Log$  ##    $Log$
5    ##    Revision 1.8  2004/10/07 14:06:46  jonen
6    ##    minor changes, comment-out debug dumper
7    ##
8    ##    Revision 1.7  2004/07/07 03:13:43  joko
9    ##    minor fix for "sub isEmpty"
10    ##
11    ##    Revision 1.6  2004/05/12 13:53:19  jonen
12    ##    + bugfix related to declaration of arrays,
13    ##        solved error: 'Bizarre copy of ARRAY in aassign at...'
14    ##
15    ##    Revision 1.5  2003/03/27 15:17:05  joko
16    ##    namespace fixes for Data::Mungle::*
17    ##
18    ##    Revision 1.4  2002/12/19 01:06:27  joko
19    ##    + fixed isEmpty with ARRAYs
20    ##
21    ##    Revision 1.3  2002/12/13 21:47:04  joko
22    ##    + fixes to 'sub isEmpty'
23    ##
24    ##    Revision 1.2  2002/12/05 07:56:34  joko
25    ##    + updated/enhanced isEmpty (hacky?)
26    ##
27  ##    Revision 1.1  2002/11/29 04:49:30  joko  ##    Revision 1.1  2002/11/29 04:49:30  joko
28  ##    + initial check-in  ##    + initial check-in
29  ##  ##
30  ##    --------------------------------------------------------------------------------  ##    --------------------------------------------------------------------------------
31    
32    
33  package Data::Compare::Struct;  package Data::Mungle::Compare::Struct;
34    
35  use strict;  use strict;
36  use warnings;  use warnings;
# Line 29  sub getRelations { Line 51  sub getRelations {
51    my @a = @{$a_ref};    my @a = @{$a_ref};
52    my @b = @{$b_ref};    my @b = @{$b_ref};
53    
54    my @isect = my @diff = my @union = ();    # BUGFIX 2004-05-12: following declaration of arrays occures an strange perl error:
55      # 'Bizarre copy of ARRAY in aassign at ..<PATH_TO>/<THIS_FILE> line <NEXT LINE>'
56      # (at PERL 5.8.4, Debian/unstable/experimental)
57      #
58      #my @isect = my @diff = my @union = ();
59      #
60      # so use normal declaration instead!!
61      my @isect = ();
62      my @diff = ();
63      my @union = ();
64    
65    my $e;    my $e;
66    my %count;    my %count;
67        
# Line 59  sub getDifference { Line 91  sub getDifference {
91  }  }
92    
93  sub isEmpty {  sub isEmpty {
94    
95    my $var = shift;    my $var = shift;
96    my $reftype = attributes::reftype($var);    my $ref = ref($var);
97      my $reftype = '';
98      $reftype = attributes::reftype($var) if $ref;
99    
100    if ($reftype eq 'HASH') {    #print "isEmpty is parsing variable ( ref $ref reftype $reftype )", "\n";
101      foreach (keys %$var) {    
102        return 0 if defined $var->{$_};  #print Dumper($ref);
103      
104      my $found;
105    
106      if ($ref eq 'Set::Object') {
107        $found = 1;
108    #print "members:", "\n";
109    #print Dumper($var->members());
110    #print "\n";
111        my $tc = { ok => 0, count => 0, empty => 0 };
112        foreach ($var->members()) {
113    #print "member!!", "\n";
114          #print "empty: ", isEmpty($_), "\n";
115          #$tc->{ok} = 1;
116          $tc->{count}++;
117          $tc->{empty}++ if isEmpty($_);
118          #return $result if $result;
119        }
120    
121    #print Dumper($tc);
122        
123        return 1 if ($tc->{count} == $tc->{empty});
124        return 0;
125        
126      }
127    
128      if ($reftype eq 'ARRAY') {
129        my @arr = @$var;
130        my $isReallyEmpty = ($#arr == -1 ? 1 : 0);
131        return 1 if $isReallyEmpty;
132        $found = 1;
133        foreach (@arr) {
134          #return 0 if defined $_;
135          #return 1 if isEmpty($_);
136          return 0 if !isEmpty($_);
137      }      }
138    
139    } elsif ($reftype eq 'ARRAY') {    } elsif ($reftype eq 'HASH') {
140      foreach (@$var) {      my $empty = 1;
141        return 0 if defined $_;      $found = 1;
142        foreach (keys %$var) {
143    # TODO: review and fix this!
144    =pod
145          # recursion
146          if (ref $var->{$_} eq 'Set::Object') {
147            print "==========set", "\n";
148            if (isEmpty($var->{$_})) {
149              return 0;
150              #next;
151            }
152          }
153    =cut
154          next if ref $var->{$_} eq 'Set::Object';
155          #return 0 if defined $var->{$_};
156          #return 1 if isEmpty($var->{$_});
157          my $elem_empty = isEmpty($var->{$_});
158          
159    #print "elem: $elem_empty\n";
160          $empty &&= $elem_empty;
161      }      }
162        return $empty;
163        #return 0;
164      
165      # check for empty string
166      } elsif (defined $var) {
167        $found = 1;
168        return 0 if $var ne '';
169      }
170      
171      if (!$found) {
172        #print "isEmpty could not parse variable ( ref $ref reftype $reftype )", "\n";
173    }    }
174    
175      #print "EMPTY!!!", "\n";
176    
177    return 1;    return 1;
178      
179  }  }
180    
181  1;  1;

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

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