]> granicus.if.org Git - imagemagick/commitdiff
Don't call the MagickCore methods when the iteration is empty.
authordirk <dirk@git.imagemagick.org>
Sun, 17 Jul 2016 20:32:08 +0000 (22:32 +0200)
committerdirk <dirk@git.imagemagick.org>
Sun, 17 Jul 2016 20:32:08 +0000 (22:32 +0200)
Magick++/lib/Magick++/STL.h

index cf0a308cb4fbc31b6c2297d7a7a6aa55bc8a30ed..59e3f790840edb85291662ed06f734788aaf57bc 100644 (file)
@@ -1898,7 +1898,7 @@ namespace Magick
   // container's begin() method and last_ via the container's end()
   // method in order to specify the entire container.
   template<class InputIterator>
-  void linkImages(InputIterator first_,InputIterator last_)
+  bool linkImages(InputIterator first_,InputIterator last_)
   {
     MagickCore::Image
       *current,
@@ -1927,6 +1927,7 @@ namespace Magick
 
       previous=current;
     }
+    return(scene > 0 ? true : false);
   }
 
   // Restores the channel mask of the images.
@@ -1971,11 +1972,12 @@ namespace Magick
   ///////////////////////////////////////////////////////////////////
 
   template <class InputIterator>
-  void animateImages( InputIterator first_,
-          InputIterator last_ ) {
-    linkImages( first_, last_ );
-    MagickCore::AnimateImages( first_->imageInfo(), first_->image() );
-    unlinkImages( first_, last_ );
+  void animateImages( InputIterator first_,InputIterator last_)
+  {
+    if (linkImages(first_,last_) == false)
+      return;
+    MagickCore::AnimateImages(first_->imageInfo(),first_->image());
+    unlinkImages(first_,last_);
   }
 
   // Append images from list into single image in either horizontal or
@@ -1985,8 +1987,9 @@ namespace Magick
          InputIterator first_,
          InputIterator last_,
          bool stack_ = false) {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-    linkImages( first_, last_ );
     MagickCore::Image* image = MagickCore::AppendImages( first_->image(),
                    (MagickBooleanType) stack_,
                    exceptionInfo ); 
@@ -2037,8 +2040,9 @@ namespace Magick
   void averageImages( Image *averagedImage_,
           InputIterator first_,
           InputIterator last_ ) {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-    linkImages( first_, last_ );
     MagickCore::Image* image = MagickCore::EvaluateImages( first_->image(),
       MagickCore::MeanEvaluateOperator, exceptionInfo );
     unlinkImages( first_, last_ );
@@ -2055,10 +2059,9 @@ namespace Magick
   void coalesceImages( Container *coalescedImages_,
                        InputIterator first_,
                        InputIterator last_ ) {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-
-    // Build image list
-    linkImages( first_, last_ );
     MagickCore::Image* images = MagickCore::CoalesceImages( first_->image(),
                                                           exceptionInfo);
     // Unlink image list
@@ -2230,8 +2233,9 @@ namespace Magick
     std::vector<ChannelType>
       channelMask;
 
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-    linkImages(first_,last_);
     channelMaskImages(first_,last_,&channelMask,channel_);
     image=CombineImages(first_->image(),colorspace_,exceptionInfo);
     restoreChannelMaskImages(first_,last_,&channelMask);
@@ -2261,8 +2265,9 @@ namespace Magick
     MagickCore::Image
       *images;
 
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-    linkImages(first_,last_);
     images=CompareImagesLayers(first_->image(),CompareAnyLayer,exceptionInfo);
     unlinkImages(first_,last_);
 
@@ -2278,8 +2283,9 @@ namespace Magick
   template <class InputIterator>
   void displayImages( InputIterator first_,
           InputIterator last_ ) {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-    linkImages( first_, last_ );
     MagickCore::DisplayImages( first_->imageInfo(), first_->image() );
     unlinkImages( first_, last_ );
     ThrowPPException(first_->quiet());
@@ -2294,8 +2300,9 @@ namespace Magick
                        InputIterator first_,
                        InputIterator last_,
                        const MagickEvaluateOperator operator_ ) {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-    linkImages( first_, last_ );
     MagickCore::Image* image = EvaluateImages( first_->image(), operator_, exceptionInfo );
     unlinkImages( first_, last_ );
     evaluatedImage_->replaceImage( image );
@@ -2308,8 +2315,9 @@ namespace Magick
   void flattenImages( Image *flattendImage_,
           InputIterator first_,
           InputIterator last_ ) {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-    linkImages( first_, last_ );
     MagickCore::Image* image = MagickCore::MergeImageLayers( first_->image(),
       FlattenLayer,exceptionInfo );
     unlinkImages( first_, last_ );
@@ -2365,8 +2373,9 @@ namespace Magick
     MagickCore::Image
       *image;
 
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-    linkImages(first_,last_);
     image=FxImage(first_->constImage(),expression.c_str(),exceptionInfo);
     unlinkImages(first_,last_);
     fxImage_->replaceImage(image);
@@ -2387,11 +2396,12 @@ namespace Magick
     MagickCore::QuantizeInfo
       quantizeInfo;
 
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
     MagickCore::GetQuantizeInfo(&quantizeInfo);
     quantizeInfo.dither_method = dither_ ? MagickCore::RiemersmaDitherMethod :
       MagickCore::NoDitherMethod;
-    linkImages(first_,last_);
     MagickCore::RemapImages(&quantizeInfo,first_->image(),
       (mapImage_.isValid() ? mapImage_.constImage() :
       (const MagickCore::Image*) NULL),exceptionInfo);
@@ -2439,8 +2449,9 @@ namespace Magick
                          InputIterator first_,
                          InputIterator last_,
                          const LayerMethod method_ ) {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-    linkImages( first_, last_ );
     MagickCore::Image* image = MergeImageLayers( first_->image(), method_, exceptionInfo );
     unlinkImages( first_, last_ );
     mergedImage_->replaceImage( image );
@@ -2458,6 +2469,9 @@ namespace Magick
     MagickCore::MontageInfo
       *montageInfo;
 
+    if (linkImages(first_,last_) == false)
+      return;
+
     montageInfo=static_cast<MagickCore::MontageInfo*>(
       MagickCore::AcquireMagickMemory(sizeof(MagickCore::MontageInfo)));
 
@@ -2468,9 +2482,6 @@ namespace Magick
     if (options_.label().length() != 0)
       first_->label(options_.label());
 
-    // Create linked image list
-    linkImages(first_,last_);
-
     // Do montage
     GetPPException;
     images=MagickCore::MontageImages(first_->image(),montageInfo,
@@ -2503,10 +2514,10 @@ namespace Magick
         InputIterator first_,
         InputIterator last_,
         size_t frames_ ) {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
 
-    // Build image list
-    linkImages( first_, last_ );
     MagickCore::Image* images = MagickCore::MorphImages( first_->image(), frames_,
                    exceptionInfo);
     // Unlink image list
@@ -2527,8 +2538,9 @@ namespace Magick
   void mosaicImages( Image *mosaicImage_,
          InputIterator first_,
          InputIterator last_ ) {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-    linkImages( first_, last_ );
     MagickCore::Image* image = MagickCore::MergeImageLayers( first_->image(),
        MosaicLayer,exceptionInfo ); 
     unlinkImages( first_, last_ );
@@ -2544,9 +2556,9 @@ namespace Magick
   void optimizeImageLayers( Container *optimizedImages_,
                             InputIterator first_,
                             InputIterator last_ ) {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-
-    linkImages( first_, last_ );
     MagickCore::Image* images = OptimizeImageLayers( first_->image(), exceptionInfo );
 
     unlinkImages( first_, last_ );
@@ -2565,9 +2577,9 @@ namespace Magick
   void optimizePlusImageLayers( Container *optimizedImages_,
                                 InputIterator first_,
                                 InputIterator last_ ) {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-
-    linkImages( first_, last_ );
     MagickCore::Image* images = OptimizePlusImageLayers( first_->image(), exceptionInfo );
 
     unlinkImages( first_, last_ );
@@ -2585,9 +2597,9 @@ namespace Magick
   template<class InputIterator>
   void optimizeTransparency(InputIterator first_,InputIterator last_)
   {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-
-    linkImages(first_,last_);
     OptimizeImageTransparency(first_->image(),exceptionInfo);
     unlinkImages(first_,last_ );
 
@@ -2618,10 +2630,10 @@ namespace Magick
   void quantizeImages( InputIterator first_,
            InputIterator last_,
            bool measureError_ = false ) {
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
 
-    linkImages( first_, last_ );
-
     MagickCore::QuantizeImages( first_->quantizeInfo(),
              first_->image() );
   unlinkImages( first_, last_ );
@@ -2722,8 +2734,9 @@ namespace Magick
     MagickCore::Image
       *newImage;
 
+    if (linkImages(first_,last_) == false)
+      return;
     GetPPException;
-    linkImages(first_,last_);
     newImage=MagickCore::SmushImages(first_->constImage(),
       (MagickBooleanType) stack_,offset_,exceptionInfo);
     unlinkImages(first_,last_);
@@ -2738,11 +2751,12 @@ namespace Magick
         const std::string &imageSpec_,
         bool adjoin_ = true ) {
 
+    if (linkImages(first_,last_) == false)
+      return;
+
     first_->adjoin( adjoin_ );
 
     GetPPException;
-
-    linkImages( first_, last_ );
     ::ssize_t errorStat = MagickCore::WriteImages( first_->constImageInfo(),
                                             first_->image(),
                                             imageSpec_.c_str(),
@@ -2763,11 +2777,11 @@ namespace Magick
         InputIterator last_,
         Blob *blob_,
         bool adjoin_ = true) {
+    if (linkImages(first_,last_) == false)
+      return;
 
     first_->adjoin( adjoin_ );
 
-    linkImages( first_, last_ );
-
     GetPPException;
     size_t length = 2048; // Efficient size for small images
     void* data = MagickCore::ImagesToBlob( first_->imageInfo(),