changeset 2251:dee4cce1857a

cppcheck
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 02 Dec 2025 18:43:13 +0100
parents 66e2e0a35283
children fc8d9b8acc6b
files Applications/Resources/RunCppCheck-2.17.1.sh OrthancStone/Sources/Scene2D/CairoCompositor.cpp OrthancStone/Sources/Scene2D/CairoCompositor.h OrthancStone/Sources/Scene2D/Internals/CairoBaseRenderer.h OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.cpp OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.h OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.cpp OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.h OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.cpp OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.h OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.cpp OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.h OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.cpp OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.h OrthancStone/Sources/Scene2D/OpenGLCompositor.cpp OrthancStone/Sources/Scene2D/OpenGLCompositor.h OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureTracker.cpp OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.cpp OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.cpp OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.h OrthancStone/Sources/Toolbox/DebugDrawing2D.cpp OrthancStone/Sources/Toolbox/DicomStructuredReport.cpp OrthancStone/Sources/Toolbox/ImageGeometry.cpp OrthancStone/Sources/Volumes/ImageBuffer3D.cpp OrthancStone/Sources/Volumes/ImageBuffer3D.h
diffstat 26 files changed, 98 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/Applications/Resources/RunCppCheck-2.17.1.sh	Tue Dec 02 14:30:15 2025 +0100
+++ b/Applications/Resources/RunCppCheck-2.17.1.sh	Tue Dec 02 18:43:13 2025 +0100
@@ -12,6 +12,10 @@
 cat <<EOF > /tmp/cppcheck-suppressions.txt
 assertWithSideEffect:../../OrthancStone/Sources/Loaders/OrthancMultiframeVolumeLoader.cpp:341
 assertWithSideEffect:../../OrthancStone/Sources/Loaders/OrthancMultiframeVolumeLoader.cpp:342
+constParameterPointer:../../OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOracle.cpp:59
+constVariableReference:../../OrthancStone/Sources/Scene2D/GrayscaleWindowingSceneTracker.cpp:53
+knownConditionTrueFalse:../../OrthancStone/Sources/Toolbox/ImageGeometry.cpp:184
+unusedStructMember:../../OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOracle.cpp:293
 EOF
 
 CPPCHECK_BUILD_DIR=/tmp/cppcheck-build-dir-stone-2.7.1/
--- a/OrthancStone/Sources/Scene2D/CairoCompositor.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/CairoCompositor.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -98,7 +98,7 @@
   CairoCompositor::CairoCompositor(unsigned int canvasWidth,
                                    unsigned int canvasHeight)
   {
-    ResetScene();
+    ResetSceneInternal();
     canvas_.SetSize(canvasWidth, canvasHeight, false);
   }
 
--- a/OrthancStone/Sources/Scene2D/CairoCompositor.h	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/CairoCompositor.h	Tue Dec 02 18:43:13 2025 +0100
@@ -50,6 +50,11 @@
 
     virtual Internals::CompositorHelper::ILayerRenderer* Create(const ISceneLayer& layer) ORTHANC_OVERRIDE;
 
+    void ResetSceneInternal()
+    {
+      helper_.reset(new Internals::CompositorHelper(*this));
+    }
+
   public:
     CairoCompositor(unsigned int canvasWidth,
                     unsigned int canvasHeight);
@@ -88,7 +93,7 @@
 
     virtual void ResetScene() ORTHANC_OVERRIDE
     {
-      helper_.reset(new Internals::CompositorHelper(*this));
+      ResetSceneInternal();
     }
 
     Orthanc::ImageAccessor* RenderText(size_t fontIndex,
--- a/OrthancStone/Sources/Scene2D/Internals/CairoBaseRenderer.h	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/Internals/CairoBaseRenderer.h	Tue Dec 02 18:43:13 2025 +0100
@@ -38,6 +38,11 @@
       ICairoContextProvider&      target_;
       std::unique_ptr<ISceneLayer>  layer_;
 
+      void UpdateInternal(const ISceneLayer& layer)
+      {
+        layer_.reset(layer.Clone());
+      }
+
     protected:
       template<typename T>
       const T& GetLayer() const
@@ -55,12 +60,12 @@
                         const ISceneLayer& layer) :
         target_(target)
       {
-        Update(layer);
+        UpdateInternal(layer);
       }
 
       virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE
       {
-        layer_.reset(layer.Clone());
+        UpdateInternal(layer);
       }
     };
   }
--- a/OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -33,11 +33,11 @@
                                                          const ISceneLayer& layer) :
       target_(target)
     {
-      Update(layer);
+      UpdateInternal(layer);
     }
 
     
-    void CairoColorTextureRenderer::Update(const ISceneLayer& layer)
+    void CairoColorTextureRenderer::UpdateInternal(const ISceneLayer& layer)
     {
       const ColorTextureSceneLayer& l = dynamic_cast<const ColorTextureSceneLayer&>(layer);
 
--- a/OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.h	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.h	Tue Dec 02 18:43:13 2025 +0100
@@ -39,12 +39,17 @@
       AffineTransform2D       textureTransform_;
       bool                    isLinearInterpolation_;
     
+      void UpdateInternal(const ISceneLayer& layer);
+
     public:
       CairoColorTextureRenderer(ICairoContextProvider& target,
                                 const ISceneLayer& layer);
 
-      virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE;
-    
+      virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE
+      {
+        UpdateInternal(layer);
+      }
+
       virtual void Render(const AffineTransform2D& transform,
                           unsigned int canvasWidth,
                           unsigned int canvasHeight) ORTHANC_OVERRIDE
--- a/OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -30,7 +30,7 @@
 {
   namespace Internals
   {
-    void CairoFloatTextureRenderer::Update(const ISceneLayer& layer)
+    void CairoFloatTextureRenderer::UpdateInternal(const ISceneLayer& layer)
     {
       const FloatTextureSceneLayer& l = dynamic_cast<const FloatTextureSceneLayer&>(layer);
 
--- a/OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.h	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.h	Tue Dec 02 18:43:13 2025 +0100
@@ -39,15 +39,20 @@
       AffineTransform2D       textureTransform_;
       bool                    isLinearInterpolation_;
     
+      void UpdateInternal(const ISceneLayer& layer);
+
     public:
       CairoFloatTextureRenderer(ICairoContextProvider& target,
                                 const ISceneLayer& layer) :
         target_(target)
       {
-        Update(layer);
+        UpdateInternal(layer);
       }
 
-      virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE;
+      virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE
+      {
+        UpdateInternal(layer);
+      }
     
       virtual void Render(const AffineTransform2D& transform,
                           unsigned int canvasWidth,
--- a/OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -29,7 +29,7 @@
 {
   namespace Internals
   {
-    void CairoInfoPanelRenderer::Update(const ISceneLayer& layer)
+    void CairoInfoPanelRenderer::UpdateInternal(const ISceneLayer& layer)
     {
       const InfoPanelSceneLayer& l = dynamic_cast<const InfoPanelSceneLayer&>(layer);
 
--- a/OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.h	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.h	Tue Dec 02 18:43:13 2025 +0100
@@ -40,6 +40,8 @@
       bool                   isLinearInterpolation_;
       bool                   applySceneRotation_;
 
+      void UpdateInternal(const ISceneLayer& layer);
+
     public:
       CairoInfoPanelRenderer(ICairoContextProvider& target,
                              const ISceneLayer& layer) :
@@ -48,10 +50,13 @@
         applySceneRotation_(false)
 
       {
-        Update(layer);
+        UpdateInternal(layer);
       }
 
-      virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE;
+      virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE
+      {
+        UpdateInternal(layer);
+      }
       
       virtual void Render(const AffineTransform2D& transform,
                           unsigned int canvasWidth,
--- a/OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -32,7 +32,7 @@
 {
   namespace Internals
   {
-    void CairoLookupTableTextureRenderer::Update(const ISceneLayer& layer)
+    void CairoLookupTableTextureRenderer::UpdateInternal(const ISceneLayer& layer)
     {
       const LookupTableTextureSceneLayer& l = dynamic_cast<const LookupTableTextureSceneLayer&>(layer);
 
--- a/OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.h	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.h	Tue Dec 02 18:43:13 2025 +0100
@@ -39,15 +39,20 @@
       AffineTransform2D       textureTransform_;
       bool                    isLinearInterpolation_;
     
+      void UpdateInternal(const ISceneLayer& layer);
+
     public:
       CairoLookupTableTextureRenderer(ICairoContextProvider& target,
                                       const ISceneLayer& layer) :
         target_(target)
       {
-        Update(layer);
+        UpdateInternal(layer);
       }
 
-      virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE;
+      virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE
+      {
+        UpdateInternal(layer);
+      }
     
       virtual void Render(const AffineTransform2D& transform,
                           unsigned int canvasWidth,
--- a/OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -52,7 +52,7 @@
     }
     
       
-    void MacroLayerRenderer::Update(const ISceneLayer& layer)
+    void MacroLayerRenderer::UpdateInternal(const ISceneLayer& layer)
     {
       const MacroSceneLayer& macro = dynamic_cast<const MacroSceneLayer&>(layer);
       
--- a/OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.h	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.h	Tue Dec 02 18:43:13 2025 +0100
@@ -39,12 +39,14 @@
 
       void Clear();
       
+      void UpdateInternal(const ISceneLayer& layer);
+
     public:
       MacroLayerRenderer(Internals::CompositorHelper::IRendererFactory& factory,
                          const ISceneLayer& layer) :
         factory_(factory)
       {
-        Update(layer);
+        UpdateInternal(layer);
       }
       
       virtual ~MacroLayerRenderer()
@@ -56,7 +58,10 @@
                           unsigned int canvasWidth,
                           unsigned int canvasHeight) ORTHANC_OVERRIDE;
       
-      virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE;
+      virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE
+      {
+        UpdateInternal(layer);
+      }
     };
   }
 }
--- a/OrthancStone/Sources/Scene2D/OpenGLCompositor.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/OpenGLCompositor.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -150,7 +150,7 @@
     canvasWidth_(0),
     canvasHeight_(0)
   {
-    ResetScene();
+    ResetSceneInternal();
   }
 
   OpenGLCompositor::~OpenGLCompositor()
--- a/OrthancStone/Sources/Scene2D/OpenGLCompositor.h	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/OpenGLCompositor.h	Tue Dec 02 18:43:13 2025 +0100
@@ -53,6 +53,11 @@
 
     virtual Internals::CompositorHelper::ILayerRenderer* Create(const ISceneLayer& layer) ORTHANC_OVERRIDE;
 
+    void ResetSceneInternal()
+    {
+      helper_.reset(new Internals::CompositorHelper(*this));
+    }
+
   public:
     explicit OpenGLCompositor(OpenGL::IOpenGLContext& context);
 
@@ -62,7 +67,7 @@
 
     virtual void ResetScene() ORTHANC_OVERRIDE
     {
-      helper_.reset(new Internals::CompositorHelper(*this));
+      ResetSceneInternal();
     }
 
     void SetFont(size_t index, const GlyphBitmapAlphabet& dict);
--- a/OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -77,12 +77,12 @@
         z = MIN_ZOOM + (MAX_ZOOM - MIN_ZOOM) * (dy + 1.0) / 2.0;
       }
 
-      double zoom = pow(2.0, z);
-
       ViewportLocker locker(viewport_);
     
       if (locker.IsValid())
       {
+        const double zoom = pow(2.0, z);
+
         locker.GetController().SetSceneToCanvasTransform(
           AffineTransform2D::Combine(
             AffineTransform2D::CreateScaling(zoom, zoom),
--- a/OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureTracker.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureTracker.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -36,7 +36,7 @@
     
     {    
       std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
-      Scene2D& scene = lock->GetController().GetScene();
+      const Scene2D& scene = lock->GetController().GetScene();
       point = e.GetMainPosition().Apply(scene.GetCanvasToSceneTransform());
     }
     
--- a/OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -38,7 +38,7 @@
     
     {
       std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
-      Scene2D& scene = lock->GetController().GetScene();
+      const Scene2D& scene = lock->GetController().GetScene();
       scenePos = e.GetMainPosition().Apply(scene.GetCanvasToSceneTransform());
     }
     
--- a/OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -297,7 +297,7 @@
   for the actual text
   */
   void SetTextLayerOutlineProperties(
-    Scene2D& scene
+    const Scene2D& scene
     , boost::shared_ptr<LayerHolder> layerHolder
     , const char* text
     , ScenePoint2D p
@@ -330,7 +330,6 @@
                               TEXT_OUTLINE_COLOR_BLUE);
         }
 
-        ScenePoint2D textAnchor;
         int offIndex = i - startingLayerIndex;
         ORTHANC_ASSERT(offIndex >= 0 && offIndex < 5);
         textLayer->SetPosition(
@@ -341,7 +340,7 @@
   }
 #else
   void SetTextLayerProperties(
-    Scene2D& scene
+    const Scene2D& scene
     , boost::shared_ptr<LayerHolder> layerHolder
     , const char* text
     , ScenePoint2D p
@@ -352,8 +351,6 @@
     {
       textLayer->SetText(text);
       textLayer->SetColor(TEXT_COLOR_RED, TEXT_COLOR_GREEN, TEXT_COLOR_BLUE);
-
-      ScenePoint2D textAnchor;
       textLayer->SetPosition(p.GetX(), p.GetY());
     }
   }
--- a/OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.h	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.h	Tue Dec 02 18:43:13 2025 +0100
@@ -183,14 +183,14 @@
   from startingLayerIndex, up to (and not including) startingLayerIndex+5.
   */
   void SetTextLayerOutlineProperties(
-      Scene2D& scene
+    const Scene2D& scene
     , boost::shared_ptr<LayerHolder> layerHolder
     , const char* text
     , ScenePoint2D p
     , int startingLayerIndex);
 #else
   void SetTextLayerProperties(
-    Scene2D& scene
+    const Scene2D& scene
     , boost::shared_ptr<LayerHolder> layerHolder
     , const char* text
     , ScenePoint2D p
--- a/OrthancStone/Sources/Toolbox/DebugDrawing2D.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Toolbox/DebugDrawing2D.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -23,6 +23,8 @@
 
 #include "DebugDrawing2D.h"
 
+#include <OrthancException.h>
+
 #include <stdio.h>
 
 
@@ -125,6 +127,11 @@
     }
 
     FILE* fp = fopen(path.c_str(), "w");
+    if (fp == NULL)
+    {
+      throw Orthanc::OrthancException(Orthanc::ErrorCode_CannotWriteFile);
+    }
+
     fprintf(fp, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n");
     fprintf(fp, "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n");
     fprintf(fp, "<svg width=\"%f\" height=\"%f\" viewBox=\"0 0 %f %f\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", ww, hh, extent_.GetWidth(), extent_.GetHeight());
--- a/OrthancStone/Sources/Toolbox/DicomStructuredReport.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Toolbox/DicomStructuredReport.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -989,7 +989,7 @@
     size_t pos = s.find('.');
     if (pos != std::string::npos)
     {
-      s = s.substr(0, pos);
+      s.resize(pos);
     }
 
     s = "\021Series Date Time:\022 " + GetMainDicomTags().GetStringValue(Orthanc::DICOM_TAG_SERIES_DATE, "", false) + " at " + s;
--- a/OrthancStone/Sources/Toolbox/ImageGeometry.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Toolbox/ImageGeometry.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -136,7 +136,7 @@
             bool HasOffsetX,
             bool HasOffsetY>
   static void ApplyAffineTransformToRow(typename Reader::PixelType* p,
-                                        Reader& reader,
+                                        const Reader& reader,
                                         unsigned int x1,
                                         unsigned int x2,
                                         float positionX,
--- a/OrthancStone/Sources/Volumes/ImageBuffer3D.cpp	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Volumes/ImageBuffer3D.cpp	Tue Dec 02 18:43:13 2025 +0100
@@ -163,7 +163,7 @@
 
   uint64_t ImageBuffer3D::GetEstimatedMemorySize() const
   {
-    return image_.GetPitch() * image_.GetHeight() * Orthanc::GetBytesPerPixel(format_);
+    return static_cast<uint64_t>(image_.GetPitch()) * image_.GetHeight() * Orthanc::GetBytesPerPixel(format_);
   }
 
 
@@ -309,6 +309,19 @@
   }
 
 
+  ImageBuffer3D::SliceWriter::~SliceWriter()
+  {
+    try
+    {
+      Flush();
+    }
+    catch (Orthanc::OrthancException& e)
+    {
+      LOG(ERROR) << "Exception in destructor: " << e.What();
+    }
+  }
+
+
   uint8_t ImageBuffer3D::GetVoxelGrayscale8(unsigned int x,
                                             unsigned int y,
                                             unsigned int z) const
--- a/OrthancStone/Sources/Volumes/ImageBuffer3D.h	Tue Dec 02 14:30:15 2025 +0100
+++ b/OrthancStone/Sources/Volumes/ImageBuffer3D.h	Tue Dec 02 18:43:13 2025 +0100
@@ -240,10 +240,7 @@
                   VolumeProjection projection,
                   unsigned int slice);
 
-      ~SliceWriter()
-      {
-        Flush();
-      }
+      ~SliceWriter();
 
       const Orthanc::ImageAccessor& GetAccessor() const
       {