home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2004 December / PCpro_2004_12.ISO / files / webserver / tsw / TSW_3.4.0.exe / Apache2 / perl / CallbackMap.pm < prev    next >
Encoding:
Perl POD Document  |  2002-01-04  |  1.6 KB  |  69 lines

  1. package ExtUtils::XSBuilder::CallbackMap;
  2.  
  3. use strict;
  4. use warnings FATAL => 'all';
  5. use ExtUtils::XSBuilder::MapUtil qw(callback_table);
  6.  
  7. our @ISA = qw(ExtUtils::XSBuilder::FunctionMap);
  8.  
  9. # ============================================================================
  10.  
  11. #look for callbacks that do not exist in *.map
  12. sub check {
  13.     my $self = shift;
  14.     my $map = $self->get;
  15.  
  16.     my @missing;
  17.     my $parsesource = $self -> {wrapxs} -> parsesource_objects ;
  18.  
  19.     loop:
  20.     for my $name (map $_->{name}, @{ callback_table($self -> {wrapxs}) }) {
  21.         next if exists $map->{$name};
  22.         push @missing, $name ;
  23.     }
  24.  
  25.     return @missing ? \@missing : undef;
  26. }
  27.  
  28. # ============================================================================
  29.  
  30. #look for callbacks in *.map that do not exist
  31.  
  32. sub check_exists {
  33.     my $self = shift;
  34.  
  35.     my %callbacks = map { $_->{name}, 1 } @{ callback_table($self -> {wrapxs}) };
  36.     my @missing = ();
  37.  
  38.     #print Data::Dumper -> Dump ([\%callbacks, $self->{map}]) ;
  39.  
  40.     for my $name (keys %{ $self->{map} }) {
  41.         next if $callbacks{$name};
  42.         push @missing, $name ;
  43.     }
  44.  
  45.     return @missing ? \@missing : undef;
  46. }
  47.  
  48.  
  49. # ============================================================================
  50.  
  51. sub parse {
  52.     my($self, $fh, $map) = @_;
  53.     my %cur;
  54.     my $disabled = 0;
  55.  
  56.     while ($fh->readline) {
  57.         my($type, $argspec) = split /\s*\|\s*/;
  58.  
  59.         my $entry = $map->{$type} = {
  60.            name        => $type,
  61.            argspec     => $argspec ? [split /\s*,\s*/, $argspec] : "",
  62.         };
  63.  
  64.  
  65.         #avoid 'use of uninitialized value' warnings
  66.         $entry->{$_} ||= "" for keys %{ $entry };
  67.     }
  68. }
  69.