This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Simplify "remove" logic after previous refactoring
authorSteffen Mueller <smueller@cpan.org>
Thu, 10 Feb 2011 15:51:18 +0000 (16:51 +0100)
committerSteffen Mueller <smueller@cpan.org>
Tue, 12 Jul 2011 18:54:47 +0000 (20:54 +0200)
dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm

index ceea1e3..0687a3e 100644 (file)
@@ -305,7 +305,7 @@ sub remove_typemap {
     $ctype = $_[0]->tidy_ctype;
   }
 
-  return $self->_remove($ctype, 'tidy_ctype', $self->{typemap_section}, $self->{typemap_lookup});
+  return $self->_remove($ctype, $self->{typemap_section}, $self->{typemap_lookup});
 }
 
 =head2 remove_inputmap
@@ -330,7 +330,7 @@ sub remove_inputmap {
     $xstype = $_[0]->xstype;
   }
   
-  return $self->_remove($xstype, 'xstype', $self->{input_section}, $self->{input_lookup});
+  return $self->_remove($xstype, $self->{input_section}, $self->{input_lookup});
 }
 
 =head2 remove_inputmap
@@ -355,35 +355,26 @@ sub remove_outputmap {
     $xstype = $_[0]->xstype;
   }
   
-  return $self->_remove($xstype, 'xstype', $self->{output_section}, $self->{output_lookup});
+  return $self->_remove($xstype, $self->{output_section}, $self->{output_lookup});
 }
 
 sub _remove {
   my $self   = shift;
   my $rm     = shift;
-  my $method = shift;
   my $array  = shift;
   my $lookup = shift;
 
-  if ($lookup) {
-    my $index = $lookup->{$rm};
-    return() if not defined $index;
-    splice(@$array, $index, 1);
-    foreach my $key (keys %$lookup) {
-      if ($lookup->{$key} > $index) {
-        $lookup->{$key}--;
-      }
-    }
-  }
-  else {
-    my $index = 0;
-    foreach my $map (@$array) {
-      last if $map->$method() eq $rm;
-      $index++;
-    }
-    if ($index < @$array) {
-      splice(@$array, $index, 1);
-      return 1;
+  # Just fetch the index of the item from the lookup table
+  my $index = $lookup->{$rm};
+  return() if not defined $index;
+
+  # Nuke the item from storage
+  splice(@$array, $index, 1);
+
+  # Decrement the storage position of all items thereafter
+  foreach my $key (keys %$lookup) {
+    if ($lookup->{$key} > $index) {
+      $lookup->{$key}--;
     }
   }
   return();