changeset 1396:ac4efabeb80c

Migration of the orthanc-client as a separate project
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 01 Jun 2015 11:15:55 +0200
parents 785e01da36a1
children 704de8c30ff5
files CMakeLists.txt Core/Enumerations.h Core/FileStorage/IStorageArea.h Core/ImageFormats/ImageAccessor.h Core/MultiThreading/ArrayFilledByThreads.cpp Core/MultiThreading/ArrayFilledByThreads.h Core/MultiThreading/ThreadedCommandProcessor.cpp Core/MultiThreading/ThreadedCommandProcessor.h NEWS OrthancCppClient/Instance.cpp OrthancCppClient/Instance.h OrthancCppClient/OrthancClientException.h OrthancCppClient/OrthancConnection.cpp OrthancCppClient/OrthancConnection.h OrthancCppClient/OrthancCppClient.cpp OrthancCppClient/Patient.cpp OrthancCppClient/Patient.h OrthancCppClient/Series.cpp OrthancCppClient/Series.h OrthancCppClient/SharedLibrary/AUTOGENERATED/ExternC.cpp OrthancCppClient/SharedLibrary/AUTOGENERATED/OrthancCppClient.h OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows32.def OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows32.rc OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows64.def OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows64.rc OrthancCppClient/SharedLibrary/ConfigurationCpp.json OrthancCppClient/SharedLibrary/Generate.sh OrthancCppClient/SharedLibrary/Laaw/VersionScript.map OrthancCppClient/SharedLibrary/Laaw/laaw/laaw-exports.h OrthancCppClient/SharedLibrary/Laaw/laaw/laaw.h OrthancCppClient/SharedLibrary/Product.json OrthancCppClient/SharedLibrary/SharedLibrary.cpp OrthancCppClient/Study.cpp OrthancCppClient/Study.h Resources/OrthancClient.doxygen UnitTestsSources/LuaTests.cpp UnitTestsSources/MultiThreadingTests.cpp
diffstat 37 files changed, 9 insertions(+), 8456 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Sat May 30 10:03:07 2015 +0200
+++ b/CMakeLists.txt	Mon Jun 01 11:15:55 2015 +0200
@@ -14,7 +14,6 @@
 SET(STATIC_BUILD OFF CACHE BOOL "Static build of the third-party libraries (necessary for Windows)")
 SET(STANDALONE_BUILD ON CACHE BOOL "Standalone build (all the resources are embedded, necessary for releases)")
 SET(ENABLE_SSL ON CACHE BOOL "Include support for SSL")
-SET(BUILD_CLIENT_LIBRARY ON CACHE BOOL "Build the client library")
 SET(DCMTK_DICTIONARY_DIR "" CACHE PATH "Directory containing the DCMTK dictionaries \"dicom.dic\" and \"private.dic\" (only when using system version of DCMTK)") 
 SET(ALLOW_DOWNLOADS OFF CACHE BOOL "Allow CMake to download packages")
 SET(UNIT_TESTS_WITH_HTTP_CONNEXIONS ON CACHE BOOL "Allow unit tests to make HTTP requests")
@@ -102,13 +101,11 @@
   Core/RestApi/RestApiPath.cpp
   Core/RestApi/RestApiOutput.cpp
   Core/RestApi/RestApi.cpp
-  Core/MultiThreading/ArrayFilledByThreads.cpp
   Core/MultiThreading/BagOfRunnablesBySteps.cpp
   Core/MultiThreading/Mutex.cpp
   Core/MultiThreading/ReaderWriterLock.cpp
   Core/MultiThreading/Semaphore.cpp
   Core/MultiThreading/SharedMessageQueue.cpp
-  Core/MultiThreading/ThreadedCommandProcessor.cpp
   Core/ImageFormats/ImageAccessor.cpp
   Core/ImageFormats/ImageBuffer.cpp
   Core/ImageFormats/ImageProcessing.cpp
@@ -125,12 +122,6 @@
   Core/Lua/LuaContext.cpp
   Core/Lua/LuaFunctionCall.cpp
 
-  OrthancCppClient/OrthancConnection.cpp
-  OrthancCppClient/Study.cpp
-  OrthancCppClient/Series.cpp
-  OrthancCppClient/Instance.cpp
-  OrthancCppClient/Patient.cpp
-
   Plugins/Engine/SharedLibrary.cpp
   Plugins/Engine/PluginsManager.cpp
   Plugins/Engine/OrthancPlugins.cpp
@@ -404,114 +395,6 @@
   )
 
 
-#####################################################################
-## Create the standalone DLL containing the Orthanc Client API
-#####################################################################
-
-if (BUILD_CLIENT_LIBRARY)
-  include_directories(${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/Laaw)
-
-  if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
-    if (CMAKE_CROSSCOMPILING)
-      # Remove the default "lib" prefix from "libOrthancClient.dll" if cross-compiling
-      set(CMAKE_SHARED_LIBRARY_PREFIX "")
-
-      if (${CMAKE_SIZEOF_VOID_P} EQUAL 4)
-        set(ORTHANC_CPP_CLIENT_AUX ${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows32.def)
-      elseif (${CMAKE_SIZEOF_VOID_P} EQUAL 8)
-        set(ORTHANC_CPP_CLIENT_AUX ${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows64.def)
-      else()
-        message(FATAL_ERROR "Support your platform here")
-      endif()
-    else()
-      # Nothing to do if using Visual Studio
-    endif()
-
-    if (${CMAKE_SIZEOF_VOID_P} EQUAL 4)
-      set(CMAKE_SHARED_LIBRARY_SUFFIX "_Windows32.dll")
-      list(APPEND ORTHANC_CPP_CLIENT_AUX ${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows32.rc)
-    elseif (${CMAKE_SIZEOF_VOID_P} EQUAL 8)
-      set(CMAKE_SHARED_LIBRARY_SUFFIX "_Windows64.dll")
-      list(APPEND ORTHANC_CPP_CLIENT_AUX ${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows64.rc)
-    else()
-      message(FATAL_ERROR "Support your platform here")
-    endif()    
-
-  else()
-    set(ORTHANC_CPP_CLIENT_AUX ${OPENSSL_SOURCES})
-  endif()
-
-  add_library(OrthancClient SHARED
-    ${ORTHANC_ROOT}/OrthancCppClient/OrthancCppClient.cpp
-    ${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/SharedLibrary.cpp
-    ${ORTHANC_ROOT}/Resources/ThirdParty/md5/md5.c
-    ${ORTHANC_ROOT}/Resources/ThirdParty/base64/base64.cpp
-    ${ORTHANC_CPP_CLIENT_AUX}
-    ${THIRD_PARTY_SOURCES}
-    ${CURL_SOURCES}
-    ${GOOGLE_LOG_SOURCES}
-    )
-
-  if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR
-      ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD" OR
-      ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
-    set_target_properties(OrthancClient
-      PROPERTIES LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined -Wl,--as-needed -Wl,--version-script=${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/Laaw/VersionScript.map"
-      )
-    target_link_libraries(OrthancClient pthread)
-
-  elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
-    target_link_libraries(OrthancClient OpenSSL ws2_32)
-
-    if (CMAKE_CROSSCOMPILING)
-      set_target_properties(OrthancClient
-        PROPERTIES LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--allow-multiple-definition -static-libgcc -static-libstdc++"
-        )
-    endif()
-
-  elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
-    # TODO
-    target_link_libraries(OrthancClient pthread)
-
-  else()
-    message(FATAL_ERROR "Support your platform here")
-  endif()
-
-
-  # Set the version of the "Orthanc Client" shared library
-  file(STRINGS
-    ${CMAKE_SOURCE_DIR}/OrthancCppClient/SharedLibrary/Product.json
-    ORTHANC_CLIENT_VERSION_TMP
-    REGEX "^[ \t]*\"Version\"[ \t]*")
-
-  string(REGEX REPLACE "^.*\"([0-9]+)\\.([0-9]+)\\.([0-9]+)\"" "\\1.\\2" 
-    ORTHANC_CLIENT_VERSION ${ORTHANC_CLIENT_VERSION_TMP})
-
-  message("Setting the version of the library to ${ORTHANC_CLIENT_VERSION}")
-
-  set_target_properties(OrthancClient PROPERTIES 
-    VERSION ${ORTHANC_CLIENT_VERSION} 
-    SOVERSION ${ORTHANC_CLIENT_VERSION})
-
-
-  install(
-    TARGETS OrthancClient
-    RUNTIME DESTINATION lib    # Destination for Windows
-    LIBRARY DESTINATION lib    # Destination for Linux
-    )
-
-  install(
-    FILES
-    ${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/AUTOGENERATED/OrthancCppClient.h 
-    ${ORTHANC_ROOT}/Plugins/Include/OrthancCPlugin.h 
-    ${ORTHANC_ROOT}/Plugins/Include/OrthancCDatabasePlugin.h 
-    ${ORTHANC_ROOT}/Plugins/Include/OrthancCppDatabasePlugin.h 
-    DESTINATION include/orthanc
-    )
-endif()
-
-
-        
 
 #####################################################################
 ## Generate the documentation if Doxygen is present
@@ -545,26 +428,6 @@
     DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/OrthancPluginDocumentation/doc/
     DESTINATION share/doc/orthanc/OrthancPlugin
     )
-
-  if (BUILD_CLIENT_LIBRARY)
-    configure_file(
-      ${CMAKE_SOURCE_DIR}/Resources/OrthancClient.doxygen
-      ${CMAKE_CURRENT_BINARY_DIR}/OrthancClient.doxygen
-      @ONLY)
-
-    add_custom_command(TARGET OrthancClient 
-      POST_BUILD
-      COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/OrthancClient.doxygen
-      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-      COMMENT "Generating client documentation with Doxygen" VERBATIM
-      )
-
-    install(
-      DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/OrthancClientDocumentation/doc/
-      DESTINATION share/doc/orthanc/OrthancClient
-      )
-  endif()
-
 else()
   message("Doxygen not found. The documentation will not be built.")
 endif()
--- a/Core/Enumerations.h	Sat May 30 10:03:07 2015 +0200
+++ b/Core/Enumerations.h	Mon Jun 01 11:15:55 2015 +0200
@@ -32,8 +32,6 @@
 
 #pragma once
 
-#include <laaw/laaw.h>
-
 namespace Orthanc
 {
   enum Endianness
@@ -78,10 +76,11 @@
     ErrorCode_Plugin
   };
 
+
   /**
    * {summary}{The memory layout of the pixels (resp. voxels) of a 2D (resp. 3D) image.}
    **/
-  enum LAAW_API PixelFormat
+  enum PixelFormat
   {
     /**
      * {summary}{Color image in RGB24 format.}
@@ -120,7 +119,7 @@
   /**
    * {summary}{The extraction mode specifies the way the values of the pixels are scaled when downloading a 2D image.}
    **/
-  enum LAAW_API ImageExtractionMode
+  enum ImageExtractionMode
   {
     /**
      * {summary}{Rescaled to 8bpp.}
--- a/Core/FileStorage/IStorageArea.h	Sat May 30 10:03:07 2015 +0200
+++ b/Core/FileStorage/IStorageArea.h	Mon Jun 01 11:15:55 2015 +0200
@@ -34,6 +34,7 @@
 
 #include "../Enumerations.h"
 
+#include <string>
 #include <boost/noncopyable.hpp>
 
 namespace Orthanc
--- a/Core/ImageFormats/ImageAccessor.h	Sat May 30 10:03:07 2015 +0200
+++ b/Core/ImageFormats/ImageAccessor.h	Mon Jun 01 11:15:55 2015 +0200
@@ -34,6 +34,8 @@
 
 #include "../Enumerations.h"
 
+#include <string>
+
 namespace Orthanc
 {
   class ImageAccessor
--- a/Core/MultiThreading/ArrayFilledByThreads.cpp	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#include "../PrecompiledHeaders.h"
-#include "ArrayFilledByThreads.h"
-
-#include "../MultiThreading/ThreadedCommandProcessor.h"
-#include "../OrthancException.h"
-
-namespace Orthanc
-{
-  class ArrayFilledByThreads::Command : public ICommand
-  {
-  private:
-    ArrayFilledByThreads&  that_;
-    size_t  index_;
-
-  public:
-    Command(ArrayFilledByThreads& that,
-            size_t index) :
-      that_(that),
-      index_(index)
-    {
-    }
-
-    virtual bool Execute()
-    {
-      std::auto_ptr<IDynamicObject> obj(that_.filler_.GetFillerItem(index_));
-      if (obj.get() == NULL)
-      {
-        return false;
-      }
-      else
-      {
-        boost::mutex::scoped_lock lock(that_.mutex_);
-        that_.array_[index_] = obj.release();
-        return true;
-      }
-    }
-  };
-
-  void ArrayFilledByThreads::Clear()
-  {
-    for (size_t i = 0; i < array_.size(); i++)
-    {
-      if (array_[i])
-        delete array_[i];
-    }
-
-    array_.clear();
-    filled_ = false;
-  }
-
-  void ArrayFilledByThreads::Update()
-  {
-    if (!filled_)
-    {
-      array_.resize(filler_.GetFillerSize());
-
-      Orthanc::ThreadedCommandProcessor processor(threadCount_);
-      for (size_t i = 0; i < array_.size(); i++)
-      {
-        processor.Post(new Command(*this, i));
-      }
-
-      processor.Join();
-      filled_ = true;
-    }
-  }
-
-
-  ArrayFilledByThreads::ArrayFilledByThreads(IFiller& filler) : filler_(filler)
-  {
-    filled_ = false;
-    threadCount_ = 4;
-  }
-
-
-  ArrayFilledByThreads::~ArrayFilledByThreads()
-  {
-    Clear();
-  }
-
-  
-  void ArrayFilledByThreads::Reload()
-  {
-    Clear();
-    Update();
-  }
-
-
-  void ArrayFilledByThreads::Invalidate()
-  {
-    Clear();
-  }
-
-
-  void ArrayFilledByThreads::SetThreadCount(unsigned int t)
-  {
-    if (t < 1)
-    {
-      throw OrthancException(ErrorCode_ParameterOutOfRange);
-    }
-
-    threadCount_ = t;
-  }
-
-
-  size_t ArrayFilledByThreads::GetSize()
-  {
-    Update();
-    return array_.size();
-  }
-
-
-  IDynamicObject& ArrayFilledByThreads::GetItem(size_t index)
-  {
-    if (index >= GetSize())
-    {
-      throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
-    }
-
-    return *array_[index];
-  }
-}
--- a/Core/MultiThreading/ArrayFilledByThreads.h	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-#pragma once
-
-#include <boost/thread.hpp>
-
-#include "../IDynamicObject.h"
-
-namespace Orthanc
-{
-  class ArrayFilledByThreads
-  {
-  public:
-    class IFiller
-    {
-    public:
-      virtual size_t GetFillerSize() = 0;
-
-      virtual IDynamicObject* GetFillerItem(size_t index) = 0;
-    };
-
-  private:
-    IFiller& filler_;
-    boost::mutex  mutex_;
-    std::vector<IDynamicObject*>  array_;
-    bool filled_;
-    unsigned int threadCount_;
-
-    class Command;
-
-    void Clear();
-
-    void Update();
-
-  public:
-    ArrayFilledByThreads(IFiller& filler);
-
-    ~ArrayFilledByThreads();
-  
-    void Reload();
-
-    void Invalidate();
-
-    void SetThreadCount(unsigned int t);
-
-    unsigned int GetThreadCount() const
-    {
-      return threadCount_;
-    }
-
-    size_t GetSize();
-
-    IDynamicObject& GetItem(size_t index);
-  };
-}
-
--- a/Core/MultiThreading/ThreadedCommandProcessor.cpp	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,211 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#include "../PrecompiledHeaders.h"
-#include "ThreadedCommandProcessor.h"
-
-#include "../OrthancException.h"
-
-namespace Orthanc
-{
-  static const int32_t TIMEOUT = 10;
-
-
-  void ThreadedCommandProcessor::Processor(ThreadedCommandProcessor* that)
-  {
-    while (!that->done_)
-    {
-      std::auto_ptr<IDynamicObject> command(that->queue_.Dequeue(TIMEOUT));
-
-      if (command.get() != NULL)
-      {
-        bool success = false;
-
-        try
-        {
-          if (that->success_)
-          {
-            // No command has failed so far
-
-            if (that->cancel_)
-            {
-              // The commands have been canceled. Skip the execution
-              // of this command, yet mark it as succeeded.
-              success = true;
-            }
-            else
-            {
-              success = dynamic_cast<ICommand&>(*command).Execute();
-            }
-          }
-          else
-          {
-            // A command has already failed. Skip the execution of this command.
-          }
-        }
-        catch (OrthancException)
-        {
-        }
-
-        {
-          boost::mutex::scoped_lock lock(that->mutex_);
-          assert(that->remainingCommands_ > 0);
-          that->remainingCommands_--;
-
-          if (!success)
-          {
-            if (!that->cancel_ && that->listener_ && that->success_)
-            {
-              // This is the first command that fails
-              that->listener_->SignalFailure();
-            }
-
-            that->success_ = false;
-          }
-          else
-          {
-            if (!that->cancel_ && that->listener_)
-            {
-              if (that->remainingCommands_ == 0)
-              {
-                that->listener_->SignalSuccess(that->totalCommands_);
-              }
-              else
-              {
-                that->listener_->SignalProgress(that->totalCommands_ - that->remainingCommands_,
-                                                that->totalCommands_);
-              }
-            }
-          }
-
-          that->processedCommand_.notify_all();
-        }
-      }
-    }
-  }
-
-
-  ThreadedCommandProcessor::ThreadedCommandProcessor(unsigned int numThreads)
-  {
-    if (numThreads < 1)
-    {
-      throw OrthancException(ErrorCode_ParameterOutOfRange);
-    }
-
-    listener_ = NULL;
-    success_ = true;
-    done_ = false;
-    cancel_ = false;
-    threads_.resize(numThreads);
-    remainingCommands_ = 0;
-    totalCommands_ = 0;
-
-    for (unsigned int i = 0; i < numThreads; i++)
-    {
-      threads_[i] = new boost::thread(Processor, this);
-    }
-  }
-
-
-  ThreadedCommandProcessor::~ThreadedCommandProcessor()
-  {
-    done_ = true;
-      
-    for (unsigned int i = 0; i < threads_.size(); i++)
-    {
-      boost::thread* t = threads_[i];
-
-      if (t != NULL)
-      {
-        if (t->joinable())
-        {
-          t->join();
-        }
-
-        delete t;
-      }
-    }
-  }
-
-
-  void ThreadedCommandProcessor::Post(ICommand* command)
-  {
-    if (command == NULL)
-    {
-      throw OrthancException(ErrorCode_ParameterOutOfRange);
-    }
-
-    boost::mutex::scoped_lock lock(mutex_);
-    queue_.Enqueue(command);
-    remainingCommands_++;
-    totalCommands_++;
-  }
-
-
-  bool ThreadedCommandProcessor::Join()
-  {
-    boost::mutex::scoped_lock lock(mutex_);
-
-    while (remainingCommands_ != 0)
-    {
-      processedCommand_.wait(lock);
-    }
-
-    if (cancel_ && listener_)
-    {
-      listener_->SignalCancel();
-    }
-
-    // Reset the sequence counters for subsequent commands
-    bool hasSucceeded = success_;
-    success_ = true;
-    totalCommands_ = 0;
-    cancel_ = false;
-
-    return hasSucceeded;
-  }
-
-
-  void ThreadedCommandProcessor::Cancel()
-  {
-    boost::mutex::scoped_lock lock(mutex_);
-
-    cancel_ = true;
-  }
-
-
-  void ThreadedCommandProcessor::SetListener(IListener& listener)
-  {
-    boost::mutex::scoped_lock lock(mutex_);
-    listener_ = &listener;
-  }
-}
--- a/Core/MultiThreading/ThreadedCommandProcessor.h	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#pragma once
-
-#include "../ICommand.h"
-
-#include "SharedMessageQueue.h"
-
-namespace Orthanc
-{
-  class ThreadedCommandProcessor
-  {
-  public:
-    class IListener
-    {
-    public:
-      virtual ~IListener()
-      {
-      }
-
-      virtual void SignalProgress(unsigned int current,
-                                  unsigned int total) = 0;
-
-      virtual void SignalSuccess(unsigned int total) = 0;
-
-      virtual void SignalFailure() = 0;
-
-      virtual void SignalCancel() = 0;
-    };
-
-  private:
-    SharedMessageQueue  queue_;
-    bool done_;
-    bool cancel_;
-    std::vector<boost::thread*>  threads_;
-    IListener* listener_;
-
-    boost::mutex mutex_;
-    bool success_;
-    unsigned int remainingCommands_, totalCommands_;
-    boost::condition_variable processedCommand_;
-
-    static void Processor(ThreadedCommandProcessor* that);
-
-  public:
-    ThreadedCommandProcessor(unsigned int numThreads);
-
-    ~ThreadedCommandProcessor();
-
-    // This takes the ownership of the command
-    void Post(ICommand* command);
-
-    bool Join();
-
-    void Cancel();
-
-    void SetListener(IListener& listener);
-
-    IListener& GetListener() const
-    {
-      return *listener_;
-    }
-  };
-}
--- a/NEWS	Sat May 30 10:03:07 2015 +0200
+++ b/NEWS	Mon Jun 01 11:15:55 2015 +0200
@@ -9,6 +9,7 @@
 * "?expand" flag for URIs "/patients", "/studies" and "/series"
 * "/tools/find" URI to search for DICOM resources from REST
 * Support of FreeBSD
+* The "Orthanc Client" SDK is now managed as a separate project
 
 Minor
 -----
--- a/OrthancCppClient/Instance.cpp	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,286 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#include "../Core/PrecompiledHeaders.h"
-#include "Instance.h"
-
-#include "OrthancConnection.h"
-
-#include <boost/lexical_cast.hpp>
-
-namespace OrthancClient
-{
-  void Instance::DownloadImage()
-  {
-    if (reader_.get() == NULL)
-    {
-      const char* suffix;
-      switch (mode_)
-      {
-        case Orthanc::ImageExtractionMode_Preview:
-          suffix = "preview";
-          break;
-          
-        case Orthanc::ImageExtractionMode_UInt8:
-          suffix = "image-uint8";
-          break;
-          
-        case Orthanc::ImageExtractionMode_UInt16:
-          suffix = "image-uint16";
-          break;
-          
-        case Orthanc::ImageExtractionMode_Int16:
-          suffix = "image-int16";
-          break;
-          
-        default:
-          throw OrthancClientException(Orthanc::ErrorCode_NotImplemented);
-      }
-
-      Orthanc::HttpClient client(connection_.GetHttpClient());
-      client.SetUrl(std::string(connection_.GetOrthancUrl()) +  "/instances/" + id_ + "/" + suffix);
-      std::string png;
-
-      if (!client.Apply(png))
-      {
-        throw OrthancClientException(Orthanc::ErrorCode_NotImplemented);
-      }
-     
-      reader_.reset(new Orthanc::PngReader);
-      reader_->ReadFromMemory(png);
-    }
-  }
-
-  void Instance::DownloadDicom()
-  {
-    if (dicom_.get() == NULL)
-    {
-      Orthanc::HttpClient client(connection_.GetHttpClient());
-      client.SetUrl(std::string(connection_.GetOrthancUrl()) +  "/instances/" + id_ + "/file");
-
-      dicom_.reset(new std::string);
-
-      if (!client.Apply(*dicom_))
-      {
-        throw OrthancClientException(Orthanc::ErrorCode_NetworkProtocol);
-      }
-    }
-  }
-
-  Instance::Instance(const OrthancConnection& connection,
-                     const char* id) :
-    connection_(connection),
-    id_(id),
-    mode_(Orthanc::ImageExtractionMode_Int16)
-  {
-    Orthanc::HttpClient client(connection_.GetHttpClient());
-            
-    client.SetUrl(std::string(connection_.GetOrthancUrl()) + "/instances/" + id_ + "/simplified-tags");
-    Json::Value v;
-    if (!client.Apply(tags_))
-    {
-      throw OrthancClientException(Orthanc::ErrorCode_NetworkProtocol);
-    }
-  }
-
-  const char* Instance::GetTagAsString(const char* tag) const
-  {
-    if (tags_.isMember(tag))
-    {
-      return tags_[tag].asCString();
-    }
-    else
-    {
-      throw OrthancClientException(Orthanc::ErrorCode_InexistentItem);
-    }
-  }
-
-  float Instance::GetTagAsFloat(const char* tag) const
-  {
-    std::string value = GetTagAsString(tag);
-
-    try
-    {
-      return boost::lexical_cast<float>(value);
-    }
-    catch (boost::bad_lexical_cast)
-    {
-      throw OrthancClientException(Orthanc::ErrorCode_BadFileFormat);
-    }
-  }
-
-  int Instance::GetTagAsInt(const char* tag) const
-  {
-    std::string value = GetTagAsString(tag);
-
-    try
-    {
-      return boost::lexical_cast<int>(value);
-    }
-    catch (boost::bad_lexical_cast)
-    {
-      throw OrthancClientException(Orthanc::ErrorCode_BadFileFormat);
-    }
-  }
-
-  unsigned int Instance::GetWidth()
-  {
-    DownloadImage();
-    return reader_->GetWidth();
-  }
-
-  unsigned int Instance::GetHeight() 
-  {
-    DownloadImage();
-    return reader_->GetHeight();
-  }
-
-  unsigned int Instance::GetPitch()
-  {
-    DownloadImage();
-    return reader_->GetPitch();
-  }
-
-  Orthanc::PixelFormat Instance::GetPixelFormat()
-  {
-    DownloadImage();
-    return reader_->GetFormat();
-  }
-
-  const void* Instance::GetBuffer()
-  {
-    DownloadImage();
-    return reader_->GetConstBuffer();
-  }
-
-  const void* Instance::GetBuffer(unsigned int y)
-  {
-    DownloadImage();
-    return reader_->GetConstRow(y);
-  }
-
-  void Instance::DiscardImage()
-  {
-    reader_.reset();
-  }
-
-  void Instance::DiscardDicom()
-  {
-    dicom_.reset();
-  }
-
-
-  void Instance::SetImageExtractionMode(Orthanc::ImageExtractionMode mode)
-  {
-    if (mode_ == mode)
-    {
-      return;
-    }
-
-    DiscardImage();
-    mode_ = mode;
-  }
-
-
-  void Instance::SplitVectorOfFloats(std::vector<float>& target,
-                                     const char* tag)
-  {
-    const std::string value = GetTagAsString(tag);
-
-    target.clear();
-
-    try
-    {
-      std::string tmp;
-      for (size_t i = 0; i < value.size(); i++)
-      {
-        if (value[i] == '\\')
-        {
-          target.push_back(boost::lexical_cast<float>(tmp));
-          tmp.clear();
-        }
-        else
-        {
-          tmp.push_back(value[i]);
-        }
-      }
-
-      target.push_back(boost::lexical_cast<float>(tmp));
-    }
-    catch (boost::bad_lexical_cast)
-    {
-      // Unable to parse the Image Orientation Patient.
-      throw OrthancClientException(Orthanc::ErrorCode_BadFileFormat);
-    }
-  }
-
-
-  const uint64_t Instance::GetDicomSize()
-  {
-    DownloadDicom();
-    assert(dicom_.get() != NULL);
-    return dicom_->size();
-  }
-
-  const void* Instance::GetDicom()
-  {
-    DownloadDicom();
-    assert(dicom_.get() != NULL);
-
-    if (dicom_->size() == 0)
-    {
-      return NULL;
-    }
-    else
-    {
-      return &((*dicom_) [0]);
-    }
-  }
-
-
-  void Instance::LoadTagContent(const char* path)
-  {
-    Orthanc::HttpClient client(connection_.GetHttpClient());
-    client.SetUrl(std::string(connection_.GetOrthancUrl()) + "/instances/" + id_ + "/content/" + path);
-
-    if (!client.Apply(content_))
-    {
-      throw OrthancClientException(Orthanc::ErrorCode_UnknownResource);
-    }
-  }
-
-
-  const char* Instance::GetLoadedTagContent() const
-  {
-    return content_.c_str();
-  }
-}
--- a/OrthancCppClient/Instance.h	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,202 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#pragma once
-
-#include <string>
-#include <json/value.h>
-
-#include "OrthancClientException.h"
-#include "../Core/IDynamicObject.h"
-#include "../Core/ImageFormats/PngReader.h"
-
-namespace OrthancClient
-{
-  class OrthancConnection;
-
-  /**
-   * {summary}{Connection to an instance stored in %Orthanc.}
-   * {description}{This class encapsulates a connection to an image instance
-   * from a remote instance of %Orthanc.}
-   **/
-  class LAAW_API Instance : public Orthanc::IDynamicObject
-  {
-  private:
-    const OrthancConnection& connection_;
-    std::string id_;
-    Json::Value tags_;
-    std::auto_ptr<Orthanc::PngReader> reader_;
-    Orthanc::ImageExtractionMode mode_;
-    std::auto_ptr<std::string> dicom_;
-    std::string content_;
-
-    void DownloadImage();
-
-    void DownloadDicom();
-
-  public:
-     /**
-     * {summary}{Create a connection to some image instance.}
-     * {param}{connection The remote instance of %Orthanc.}
-     * {param}{id The %Orthanc identifier of the image instance.}
-     **/
-    Instance(const OrthancConnection& connection,
-             const char* id);
-
-    
-    /**
-     * {summary}{Get the %Orthanc identifier of this identifier.}
-     * {returns}{The identifier.}
-     **/
-    const char* GetId() const
-    {
-      return id_.c_str();
-    }
-
-
-    /**
-     * {summary}{Set the extraction mode for the 2D image corresponding to this instance.}
-     * {param}{mode The extraction mode.}
-     **/
-    void SetImageExtractionMode(Orthanc::ImageExtractionMode mode);
-
-    /**
-     * {summary}{Get the extraction mode for the 2D image corresponding to this instance.}
-     * {returns}{The extraction mode.}
-     **/
-    Orthanc::ImageExtractionMode GetImageExtractionMode() const
-    {
-      return mode_;
-    }
-
-    
-    /**
-     * {summary}{Get the string value of some DICOM tag of this instance.}
-     * {param}{tag The name of the tag of interest.}
-     * {returns}{The value of the tag.}
-     **/
-    const char* GetTagAsString(const char* tag) const;
-
-    /**
-     * {summary}{Get the floating point value that is stored in some DICOM tag of this instance.}
-     * {param}{tag The name of the tag of interest.}
-     * {returns}{The value of the tag.}
-     **/
-    float GetTagAsFloat(const char* tag) const;
-
-    /**
-     * {summary}{Get the integer value that is stored in some DICOM tag of this instance.}
-     * {param}{tag The name of the tag of interest.}
-     * {returns}{The value of the tag.}
-     **/
-    int32_t GetTagAsInt(const char* tag) const;
-
-    
-    /**
-     * {summary}{Get the width of the 2D image.}
-     * {description}{Get the width of the 2D image that is encoded by this DICOM instance.}
-     * {returns}{The width.}
-     **/
-    uint32_t GetWidth();
-
-    /**
-     * {summary}{Get the height of the 2D image.}
-     * {description}{Get the height of the 2D image that is encoded by this DICOM instance.}
-     * {returns}{The height.}
-     **/
-    uint32_t GetHeight();
-
-    /**
-     * {summary}{Get the number of bytes between two lines of the image (pitch).}
-     * {description}{Get the number of bytes between two lines of the image in the memory buffer returned by GetBuffer(). This value depends on the extraction mode for the image.}
-     * {returns}{The pitch.}
-     **/
-    uint32_t GetPitch();
-
-    /**
-     * {summary}{Get the format of the pixels of the 2D image.}
-     * {description}{Return the memory layout that is used for the 2D image that is encoded by this DICOM instance. This value depends on the extraction mode for the image.}
-     * {returns}{The pixel format.}
-     **/
-    Orthanc::PixelFormat GetPixelFormat();
-
-    /**
-     * {summary}{Access the memory buffer in which the raw pixels of the 2D image are stored.}
-     * {returns}{A pointer to the memory buffer.}
-     **/
-    const void* GetBuffer();
-
-    /**
-     * {summary}{Access the memory buffer in which the raw pixels of some line of the 2D image are stored.}
-     * {param}{y The line of interest.}
-     * {returns}{A pointer to the memory buffer.}
-     **/
-    const void* GetBuffer(uint32_t y);
-
-    /**
-     * {summary}{Get the size of the DICOM file corresponding to this instance.}
-     * {returns}{The file size.}
-     **/
-    const uint64_t GetDicomSize();
-
-    /**
-     * {summary}{Get a pointer to the content of the DICOM file corresponding to this instance.}
-     * {returns}{The DICOM file.}
-     **/
-    const void* GetDicom();
-
-    /**
-     * {summary}{Discard the downloaded 2D image, so as to make room in memory.}
-     **/
-    void DiscardImage();
-
-    /**
-     * {summary}{Discard the downloaded DICOM file, so as to make room in memory.}
-     **/
-    void DiscardDicom();
-
-    LAAW_API_INTERNAL void SplitVectorOfFloats(std::vector<float>& target,
-                                               const char* tag);
-
-    /**
-     * {summary}{Load a raw tag from the DICOM file.}
-     * {param}{path The path to the tag of interest (e.g. "0020-000d").}
-     **/
-    void LoadTagContent(const char* path);
-
-    /**
-     * {summary}{Return the value of the raw tag that was loaded by LoadContent.}
-     * {returns}{The tag value.}
-     **/
-    const char* GetLoadedTagContent() const;
-  };
-}
--- a/OrthancCppClient/OrthancClientException.h	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#pragma once
-
-#include "../Core/OrthancException.h"
-#include <laaw/laaw.h>
-
-namespace OrthancClient
-{
-  class OrthancClientException : public ::Laaw::LaawException
-  {
-  public:
-    OrthancClientException(Orthanc::ErrorCode code) :
-      LaawException(Orthanc::OrthancException::GetDescription(code))
-    { 
-    }
-
-    OrthancClientException(const char* message) : 
-      LaawException(message)
-    {    
-    }
-
-    OrthancClientException(const std::string& message) : 
-      LaawException(message)
-    {    
-    }
-  };
-}
--- a/OrthancCppClient/OrthancConnection.cpp	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#include "../Core/PrecompiledHeaders.h"
-#include "OrthancConnection.h"
-
-#include "../Core/Toolbox.h"
-
-namespace OrthancClient
-{
-  void OrthancConnection::ReadPatients()
-  {
-    client_.SetMethod(Orthanc::HttpMethod_Get);
-    client_.SetUrl(orthancUrl_ + "/patients");
-
-    Json::Value v;
-    if (!client_.Apply(content_))
-    {
-      throw OrthancClientException(Orthanc::ErrorCode_NetworkProtocol);
-    }
-  }
-
-  Orthanc::IDynamicObject* OrthancConnection::GetFillerItem(size_t index)
-  {
-    Json::Value::ArrayIndex tmp = static_cast<Json::Value::ArrayIndex>(index);
-    std::string id = content_[tmp].asString();
-    return new Patient(*this, id.c_str());
-  }
-
-  Patient& OrthancConnection::GetPatient(unsigned int index)
-  {
-    return dynamic_cast<Patient&>(patients_.GetItem(index));
-  }
-
-  OrthancConnection::OrthancConnection(const char* orthancUrl) : 
-    orthancUrl_(orthancUrl), patients_(*this)
-  {
-    ReadPatients();
-  }
-  
-  OrthancConnection::OrthancConnection(const char* orthancUrl,
-                                       const char* username, 
-                                       const char* password) : 
-    orthancUrl_(orthancUrl), patients_(*this)
-  {
-    client_.SetCredentials(username, password);
-    ReadPatients();
-  }
-
-
-  void OrthancConnection::Store(const void* dicom, uint64_t size)
-  {
-    if (size == 0)
-    {
-      return;
-    }
-
-    client_.SetMethod(Orthanc::HttpMethod_Post);
-    client_.SetUrl(orthancUrl_ + "/instances");
-
-    // Copy the DICOM file in the POST body. TODO - Avoid memory copy
-    client_.AccessPostData().resize(static_cast<size_t>(size));
-    memcpy(&client_.AccessPostData()[0], dicom, static_cast<size_t>(size));
-
-    Json::Value v;
-    if (!client_.Apply(v))
-    {
-      throw OrthancClientException(Orthanc::ErrorCode_NetworkProtocol);
-    }
-    
-    Reload();
-  }
-
-
-  void  OrthancConnection::StoreFile(const char* filename)
-  {
-    std::string content;
-    Orthanc::Toolbox::ReadFile(content, filename);
-
-    if (content.size() != 0)
-    {
-      Store(&content[0], content.size());
-    }
-  }
-
-}
--- a/OrthancCppClient/OrthancConnection.h	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#pragma once
-
-#include "../Core/HttpClient.h"
-
-#include "Patient.h"
-
-namespace OrthancClient
-{
-  /**
-   * {summary}{Connection to an instance of %Orthanc.}
-   * {description}{This class encapsulates a connection to a remote instance
-   * of %Orthanc through its REST API.}
-   **/  
-  class LAAW_API OrthancConnection : 
-    public boost::noncopyable,
-    private Orthanc::ArrayFilledByThreads::IFiller
-  {
-  private:
-    Orthanc::HttpClient client_;
-    std::string orthancUrl_;
-    Orthanc::ArrayFilledByThreads  patients_;
-    Json::Value content_;
-
-    void ReadPatients();
-
-    virtual size_t GetFillerSize()
-    {
-      return content_.size();
-    }
-
-    virtual Orthanc::IDynamicObject* GetFillerItem(size_t index);
-
-  public:
-    /**
-     * {summary}{Create a connection to an instance of %Orthanc.}
-     * {param}{orthancUrl URL to which the REST API of %Orthanc is listening.}
-     **/
-    OrthancConnection(const char* orthancUrl);
-
-    /**
-     * {summary}{Create a connection to an instance of %Orthanc, with authentication.}
-     * {param}{orthancUrl URL to which the REST API of %Orthanc is listening.}
-     * {param}{username The username.}
-     * {param}{password The password.}
-     **/
-    OrthancConnection(const char* orthancUrl,
-                      const char* username, 
-                      const char* password);
-
-    virtual ~OrthancConnection()
-    {
-    }
-
-    /**
-     * {summary}{Returns the number of threads for this connection.}
-     * {description}{Returns the number of simultaneous connections
-     * that are used when downloading information from this instance
-     * of %Orthanc.} 
-     * {returns}{The number of threads.}
-     **/
-    uint32_t GetThreadCount() const
-    {
-      return patients_.GetThreadCount();
-    }
-
-    /**
-     * {summary}{Sets the number of threads for this connection.}
-     * {description}{Sets  the number of simultaneous connections
-     * that are used when downloading information from this instance
-     * of %Orthanc.} 
-     * {param}{threadCount The number of threads.}
-     **/
-    void SetThreadCount(uint32_t threadCount)
-    {
-      patients_.SetThreadCount(threadCount);
-    }
-
-    /**
-     * {summary}{Reload the list of the patients.}
-     * {description}{This method will reload the list of the patients from the remote instance of %Orthanc. Pay attention to the fact that the patients that have been previously returned by GetPatient() will be invalidated.}
-     **/
-    void Reload()
-    {
-      ReadPatients();
-      patients_.Invalidate();
-    }
-
-    LAAW_API_INTERNAL const Orthanc::HttpClient& GetHttpClient() const
-    {
-      return client_;
-    }
-
-    /**
-     * {summary}{Returns the URL of this instance of %Orthanc.}
-     * {description}{Returns the URL of the remote %Orthanc instance to which this object is connected.}
-     * {returns}{The URL.}
-     **/
-    const char* GetOrthancUrl() const
-    {
-      return orthancUrl_.c_str();
-    }
-
-    /**
-     * {summary}{Returns the number of patients.}
-     * {description}{Returns the number of patients that are stored in the remote instance of %Orthanc.}
-     * {returns}{The number of patients.}
-     **/
-    uint32_t GetPatientCount()
-    {
-      return patients_.GetSize();
-    }
-
-    /**
-     * {summary}{Get some patient.}
-     * {description}{This method will return an object that contains information about some patient. The patients are indexed by a number between 0 (inclusive) and the result of GetPatientCount() (exclusive).}
-     * {param}{index The index of the patient of interest.}
-     * {returns}{The patient.}
-     **/
-    Patient& GetPatient(uint32_t index);
-
-    /**
-     * {summary}{Delete some patient.}
-     * {description}{Delete some patient from the remote instance of %Orthanc. Pay attention to the fact that the patients that have been previously returned by GetPatient() will be invalidated.}
-     * {param}{index The index of the patient of interest.}
-     * {returns}{The patient.}
-     **/
-    void DeletePatient(uint32_t index)
-    {
-      GetPatient(index).Delete();
-      Reload();
-    }
-
-    /**
-     * {summary}{Send a DICOM file.}
-     * {description}{This method will store a DICOM file in the remote instance of %Orthanc. Pay attention to the fact that the patients that have been previously returned by GetPatient() will be invalidated.}
-     * {param}{filename Path to the DICOM file}
-     **/
-    void StoreFile(const char* filename);
-
-    /**
-     * {summary}{Send a DICOM file that is contained inside a memory buffer.}
-     * {description}{This method will store a DICOM file in the remote instance of %Orthanc. Pay attention to the fact that the patients that have been previously returned by GetPatient() will be invalidated.}
-     * {param}{dicom The memory buffer containing the DICOM file.}
-     * {param}{size The size of the DICOM file.}
-     **/    
-    void Store(const void* dicom, uint64_t size);
-  };
-}
--- a/OrthancCppClient/OrthancCppClient.cpp	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-/**
- * The sources of the C++ client library must be put in this file to
- * avoid problems with precompiled headers.
- **/
-
-#include "../Core/ChunkedBuffer.cpp"
-#include "../Core/Enumerations.cpp"
-#include "../Core/HttpClient.cpp"
-#include "../Core/ImageFormats/ImageAccessor.cpp"
-#include "../Core/ImageFormats/ImageBuffer.cpp"
-#include "../Core/ImageFormats/PngReader.cpp"
-#include "../Core/MultiThreading/ArrayFilledByThreads.cpp"
-#include "../Core/MultiThreading/SharedMessageQueue.cpp"
-#include "../Core/MultiThreading/ThreadedCommandProcessor.cpp"
-#include "../Core/OrthancException.cpp"
-#include "../Core/Toolbox.cpp"
-#include "../OrthancCppClient/Instance.cpp"
-#include "../OrthancCppClient/OrthancConnection.cpp"
-#include "../OrthancCppClient/Patient.cpp"
-#include "../OrthancCppClient/Series.cpp"
-#include "../OrthancCppClient/Study.cpp"
--- a/OrthancCppClient/Patient.cpp	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#include "../Core/PrecompiledHeaders.h"
-#include "Patient.h"
-
-#include "OrthancConnection.h"
-
-namespace OrthancClient
-{
-  void Patient::ReadPatient()
-  {
-    Orthanc::HttpClient client(connection_.GetHttpClient());
-    client.SetUrl(std::string(connection_.GetOrthancUrl()) + "/patients/" + id_);
-
-    Json::Value v;
-    if (!client.Apply(patient_))
-    {
-      throw OrthancClientException(Orthanc::ErrorCode_NetworkProtocol);
-    }
-  }
-
-  Orthanc::IDynamicObject* Patient::GetFillerItem(size_t index)
-  {
-    Json::Value::ArrayIndex tmp = static_cast<Json::Value::ArrayIndex>(index);
-    std::string id = patient_["Studies"][tmp].asString();
-    return new Study(connection_, id.c_str());
-  }
-
-  Patient::Patient(const OrthancConnection& connection,
-                   const char* id) :
-    connection_(connection),
-    id_(id),
-    studies_(*this)
-  {
-    studies_.SetThreadCount(connection.GetThreadCount());
-    ReadPatient();
-  }
-
-  const char* Patient::GetMainDicomTag(const char* tag, const char* defaultValue) const
-  {
-    if (patient_["MainDicomTags"].isMember(tag))
-    {
-      return patient_["MainDicomTags"][tag].asCString();
-    }
-    else
-    {
-      return defaultValue;
-    }
-  }
-  
-  void Patient::Delete()
-  {
-    Orthanc::HttpClient client(connection_.GetHttpClient());
-    client.SetMethod(Orthanc::HttpMethod_Delete);
-    client.SetUrl(std::string(connection_.GetOrthancUrl()) + "/patients/" + id_);
-    
-    std::string s;
-    if (!client.Apply(s))
-    {
-      throw OrthancClientException(Orthanc::ErrorCode_NetworkProtocol);
-    }
-  }
-}
--- a/OrthancCppClient/Patient.h	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#pragma once
-
-#include "Study.h"
-
-namespace OrthancClient
-{
-  /**
-   * {summary}{Connection to a patient stored in %Orthanc.}
-   * {description}{This class encapsulates a connection to a patient
-   * from a remote instance of %Orthanc.}
-   **/
-  class LAAW_API Patient : 
-    public Orthanc::IDynamicObject, 
-    private Orthanc::ArrayFilledByThreads::IFiller
-  {
-  private:
-    const OrthancConnection& connection_;
-    std::string id_;
-    Json::Value patient_;
-    Orthanc::ArrayFilledByThreads  studies_;
-
-    void ReadPatient();
-
-    virtual size_t GetFillerSize()
-    {
-      return patient_["Studies"].size();
-    }
-
-    virtual Orthanc::IDynamicObject* GetFillerItem(size_t index);
-
-  public:
-    /**
-     * {summary}{Create a connection to some patient.}
-     * {param}{connection The remote instance of %Orthanc.}
-     * {param}{id The %Orthanc identifier of the patient.}
-     **/
-    Patient(const OrthancConnection& connection,
-            const char* id);
-
-    /**
-     * {summary}{Reload the studies of this patient.}
-     * {description}{This method will reload the list of the studies of this patient. Pay attention to the fact that the studies that have been previously returned by GetStudy() will be invalidated.}
-     **/
-    void Reload()
-    {
-      studies_.Reload();
-    }
-
-    /**
-     * {summary}{Return the number of studies for this patient.}
-     * {returns}{The number of studies.}
-     **/
-    uint32_t GetStudyCount()
-    {
-      return studies_.GetSize();
-    }
-
-    /**
-     * {summary}{Get some study of this patient.}
-     * {description}{This method will return an object that contains information about some study. The studies are indexed by a number between 0 (inclusive) and the result of GetStudyCount() (exclusive).}
-     * {param}{index The index of the study of interest.}
-     * {returns}{The study.}
-     **/
-    Study& GetStudy(uint32_t index)
-    {
-      return dynamic_cast<Study&>(studies_.GetItem(index));
-    }
-
-    /**
-     * {summary}{Get the %Orthanc identifier of this patient.}
-     * {returns}{The identifier.}
-     **/
-    const char* GetId() const
-    {
-      return id_.c_str();
-    }
-
-    /**
-     * {summary}{Get the value of one of the main DICOM tags for this patient.}
-     * {param}{tag The name of the tag of interest ("PatientName", "PatientID", "PatientSex" or "PatientBirthDate").}
-     * {param}{defaultValue The default value to be returned if this tag does not exist.}
-     * {returns}{The value of the tag.}
-     **/
-    const char* GetMainDicomTag(const char* tag, 
-                                const char* defaultValue) const;
-
-    LAAW_API_INTERNAL void Delete();
-  };
-}
--- a/OrthancCppClient/Series.cpp	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,527 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#include "../Core/PrecompiledHeaders.h"
-#include "Series.h"
-
-#include "OrthancConnection.h"
-
-#include <set>
-#include <boost/lexical_cast.hpp>
-
-namespace OrthancClient
-{
-  namespace
-  {
-    class SliceLocator
-    {
-    private:
-      float normal_[3];
-
-    public:
-      SliceLocator(Instance& someSlice)
-      {
-        /**
-         * Compute the slice normal from Image Orientation Patient.
-         * http://nipy.sourceforge.net/nibabel/dicom/dicom_orientation.html#dicom-z-from-slice
-         * http://dicomiseasy.blogspot.be/2013/06/getting-oriented-using-image-plane.html
-         * http://www.itk.org/pipermail/insight-users/2003-September/004762.html
-         **/
-
-        std::vector<float> cosines;
-        someSlice.SplitVectorOfFloats(cosines, "ImageOrientationPatient");  // 0020-0037
-
-        if (cosines.size() != 6)
-        {
-          throw OrthancClientException(Orthanc::ErrorCode_BadFileFormat);
-        }
-
-        normal_[0] = cosines[1] * cosines[5] - cosines[2] * cosines[4];
-        normal_[1] = cosines[2] * cosines[3] - cosines[0] * cosines[5];
-        normal_[2] = cosines[0] * cosines[4] - cosines[1] * cosines[3];
-      }
-
-
-      /**
-       * Compute the distance of some slice along the slice normal.
-       **/
-      float ComputeSliceLocation(Instance& instance) const
-      {
-        std::vector<float> ipp;
-        instance.SplitVectorOfFloats(ipp, "ImagePositionPatient");  // 0020-0032
-        if (ipp.size() != 3)
-        {
-          throw OrthancClientException(Orthanc::ErrorCode_BadFileFormat);
-        }
-
-        float dist = 0;
-
-        for (int i = 0; i < 3; i++)
-        {
-          dist += normal_[i] * ipp[i];
-        }
-
-        return dist;
-      }
-    };
-
-    class ImageDownloadCommand : public Orthanc::ICommand
-    {
-    private:
-      Orthanc::PixelFormat format_;
-      Orthanc::ImageExtractionMode mode_;
-      Instance& instance_;
-      void* target_;
-      size_t lineStride_;
-
-    public:
-      ImageDownloadCommand(Instance& instance, 
-                           Orthanc::PixelFormat format,
-                           Orthanc::ImageExtractionMode mode,
-                           void* target,
-                           size_t lineStride) :
-        format_(format),
-        mode_(mode),
-        instance_(instance),
-        target_(target),
-        lineStride_(lineStride)
-      {
-        instance_.SetImageExtractionMode(mode);
-      }
-
-      virtual bool Execute()
-      {
-        using namespace Orthanc;
-
-        unsigned int width = instance_.GetHeight();
-
-        for (unsigned int y = 0; y < instance_.GetHeight(); y++)
-        {
-          uint8_t* p = reinterpret_cast<uint8_t*>(target_) + y * lineStride_;
-
-          if (instance_.GetPixelFormat() == format_)
-          {
-            memcpy(p, instance_.GetBuffer(y), GetBytesPerPixel(instance_.GetPixelFormat()) * instance_.GetWidth());
-          }
-          else if (instance_.GetPixelFormat() == PixelFormat_Grayscale8 &&
-                   format_ == PixelFormat_RGB24)
-          {
-            const uint8_t* s = reinterpret_cast<const uint8_t*>(instance_.GetBuffer(y));
-            for (unsigned int x = 0; x < width; x++, s++, p += 3)
-            {
-              p[0] = *s;
-              p[1] = *s;
-              p[2] = *s;
-            }
-          }
-          else
-          {
-            throw OrthancClientException(ErrorCode_NotImplemented);
-          }
-        }
-
-        // Do not keep the image in memory, as we are loading 3D images
-        instance_.DiscardImage();
-
-        return true;
-      }
-    };
-
-
-    class ProgressToFloatListener : public Orthanc::ThreadedCommandProcessor::IListener
-    {
-    private:
-      float* target_;
-
-    public:
-      ProgressToFloatListener(float* target) : target_(target)
-      {
-      }
-
-      virtual void SignalProgress(unsigned int current,
-                                  unsigned int total)
-      {
-        if (total == 0)
-        {
-          *target_ = 0;
-        }
-        else
-        {
-          *target_ = static_cast<float>(current) / static_cast<float>(total);
-        }
-      }
-
-      virtual void SignalSuccess(unsigned int total)
-      {
-        *target_ = 1;
-      }
-
-      virtual void SignalFailure()
-      {
-        *target_ = 0;
-      }
-
-      virtual void SignalCancel()
-      {
-        *target_ = 0;
-      }
-    };
-
-  }
-
-
-  void Series::Check3DImage()
-  {
-    if (!Is3DImage())
-    {
-      throw OrthancClientException(Orthanc::ErrorCode_NotImplemented);
-    }
-  }
-
-  bool Series::Is3DImageInternal()
-  {
-    try
-    {
-      if (GetInstanceCount() == 0)
-      {
-        // Empty image, use some default value (should never happen)
-        voxelSizeX_ = 1;
-        voxelSizeY_ = 1;
-        voxelSizeZ_ = 1;
-        sliceThickness_ = 1;
-
-        return true;
-      }
-
-      // Choose a reference slice
-      Instance& reference = GetInstance(0);
-
-      // Check that all the child instances share the same 3D parameters
-      for (unsigned int i = 0; i < GetInstanceCount(); i++)
-      {
-        Instance& i2 = GetInstance(i);
-
-        if (std::string(reference.GetTagAsString("Columns")) != std::string(i2.GetTagAsString("Columns")) ||
-            std::string(reference.GetTagAsString("Rows")) != std::string(i2.GetTagAsString("Rows")) ||
-            std::string(reference.GetTagAsString("ImageOrientationPatient")) != std::string(i2.GetTagAsString("ImageOrientationPatient")) ||
-            std::string(reference.GetTagAsString("SliceThickness")) != std::string(i2.GetTagAsString("SliceThickness")) ||
-            std::string(reference.GetTagAsString("PixelSpacing")) != std::string(i2.GetTagAsString("PixelSpacing")))
-        {
-          return false;
-        }              
-      }
-
-
-      // Extract X/Y voxel size and slice thickness
-      std::string s = GetInstance(0).GetTagAsString("PixelSpacing");  // 0028-0030
-      size_t pos = s.find('\\');
-      assert(pos != std::string::npos);
-      std::string sy = s.substr(0, pos);
-      std::string sx = s.substr(pos + 1);
-
-      try
-      {
-        voxelSizeX_ = boost::lexical_cast<float>(sx);
-        voxelSizeY_ = boost::lexical_cast<float>(sy);
-      }
-      catch (boost::bad_lexical_cast)
-      {
-        throw OrthancClientException(Orthanc::ErrorCode_BadFileFormat);
-      }
-
-      sliceThickness_ = GetInstance(0).GetTagAsFloat("SliceThickness");  // 0018-0050
-
-
-      // Compute the location of each slice to extract the voxel size along Z
-      voxelSizeZ_ = std::numeric_limits<float>::infinity();
-
-      SliceLocator locator(reference);
-      float referenceSliceLocation = locator.ComputeSliceLocation(reference);
-
-      std::set<float> l;
-      for (unsigned int i = 0; i < GetInstanceCount(); i++)
-      {
-        float location = locator.ComputeSliceLocation(GetInstance(i));
-        float distanceToReferenceSlice = fabs(location - referenceSliceLocation);
-
-        l.insert(location);
-
-        if (distanceToReferenceSlice > std::numeric_limits<float>::epsilon() &&
-            distanceToReferenceSlice < voxelSizeZ_)
-        {
-          voxelSizeZ_ = distanceToReferenceSlice;
-        }
-      }
-
-
-      // Make sure that 2 slices do not share the same Z location
-      return l.size() == GetInstanceCount();
-    }
-    catch (OrthancClientException)
-    {
-      return false;
-    }
-  }
-
-  void Series::ReadSeries()
-  {
-    Orthanc::HttpClient client(connection_.GetHttpClient());
-
-    client.SetUrl(std::string(connection_.GetOrthancUrl()) + "/series/" + id_);
-    Json::Value v;
-    if (!client.Apply(series_))
-    {
-      throw OrthancClientException(Orthanc::ErrorCode_NetworkProtocol);
-    }
-  }
-
-  Orthanc::IDynamicObject* Series::GetFillerItem(size_t index)
-  {
-    Json::Value::ArrayIndex tmp = static_cast<Json::Value::ArrayIndex>(index);
-    std::string id = series_["Instances"][tmp].asString();
-    return new Instance(connection_, id.c_str());
-  }
-
-  Series::Series(const OrthancConnection& connection,
-                 const char* id) :
-    connection_(connection),
-    id_(id),
-    instances_(*this)
-  {
-    ReadSeries();
-    status_ = Status3DImage_NotTested;
-    url_ = std::string(connection_.GetOrthancUrl()) + "/series/" + id_;
-
-    voxelSizeX_ = 0;
-    voxelSizeY_ = 0;
-    voxelSizeZ_ = 0;
-    sliceThickness_ = 0;
-
-    instances_.SetThreadCount(connection.GetThreadCount());
-  }
-
-
-  bool Series::Is3DImage()
-  {
-    if (status_ == Status3DImage_NotTested)
-    {
-      status_ = Is3DImageInternal() ? Status3DImage_True : Status3DImage_False;
-    }
-
-    return status_ == Status3DImage_True;
-  }
-
-  unsigned int Series::GetInstanceCount()
-  {
-    return instances_.GetSize();
-  }
-
-  Instance& Series::GetInstance(unsigned int index)
-  {
-    return dynamic_cast<Instance&>(instances_.GetItem(index));
-  }
-
-  unsigned int Series::GetWidth()
-  {
-    Check3DImage();
-
-    if (GetInstanceCount() == 0)
-      return 0;
-    else
-      return GetInstance(0).GetTagAsInt("Columns");
-  }
-
-  unsigned int Series::GetHeight()
-  {
-    Check3DImage();
-
-    if (GetInstanceCount() == 0)
-      return 0;
-    else
-      return GetInstance(0).GetTagAsInt("Rows");
-  }
-
-  const char* Series::GetMainDicomTag(const char* tag, const char* defaultValue) const
-  {
-    if (series_["MainDicomTags"].isMember(tag))
-    {
-      return series_["MainDicomTags"][tag].asCString();
-    }
-    else
-    {
-      return defaultValue;
-    }
-  }
-
-
-  
-  void Series::Load3DImageInternal(void* target,
-                                   Orthanc::PixelFormat format,
-                                   size_t lineStride,
-                                   size_t stackStride,
-                                   Orthanc::ThreadedCommandProcessor::IListener* listener)
-  {
-    using namespace Orthanc;
-
-    // Choose the extraction mode, depending on the format of the
-    // target image.
-
-    uint8_t bytesPerPixel;
-    ImageExtractionMode mode;
-
-    switch (format)
-    {
-      case PixelFormat_RGB24:
-        bytesPerPixel = 3;
-        mode = ImageExtractionMode_Preview;
-        break;
-
-      case PixelFormat_Grayscale8:
-        bytesPerPixel = 1;
-        mode = ImageExtractionMode_UInt8;  // Preview ???
-        break; 
-
-      case PixelFormat_Grayscale16:
-        bytesPerPixel = 2;
-        mode = ImageExtractionMode_UInt16;
-        break;
-
-      case PixelFormat_SignedGrayscale16:
-        bytesPerPixel = 2;
-        mode = ImageExtractionMode_UInt16;
-        format = PixelFormat_Grayscale16;
-        break;
-
-      default:
-        throw OrthancClientException(ErrorCode_NotImplemented);
-    }
-
-
-    // Check that the target image is properly sized
-    unsigned int sx = GetWidth();
-    unsigned int sy = GetHeight();
-
-    if (lineStride < sx * bytesPerPixel ||
-        stackStride < sx * sy * bytesPerPixel)
-    {
-      throw OrthancClientException(ErrorCode_BadRequest);
-    }
-
-    if (sx == 0 || sy == 0 || GetInstanceCount() == 0)
-    {
-      // Empty image, nothing to do
-      if (listener)
-        listener->SignalSuccess(0);
-      return;
-    }
-
-
-    /**
-     * Order the stacks according to their distance along the slice
-     * normal (using the "Image Position Patient" tag). This works
-     * even if the "SliceLocation" tag is absent.
-     **/
-    SliceLocator locator(GetInstance(0));
-
-    typedef std::map<float, Instance*> Instances;
-    Instances instances;
-    for (unsigned int i = 0; i < GetInstanceCount(); i++)
-    {
-      float dist = locator.ComputeSliceLocation(GetInstance(i));
-      instances[dist] = &GetInstance(i);
-    }
-
-    if (instances.size() != GetInstanceCount())
-    {
-      // Several instances have the same Z coordinate
-      throw OrthancClientException(ErrorCode_NotImplemented);
-    }
-
-
-    // Submit the download of each stack as a set of commands
-    ThreadedCommandProcessor processor(connection_.GetThreadCount());
-
-    if (listener != NULL)
-    {
-      processor.SetListener(*listener);
-    }
-
-    uint8_t* stackTarget = reinterpret_cast<uint8_t*>(target);
-    for (Instances::iterator it = instances.begin(); it != instances.end(); ++it)
-    {
-      processor.Post(new ImageDownloadCommand(*it->second, format, mode, stackTarget, lineStride));
-      stackTarget += stackStride;
-    }
-
-
-    // Wait for all the stacks to be downloaded
-    if (!processor.Join())
-    {
-      throw OrthancClientException(ErrorCode_NetworkProtocol);
-    }
-  }
-
-  float Series::GetVoxelSizeX()
-  {
-    Check3DImage();   // Is3DImageInternal() will compute the voxel sizes
-    return voxelSizeX_;
-  }
-
-  float Series::GetVoxelSizeY()
-  {
-    Check3DImage();   // Is3DImageInternal() will compute the voxel sizes
-    return voxelSizeY_;
-  }
-
-  float Series::GetVoxelSizeZ()
-  {
-    Check3DImage();   // Is3DImageInternal() will compute the voxel sizes
-    return voxelSizeZ_;
-  }
-
-  float Series::GetSliceThickness()
-  {
-    Check3DImage();   // Is3DImageInternal() will compute the voxel sizes
-    return sliceThickness_;
-  }
-
-  void Series::Load3DImage(void* target,
-                           Orthanc::PixelFormat format,
-                           int64_t lineStride,
-                           int64_t stackStride,
-                           float* progress)
-  {
-    ProgressToFloatListener listener(progress);
-    Load3DImageInternal(target, format, static_cast<size_t>(lineStride), 
-                        static_cast<size_t>(stackStride), &listener);
-  }
-}
--- a/OrthancCppClient/Series.h	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,239 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#pragma once
-
-#include "Instance.h"
-
-#include "../Core/MultiThreading/ArrayFilledByThreads.h"
-#include "../Core/MultiThreading/ThreadedCommandProcessor.h"
-
-namespace OrthancClient
-{
-  /**
-   * {summary}{Connection to a series stored in %Orthanc.}
-   * {description}{This class encapsulates a connection to a series
-   * from a remote instance of %Orthanc.}
-   **/
-  class LAAW_API Series :
-    public Orthanc::IDynamicObject, 
-    private Orthanc::ArrayFilledByThreads::IFiller
-  {
-  private:
-    enum Status3DImage
-    {
-      Status3DImage_NotTested,
-      Status3DImage_True,
-      Status3DImage_False
-    };
-
-    const OrthancConnection& connection_;
-    std::string id_, url_;
-    Json::Value series_;
-    Orthanc::ArrayFilledByThreads  instances_;
-    Status3DImage status_;
-
-    float voxelSizeX_;
-    float voxelSizeY_;
-    float voxelSizeZ_;
-    float sliceThickness_;
-
-    void Check3DImage();
-
-    bool Is3DImageInternal();
-
-    void ReadSeries();
-
-    virtual size_t GetFillerSize()
-    {
-      return series_["Instances"].size();
-    }
-
-    virtual Orthanc::IDynamicObject* GetFillerItem(size_t index);
-
-    void Load3DImageInternal(void* target,
-                             Orthanc::PixelFormat format,
-                             size_t lineStride,
-                             size_t stackStride,
-                             Orthanc::ThreadedCommandProcessor::IListener* listener);
-
-  public:
-    /**
-     * {summary}{Create a connection to some series.}
-     * {param}{connection The remote instance of %Orthanc.}
-     * {param}{id The %Orthanc identifier of the series.}
-     **/
-    Series(const OrthancConnection& connection,
-           const char* id);
-
-     /**
-     * {summary}{Reload the instances of this series.}
-     * {description}{This method will reload the list of the instances of this series. Pay attention to the fact that the instances that have been previously returned by GetInstance() will be invalidated.}
-     **/
-    void Reload()
-    {
-      instances_.Reload();
-    }
-
-    /**
-     * {summary}{Return the number of instances for this series.}
-     * {returns}{The number of instances.}
-     **/
-    uint32_t GetInstanceCount();
-    
-    /**
-     * {summary}{Get some instance of this series.}
-     * {description}{This method will return an object that contains information about some instance. The instances are indexed by a number between 0 (inclusive) and the result of GetInstanceCount() (exclusive).}
-     * {param}{index The index of the instance of interest.}
-     * {returns}{The instance.}
-     **/
-    Instance& GetInstance(uint32_t index);
-
-    /**
-     * {summary}{Get the %Orthanc identifier of this series.}
-     * {returns}{The identifier.}
-     **/
-    const char* GetId() const
-    {
-      return id_.c_str();
-    }
-
-    /**
-     * {summary}{Returns the URL to this series.}
-     * {returns}{The URL.}
-     **/
-    const char* GetUrl() const
-    {
-      return url_.c_str();
-    }
-
-   
-    /**
-     * {summary}{Get the value of one of the main DICOM tags for this series.}
-     * {param}{tag The name of the tag of interest ("Modality", "Manufacturer", "SeriesDate", "SeriesDescription", "SeriesInstanceUID"...).}
-     * {param}{defaultValue The default value to be returned if this tag does not exist.}
-     * {returns}{The value of the tag.}
-     **/
-    const char* GetMainDicomTag(const char* tag, 
-                                const char* defaultValue) const;
-
-    /**
-     * {summary}{Test whether this series encodes a 3D image that can be downloaded from %Orthanc.}
-     * {returns}{"true" if and only if this is a 3D image.}
-     **/
-    bool Is3DImage();
-
-    /**
-     * {summary}{Get the width of the 3D image.}
-     * {description}{Get the width of the 3D image (i.e. along the X-axis). This call is only valid if this series corresponds to a 3D image.}
-     * {returns}{The width.}
-     **/
-    uint32_t GetWidth();
-
-    /**
-     * {summary}{Get the height of the 3D image.}
-     * {description}{Get the height of the 3D image (i.e. along the Y-axis). This call is only valid if this series corresponds to a 3D image.}
-     * {returns}{The height.}
-     **/
-    uint32_t GetHeight();
-
-    /**
-     * {summary}{Get the physical size of a voxel along the X-axis.}
-     * {description}{Get the physical size of a voxel along the X-axis. This call is only valid if this series corresponds to a 3D image.}
-     * {returns}{The voxel size.}
-     **/
-    float GetVoxelSizeX();
-
-    /**
-     * {summary}{Get the physical size of a voxel along the Y-axis.}
-     * {description}{Get the physical size of a voxel along the Y-axis. This call is only valid if this series corresponds to a 3D image.}
-     * {returns}{The voxel size.}
-     **/
-    float GetVoxelSizeY();
-
-    /**
-     * {summary}{Get the physical size of a voxel along the Z-axis.}
-     * {description}{Get the physical size of a voxel along the Z-axis. This call is only valid if this series corresponds to a 3D image.}
-     * {returns}{The voxel size.}
-     **/
-    float GetVoxelSizeZ();
-
-    /**
-     * {summary}{Get the slice thickness.}
-     * {description}{Get the slice thickness. This call is only valid if this series corresponds to a 3D image.}
-     * {returns}{The slice thickness.}
-     **/
-    float GetSliceThickness();
-
-    LAAW_API_INTERNAL void Load3DImage(void* target,
-                                       Orthanc::PixelFormat format,
-                                       int64_t lineStride,
-                                       int64_t stackStride,
-                                       Orthanc::ThreadedCommandProcessor::IListener& listener)
-    {
-      Load3DImageInternal(target, format, static_cast<size_t>(lineStride), 
-                          static_cast<size_t>(stackStride), &listener);
-    }
-
-    /**
-     * {summary}{Load the 3D image into a memory buffer.}
-     * {description}{Load the 3D image into a memory buffer. This call is only valid if this series corresponds to a 3D image. The "target" buffer must be wide enough to store all the voxels of the image.}
-     * {param}{target The target memory buffer.}
-     * {param}{format The memory layout of the voxels.}
-     * {param}{lineStride The number of bytes between two lines in the target memory buffer.}
-     * {param}{stackStride The number of bytes between two 2D slices in the target memory buffer.}
-     **/
-    void Load3DImage(void* target,
-                     Orthanc::PixelFormat format,
-                     int64_t lineStride,
-                     int64_t stackStride)
-    {
-      Load3DImageInternal(target, format, static_cast<size_t>(lineStride),
-                          static_cast<size_t>(stackStride), NULL);
-    }
-
-    /**
-     * {summary}{Load the 3D image into a memory buffer.}
-     * {description}{Load the 3D image into a memory buffer. This call is only valid if this series corresponds to a 3D image. The "target" buffer must be wide enough to store all the voxels of the image. This method will also update a progress indicator to monitor the loading of the image.}
-     * {param}{target The target memory buffer.}
-     * {param}{format The memory layout of the voxels.}
-     * {param}{lineStride The number of bytes between two lines in the target memory buffer.}
-     * {param}{stackStride The number of bytes between two 2D slices in the target memory buffer.}
-     * {param}{progress A pointer to a floating-point number that is continuously updated by the download threads to reflect the percentage of completion (between 0 and 1). This value can be read from a separate thread.}
-     **/
-    void Load3DImage(void* target,
-                     Orthanc::PixelFormat format,
-                     int64_t lineStride,
-                     int64_t stackStride,
-                     float* progress);
-  };
-}
--- a/OrthancCppClient/SharedLibrary/AUTOGENERATED/ExternC.cpp	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1525 +0,0 @@
-/**
- * Laaw - Lightweight, Automated API Wrapper
- * Copyright (C) 2010-2013 Jomago - Alain Mazy, Benjamin Golinvaux,
- * Sebastien Jodogne
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#include <laaw/laaw.h>
-#include <string.h>  // For strcpy() and strlen()
-#include <stdlib.h>  // For free()
-
-static char* LAAW_EXTERNC_CopyString(const char* str)
-{
-  char* copy = reinterpret_cast<char*>(malloc(strlen(str) + 1));
-  strcpy(copy, str);
-  return copy;
-}
-
-extern "C"
-{
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_1f1acb322ea4d0aad65172824607673c(void** newObject, const char* arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          *newObject = new OrthancClient::OrthancConnection(reinterpret_cast< const char* >(arg0));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_f3fd272e4636f6a531aabb72ee01cd5b(void** newObject, const char* arg0, const char* arg1, const char* arg2)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          *newObject = new OrthancClient::OrthancConnection(reinterpret_cast< const char* >(arg0), reinterpret_cast< const char* >(arg1), reinterpret_cast< const char* >(arg2));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_12d3de0a96e9efb11136a9811bb9ed38(void* thisObject)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          delete static_cast<OrthancClient::OrthancConnection*>(thisObject);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_557aee7b61817292a0f31269d3c35db7(const void* thisObject, uint32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::OrthancConnection* this_ = static_cast<const OrthancClient::OrthancConnection*>(thisObject);
-*result = this_->GetThreadCount();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_0b8dff0ce67f10954a49b059e348837e(void* thisObject, uint32_t arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::OrthancConnection* this_ = static_cast<OrthancClient::OrthancConnection*>(thisObject);
-this_->SetThreadCount(arg0);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_e05097c153f676e5a5ee54dcfc78256f(void* thisObject)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::OrthancConnection* this_ = static_cast<OrthancClient::OrthancConnection*>(thisObject);
-this_->Reload();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_e840242bf58d17d3c1d722da09ce88e0(const void* thisObject, const char** result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::OrthancConnection* this_ = static_cast<const OrthancClient::OrthancConnection*>(thisObject);
-*result = this_->GetOrthancUrl();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_c9af31433001b5dfc012a552dc6d0050(void* thisObject, uint32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::OrthancConnection* this_ = static_cast<OrthancClient::OrthancConnection*>(thisObject);
-*result = this_->GetPatientCount();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_3fba4d6b818180a44cd1cae6046334dc(void* thisObject, void** result, uint32_t arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::OrthancConnection* this_ = static_cast<OrthancClient::OrthancConnection*>(thisObject);
-*result = &this_->GetPatient(arg0);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_aeb20dc75b9246188db857317e5e0ce7(void* thisObject, uint32_t arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::OrthancConnection* this_ = static_cast<OrthancClient::OrthancConnection*>(thisObject);
-this_->DeletePatient(arg0);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_62689803d9871e4d9c51a648640b320b(void* thisObject, const char* arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::OrthancConnection* this_ = static_cast<OrthancClient::OrthancConnection*>(thisObject);
-this_->StoreFile(reinterpret_cast< const char* >(arg0));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_2fb64c9e5a67eccd413b0e913469a421(void* thisObject, const void* arg0, uint64_t arg1)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::OrthancConnection* this_ = static_cast<OrthancClient::OrthancConnection*>(thisObject);
-this_->Store(reinterpret_cast< const void* >(arg0), arg1);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_6cf0d7268667f9b0aa4511bacf184919(void** newObject, void* arg0, const char* arg1)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          *newObject = new OrthancClient::Patient(*reinterpret_cast< ::OrthancClient::OrthancConnection* >(arg0), reinterpret_cast< const char* >(arg1));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_7d81cd502ee27e859735d0ea7112b5a1(void* thisObject)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          delete static_cast<OrthancClient::Patient*>(thisObject);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_f756172daf04516eec3a566adabb4335(void* thisObject)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Patient* this_ = static_cast<OrthancClient::Patient*>(thisObject);
-this_->Reload();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_ddb68763ec902a97d579666a73a20118(void* thisObject, uint32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Patient* this_ = static_cast<OrthancClient::Patient*>(thisObject);
-*result = this_->GetStudyCount();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_fba3c68b4be7558dbc65f7ce1ab57d63(void* thisObject, void** result, uint32_t arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Patient* this_ = static_cast<OrthancClient::Patient*>(thisObject);
-*result = &this_->GetStudy(arg0);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_b4ca99d958f843493e58d1ef967340e1(const void* thisObject, const char** result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Patient* this_ = static_cast<const OrthancClient::Patient*>(thisObject);
-*result = this_->GetId();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_78d5cc76d282437b6f93ec3b82c35701(const void* thisObject, const char** result, const char* arg0, const char* arg1)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Patient* this_ = static_cast<const OrthancClient::Patient*>(thisObject);
-*result = this_->GetMainDicomTag(reinterpret_cast< const char* >(arg0), reinterpret_cast< const char* >(arg1));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_193599b9e345384fcdfcd47c29c55342(void** newObject, void* arg0, const char* arg1)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          *newObject = new OrthancClient::Series(*reinterpret_cast< ::OrthancClient::OrthancConnection* >(arg0), reinterpret_cast< const char* >(arg1));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_7c97f17063a357d38c5fab1136ad12a0(void* thisObject)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          delete static_cast<OrthancClient::Series*>(thisObject);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_48a2a1a9d68c047e22bfba23014643d2(void* thisObject)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Series* this_ = static_cast<OrthancClient::Series*>(thisObject);
-this_->Reload();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_852bf8296ca21c5fde5ec565cc10721d(void* thisObject, uint32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Series* this_ = static_cast<OrthancClient::Series*>(thisObject);
-*result = this_->GetInstanceCount();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_efd04574e0779faa83df1f2d8f9888db(void* thisObject, void** result, uint32_t arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Series* this_ = static_cast<OrthancClient::Series*>(thisObject);
-*result = &this_->GetInstance(arg0);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_736247ff5e8036dac38163da6f666ed5(const void* thisObject, const char** result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Series* this_ = static_cast<const OrthancClient::Series*>(thisObject);
-*result = this_->GetId();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_d82d2598a7a73f4b6fcc0c09c25b08ca(const void* thisObject, const char** result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Series* this_ = static_cast<const OrthancClient::Series*>(thisObject);
-*result = this_->GetUrl();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_88134b978f9acb2aecdadf54aeab3c64(const void* thisObject, const char** result, const char* arg0, const char* arg1)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Series* this_ = static_cast<const OrthancClient::Series*>(thisObject);
-*result = this_->GetMainDicomTag(reinterpret_cast< const char* >(arg0), reinterpret_cast< const char* >(arg1));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_152cb1b704c053d24b0dab7461ba6ea3(void* thisObject, int32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Series* this_ = static_cast<OrthancClient::Series*>(thisObject);
-*result = this_->Is3DImage();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_eee03f337ec81d9f1783cd41e5238757(void* thisObject, uint32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Series* this_ = static_cast<OrthancClient::Series*>(thisObject);
-*result = this_->GetWidth();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_006f08237bd7611636fc721baebfb4c5(void* thisObject, uint32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Series* this_ = static_cast<OrthancClient::Series*>(thisObject);
-*result = this_->GetHeight();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_b794f5cd3dad7d7b575dd1fd902afdd0(void* thisObject, float* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Series* this_ = static_cast<OrthancClient::Series*>(thisObject);
-*result = this_->GetVoxelSizeX();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_8ee2e50dd9df8f66a3c1766090dd03ab(void* thisObject, float* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Series* this_ = static_cast<OrthancClient::Series*>(thisObject);
-*result = this_->GetVoxelSizeY();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_046aed35bbe4751691f4c34cc249a61d(void* thisObject, float* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Series* this_ = static_cast<OrthancClient::Series*>(thisObject);
-*result = this_->GetVoxelSizeZ();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_2be452e7af5bf7dfd8c5021842674497(void* thisObject, float* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Series* this_ = static_cast<OrthancClient::Series*>(thisObject);
-*result = this_->GetSliceThickness();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_4dcc7a0fd025efba251ac6e9b701c2c5(void* thisObject, void* arg0, int32_t arg1, int64_t arg2, int64_t arg3)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Series* this_ = static_cast<OrthancClient::Series*>(thisObject);
-this_->Load3DImage(reinterpret_cast< void* >(arg0), static_cast< ::Orthanc::PixelFormat >(arg1), arg2, arg3);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_b2601a161c24ad0a1d3586246f87452c(void* thisObject, void* arg0, int32_t arg1, int64_t arg2, int64_t arg3, float* arg4)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Series* this_ = static_cast<OrthancClient::Series*>(thisObject);
-this_->Load3DImage(reinterpret_cast< void* >(arg0), static_cast< ::Orthanc::PixelFormat >(arg1), arg2, arg3, reinterpret_cast< float* >(arg4));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_b01c6003238eb46c8db5dc823d7ca678(void** newObject, void* arg0, const char* arg1)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          *newObject = new OrthancClient::Study(*reinterpret_cast< ::OrthancClient::OrthancConnection* >(arg0), reinterpret_cast< const char* >(arg1));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_0147007fb99bad8cd95a139ec8795376(void* thisObject)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          delete static_cast<OrthancClient::Study*>(thisObject);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_e65b20b7e0170b67544cd6664a4639b7(void* thisObject)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Study* this_ = static_cast<OrthancClient::Study*>(thisObject);
-this_->Reload();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_470e981b0e41f17231ba0ae6f3033321(void* thisObject, uint32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Study* this_ = static_cast<OrthancClient::Study*>(thisObject);
-*result = this_->GetSeriesCount();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_04cefd138b6ea15ad909858f2a0a8f05(void* thisObject, void** result, uint32_t arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Study* this_ = static_cast<OrthancClient::Study*>(thisObject);
-*result = &this_->GetSeries(arg0);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_aee5b1f6f0c082f2c3b0986f9f6a18c7(const void* thisObject, const char** result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Study* this_ = static_cast<const OrthancClient::Study*>(thisObject);
-*result = this_->GetId();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_93965682bace75491413e1f0b8d5a654(const void* thisObject, const char** result, const char* arg0, const char* arg1)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Study* this_ = static_cast<const OrthancClient::Study*>(thisObject);
-*result = this_->GetMainDicomTag(reinterpret_cast< const char* >(arg0), reinterpret_cast< const char* >(arg1));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_6c5ad02f91b583e29cebd0bd319ce21d(void** newObject, void* arg0, const char* arg1)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          *newObject = new OrthancClient::Instance(*reinterpret_cast< ::OrthancClient::OrthancConnection* >(arg0), reinterpret_cast< const char* >(arg1));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_4068241c44a9c1367fe0e57be523f207(void* thisObject)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          delete static_cast<OrthancClient::Instance*>(thisObject);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_236ee8b403bc99535a8a4695c0cd45cb(const void* thisObject, const char** result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Instance* this_ = static_cast<const OrthancClient::Instance*>(thisObject);
-*result = this_->GetId();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_2a437b7aba6bb01e81113835be8f0146(void* thisObject, int32_t arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Instance* this_ = static_cast<OrthancClient::Instance*>(thisObject);
-this_->SetImageExtractionMode(static_cast< ::Orthanc::ImageExtractionMode >(arg0));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_2bcbcb850934ae0bb4c6f0cc940e6cda(const void* thisObject, int32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Instance* this_ = static_cast<const OrthancClient::Instance*>(thisObject);
-*result = this_->GetImageExtractionMode();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_8d415c3a78a48e7e61d9fd24e7c79484(const void* thisObject, const char** result, const char* arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Instance* this_ = static_cast<const OrthancClient::Instance*>(thisObject);
-*result = this_->GetTagAsString(reinterpret_cast< const char* >(arg0));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_70d2f8398bbc63b5f792b69b4ad5fecb(const void* thisObject, float* result, const char* arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Instance* this_ = static_cast<const OrthancClient::Instance*>(thisObject);
-*result = this_->GetTagAsFloat(reinterpret_cast< const char* >(arg0));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_1729a067d902771517388eedd7346b23(const void* thisObject, int32_t* result, const char* arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Instance* this_ = static_cast<const OrthancClient::Instance*>(thisObject);
-*result = this_->GetTagAsInt(reinterpret_cast< const char* >(arg0));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_72e2aeee66cd3abd8ab7e987321c3745(void* thisObject, uint32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Instance* this_ = static_cast<OrthancClient::Instance*>(thisObject);
-*result = this_->GetWidth();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_1ea3df5a1ac1a1a687fe7325adddb6f0(void* thisObject, uint32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Instance* this_ = static_cast<OrthancClient::Instance*>(thisObject);
-*result = this_->GetHeight();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_99b4f370e4f532d8b763e2cb49db92f8(void* thisObject, uint32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Instance* this_ = static_cast<OrthancClient::Instance*>(thisObject);
-*result = this_->GetPitch();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_c41c742b68617f1c0590577a0a5ebc0c(void* thisObject, int32_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Instance* this_ = static_cast<OrthancClient::Instance*>(thisObject);
-*result = this_->GetPixelFormat();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_142dd2feba0fc1d262bbd0baeb441a8b(void* thisObject, const void** result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Instance* this_ = static_cast<OrthancClient::Instance*>(thisObject);
-*result = this_->GetBuffer();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_5f5c9f81a4dff8daa6c359f1d0488fef(void* thisObject, const void** result, uint32_t arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Instance* this_ = static_cast<OrthancClient::Instance*>(thisObject);
-*result = this_->GetBuffer(arg0);
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_9ca979fffd08fa256306d4e68d8b0e91(void* thisObject, uint64_t* result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Instance* this_ = static_cast<OrthancClient::Instance*>(thisObject);
-*result = this_->GetDicomSize();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_6f2d77a26edc91c28d89408dbc3c271e(void* thisObject, const void** result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Instance* this_ = static_cast<OrthancClient::Instance*>(thisObject);
-*result = this_->GetDicom();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_c0f494b80d4ff8b232df7a75baa0700a(void* thisObject)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Instance* this_ = static_cast<OrthancClient::Instance*>(thisObject);
-this_->DiscardImage();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_d604f44bd5195e082e745e9cbc164f4c(void* thisObject)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Instance* this_ = static_cast<OrthancClient::Instance*>(thisObject);
-this_->DiscardDicom();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_1710299d1c5f3b1f2b7cf3962deebbfd(void* thisObject, const char* arg0)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          OrthancClient::Instance* this_ = static_cast<OrthancClient::Instance*>(thisObject);
-this_->LoadTagContent(reinterpret_cast< const char* >(arg0));
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-      LAAW_EXPORT_DLL_API char* LAAW_CALL_CONVENTION LAAW_EXTERNC_bb55aaf772ddceaadee36f4e54136bcb(const void* thisObject, const char** result)
-      {
-        try
-        {
-          #ifdef LAAW_EXTERNC_START_FUNCTION
-          LAAW_EXTERNC_START_FUNCTION;
-          #endif
-
-          const OrthancClient::Instance* this_ = static_cast<const OrthancClient::Instance*>(thisObject);
-*result = this_->GetLoadedTagContent();
-
-          return NULL;
-        }
-        catch (::Laaw::LaawException& e)
-        {
-          return LAAW_EXTERNC_CopyString(e.What());
-        }
-        catch (...)
-        {
-          return LAAW_EXTERNC_CopyString("...");
-        }
-      }
-
-
-  LAAW_EXPORT_DLL_API const char* LAAW_CALL_CONVENTION LAAW_EXTERNC_GetDescription()
-  {
-    return "Native client to the REST API of Orthanc";
-  }
-
-  LAAW_EXPORT_DLL_API const char* LAAW_CALL_CONVENTION LAAW_EXTERNC_GetCompany()
-  {
-    return "University Hospital of Liege";
-  }
-
-  LAAW_EXPORT_DLL_API const char* LAAW_CALL_CONVENTION LAAW_EXTERNC_GetProduct()
-  {
-    return "OrthancClient";
-  }
-
-  LAAW_EXPORT_DLL_API const char* LAAW_CALL_CONVENTION LAAW_EXTERNC_GetCopyright()
-  {
-    return "(c) 2012-2015, Sebastien Jodogne, University Hospital of Liege";
-  }
-
-  LAAW_EXPORT_DLL_API const char* LAAW_CALL_CONVENTION LAAW_EXTERNC_GetVersion()
-  {
-    return "0.8";
-  }
-
-  LAAW_EXPORT_DLL_API const char* LAAW_CALL_CONVENTION LAAW_EXTERNC_GetFileVersion()
-  {
-    return "0.8.0.6";
-  }
-
-  LAAW_EXPORT_DLL_API const char* LAAW_CALL_CONVENTION LAAW_EXTERNC_GetFullVersion()
-  {
-    return "0.8.6";
-  }
-
-  LAAW_EXPORT_DLL_API void LAAW_CALL_CONVENTION LAAW_EXTERNC_FreeString(char* str)
-  {
-    if (str != NULL)
-      free(str);
-  }
-}
--- a/OrthancCppClient/SharedLibrary/AUTOGENERATED/OrthancCppClient.h	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1817 +0,0 @@
-/**
- * Laaw - Lightweight, Automated API Wrapper
- * Copyright (C) 2010-2013 Jomago - Alain Mazy, Benjamin Golinvaux,
- * Sebastien Jodogne
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-/**
- * @file
- **/
-
-#pragma once
-
-#include <stdexcept>
-#include <memory>
-#include <string>
-#include <string.h>
-
-#if defined(_WIN32)
-
-/********************************************************************
- ** This is the Windows-specific section
- ********************************************************************/
-
-#include <windows.h>
-
-/* cf. http://sourceforge.net/p/predef/wiki/Architectures/ */
-#ifdef _M_X64
-/* 64 bits target */
-#define LAAW_ORTHANC_CLIENT_CALL_CONV  __fastcall
-#define LAAW_ORTHANC_CLIENT_CALL_DECORATION(Name, StdCallSuffix) Name
-#define LAAW_ORTHANC_CLIENT_DEFAULT_PATH  "OrthancClient_Windows64.dll"
-#else
-/* 32 bits target */
-#define LAAW_ORTHANC_CLIENT_CALL_CONV  __stdcall
-#define LAAW_ORTHANC_CLIENT_CALL_DECORATION(Name, StdCallSuffix) "_" Name "@" StdCallSuffix
-#define LAAW_ORTHANC_CLIENT_DEFAULT_PATH  "OrthancClient_Windows32.dll"
-#endif
-
-#define LAAW_ORTHANC_CLIENT_HANDLE_TYPE  HINSTANCE
-#define LAAW_ORTHANC_CLIENT_HANDLE_NULL  0
-#define LAAW_ORTHANC_CLIENT_FUNCTION_TYPE  FARPROC
-#define LAAW_ORTHANC_CLIENT_LOADER(path) LoadLibraryA(path)
-#define LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle, name, decoration) GetProcAddress(handle, LAAW_ORTHANC_CLIENT_CALL_DECORATION(name, decoration))
-#define LAAW_ORTHANC_CLIENT_CLOSER(handle) FreeLibrary(handle)
-
-
-/********************************************************************
- ** This is the Linux-specific section
- ********************************************************************/
-
-#elif defined (__linux)
-
-#include <stdlib.h>
-#include <dlfcn.h>
-
-/* cf. http://sourceforge.net/p/predef/wiki/Architectures/ */
-#ifdef __amd64__
-#define LAAW_ORTHANC_CLIENT_DEFAULT_PATH  "libOrthancClient.so.0.8"
-#else
-#define LAAW_ORTHANC_CLIENT_DEFAULT_PATH  "libOrthancClient.so.0.8"
-#endif
-
-#define LAAW_ORTHANC_CLIENT_CALL_CONV
-#define LAAW_ORTHANC_CLIENT_HANDLE_TYPE  void*
-#define LAAW_ORTHANC_CLIENT_HANDLE_NULL  NULL
-#define LAAW_ORTHANC_CLIENT_FUNCTION_TYPE  intptr_t
-#define LAAW_ORTHANC_CLIENT_LOADER(path) dlopen(path, RTLD_LAZY)
-#define LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle, name, decoration) (LAAW_ORTHANC_CLIENT_FUNCTION_TYPE) dlsym(handle, name)
-#define LAAW_ORTHANC_CLIENT_CLOSER(handle) dlclose(handle)
-
-
-#else
-#error Please support your platform here
-#endif
-
-
-/********************************************************************
- ** Definition of the integer types
- ********************************************************************/
-
-#ifndef LAAW_INT8  // Only define the integer types once
-
-#if defined(__GNUC__)
-
-// Under GCC (including MinGW), the stdint.h standard header is used.
-
-#include <stdint.h>
-
-#define LAAW_INT8  int8_t
-#define LAAW_UINT8  uint8_t
-#define LAAW_INT16  int16_t
-#define LAAW_UINT16  uint16_t
-#define LAAW_INT32  int32_t
-#define LAAW_UINT32  uint32_t
-#define LAAW_INT64  int64_t
-#define LAAW_UINT64  uint64_t
-
-#elif defined(_MSC_VER)
-
-// Under Visual Studio, it is required to define the various integer
-// types by hand.
-
-#if (_MSC_VER < 1300)
-typedef signed char       LAAW_INT8;
-typedef signed short      LAAW_INT16;
-typedef signed int        LAAW_INT32;
-typedef unsigned char     LAAW_UINT8;
-typedef unsigned short    LAAW_UINT16;
-typedef unsigned int      LAAW_UINT32;
-#else
-typedef signed __int8     LAAW_INT8;
-typedef signed __int16    LAAW_INT16;
-typedef signed __int32    LAAW_INT32;
-typedef unsigned __int8   LAAW_UINT8;
-typedef unsigned __int16  LAAW_UINT16;
-typedef unsigned __int32  LAAW_UINT32;
-#endif
-
-typedef signed __int64   LAAW_INT64;
-typedef unsigned __int64 LAAW_UINT64;
-
-#else
-#error "Please support your compiler here"
-#endif
-
-#endif
-
-
-
-
-
-/********************************************************************
- ** This is a shared section between Windows and Linux
- ********************************************************************/
-
-namespace OrthancClient { 
-/**
- * @brief Exception class that is thrown by the functions of this shared library.
- **/
-class OrthancClientException : public std::exception
-  {
-  private:
-    std::string message_;
-
-  public:
-    /**
-     * @brief Constructs an exception.
-     * @param message The error message.
-     **/
-    OrthancClientException(std::string message) : message_(message) 
-    {
-    }
-
-    ~OrthancClientException() throw()
-    {
-    }
-
-    /**
-     * @brief Get the error message associated with this exception.
-     * @returns The error message.
-     **/
-    const std::string& What() const throw()
-    {
-      return message_; 
-    }
-};
-}
-
-
-namespace OrthancClient { namespace Internals { 
-/**
- * This internal class implements a Singleton design pattern that will
- * store a reference to the shared library handle, together with a
- * pointer to each function in the shared library.
- **/
-class Library
-  {
-  private:
-    LAAW_ORTHANC_CLIENT_HANDLE_TYPE  handle_;
-    LAAW_ORTHANC_CLIENT_FUNCTION_TYPE  functionsIndex_[63 + 1];
-
-
-
-    void Load(const char* sharedLibraryPath)
-    {
-
-      if (handle_ != LAAW_ORTHANC_CLIENT_HANDLE_NULL)
-      {
-        // Do nothing if the library is already loaded
-        return;
-      }
-
-      /* Setup the path to the default shared library if not provided */
-      if (sharedLibraryPath == NULL)
-      {
-        sharedLibraryPath = LAAW_ORTHANC_CLIENT_DEFAULT_PATH;
-      }
-
-      /* Load the shared library */
-      handle_ = LAAW_ORTHANC_CLIENT_LOADER(sharedLibraryPath);
-
-
-      if (handle_ == LAAW_ORTHANC_CLIENT_HANDLE_NULL)
-      {
-        throw ::OrthancClient::OrthancClientException("Error loading shared library");
-      }
-
-      LoadFunctions();
-    }
-
-    inline void LoadFunctions();
-
-    void FreeString(char* str)
-    {
-      typedef void (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (char*);
-      Function function = (Function) GetFunction(63);
-      function(str);
-    }
-
-    Library()
-    {
-      handle_ = LAAW_ORTHANC_CLIENT_HANDLE_NULL;
-    }
-
-    ~Library()
-    {
-      Finalize();
-    }
-
-  public:
-    LAAW_ORTHANC_CLIENT_FUNCTION_TYPE  GetFunction(unsigned int index)
-    {
-      /**
-       * If the library has not been manually initialized by a call to
-       * ::OrthancClient::Initialize(), it is loaded from
-       * the default location (lazy initialization).
-       **/
-      if (handle_ == NULL)
-      {
-        Load(NULL);
-      }
-
-      return functionsIndex_[index];
-    }
-
-    void ThrowExceptionIfNeeded(char* message)
-    {
-      if (message != NULL)
-      {
-        std::string tmp(message);
-        FreeString(message);
-        throw ::OrthancClient::OrthancClientException(tmp);
-      }
-    }
-
-    static inline Library& GetInstance()
-    {
-      /**
-       * This function defines a "static variable" inside a "static
-       * inline method" of a class.  This ensures that a single
-       * instance of this variable will be used across all the
-       * compilation modules of the software.
-       * http://stackoverflow.com/a/1389403/881731
-       **/
-
-      static Library singleton;
-      return singleton;
-    }
-
-    static void Initialize(const char* sharedLibraryPath)
-    {
-      GetInstance().Load(sharedLibraryPath);
-    }
-
-    void Finalize()
-    {
-      if (handle_ != LAAW_ORTHANC_CLIENT_HANDLE_NULL)
-      {
-#if 0
-        /**
-         * Do not explicitly unload the shared library, as it might
-         * interfere with the destruction of static objects declared
-         * inside the library (e.g. this is the case of gflags that is
-         * internally used by googlelog).
-         **/
-        LAAW_ORTHANC_CLIENT_CLOSER(handle_);
-#endif
-        handle_ = LAAW_ORTHANC_CLIENT_HANDLE_NULL;
-      }
-    }
-};
-}}
-
-
-/*!
- * \addtogroup Global Global definitions.
- * @{
- * @}
- */
-
-
-namespace OrthancClient { 
-/*!
- * \addtogroup Initialization Initialization of the shared library.
- * @{
- */
-
-/**
- * @brief Manually initialize the shared library, using the default library name.
- * 
- * Call this method before using the library to ensure correct
- * behaviour in multi-threaded applications.  This method is also
- * useful to control the time at which the shared library is
- * loaded (e.g. for real-time applications).
- **/
-inline void Initialize()
-{
-  ::OrthancClient::Internals::Library::Initialize(NULL);
-}
-
-/**
- * @brief Manually initialize the shared library.
- * 
- * Call this method before using the library to ensure correct
- * behaviour in multi-threaded applications.  This method is also
- * useful to control the time at which the shared library is
- * loaded (e.g. for real-time applications).
- *
- * @param sharedLibraryPath The path to the shared library that
- * contains the module.
- **/
-inline void Initialize(const std::string& sharedLibraryPath)
-{
-  ::OrthancClient::Internals::Library::Initialize(sharedLibraryPath.c_str());
-}
-
-/**
- * @brief Manually finalize the shared library.
- * 
- * Calling explicitly this function is not mandatory. It is useful to
- * force the release of the resources acquired by the shared library,
- * or to manually control the order in which the global variables get
- * deleted.
- **/
-inline void Finalize()
-{
-  ::OrthancClient::Internals::Library::GetInstance().Finalize();
-}
-
-
-/**
- * @}
- */
-}
-
-
-namespace OrthancClient { namespace Internals { 
-inline void Library::LoadFunctions()
-{
-  typedef const char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) ();
-  Function getVersion = (Function) LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_GetVersion", "0");
-  if (getVersion == NULL)
-  {
-    throw ::OrthancClient::OrthancClientException("Unable to get the library version");
-  }
-
-  /**
-   * It is assumed that the API does not change when the revision
-   * number (MAJOR.MINOR.REVISION) changes.
-   **/
-  if (strcmp(getVersion(), "0.8"))
-  {
-    throw ::OrthancClient::OrthancClientException("Mismatch between the C++ header and the library version");
-  }
-
-  functionsIndex_[63] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_FreeString", "4");
-  functionsIndex_[3] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_557aee7b61817292a0f31269d3c35db7", "8");
-  functionsIndex_[4] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_0b8dff0ce67f10954a49b059e348837e", "8");
-  functionsIndex_[5] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_e05097c153f676e5a5ee54dcfc78256f", "4");
-  functionsIndex_[6] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_e840242bf58d17d3c1d722da09ce88e0", "8");
-  functionsIndex_[7] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_c9af31433001b5dfc012a552dc6d0050", "8");
-  functionsIndex_[8] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_3fba4d6b818180a44cd1cae6046334dc", "12");
-  functionsIndex_[9] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_aeb20dc75b9246188db857317e5e0ce7", "8");
-  functionsIndex_[10] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_62689803d9871e4d9c51a648640b320b", "8");
-  functionsIndex_[11] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_2fb64c9e5a67eccd413b0e913469a421", "16");
-  functionsIndex_[0] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_1f1acb322ea4d0aad65172824607673c", "8");
-  functionsIndex_[1] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_f3fd272e4636f6a531aabb72ee01cd5b", "16");
-  functionsIndex_[2] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_12d3de0a96e9efb11136a9811bb9ed38", "4");
-  functionsIndex_[14] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_f756172daf04516eec3a566adabb4335", "4");
-  functionsIndex_[15] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_ddb68763ec902a97d579666a73a20118", "8");
-  functionsIndex_[16] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_fba3c68b4be7558dbc65f7ce1ab57d63", "12");
-  functionsIndex_[17] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_b4ca99d958f843493e58d1ef967340e1", "8");
-  functionsIndex_[18] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_78d5cc76d282437b6f93ec3b82c35701", "16");
-  functionsIndex_[12] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_6cf0d7268667f9b0aa4511bacf184919", "12");
-  functionsIndex_[13] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_7d81cd502ee27e859735d0ea7112b5a1", "4");
-  functionsIndex_[21] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_48a2a1a9d68c047e22bfba23014643d2", "4");
-  functionsIndex_[22] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_852bf8296ca21c5fde5ec565cc10721d", "8");
-  functionsIndex_[23] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_efd04574e0779faa83df1f2d8f9888db", "12");
-  functionsIndex_[24] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_736247ff5e8036dac38163da6f666ed5", "8");
-  functionsIndex_[25] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_d82d2598a7a73f4b6fcc0c09c25b08ca", "8");
-  functionsIndex_[26] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_88134b978f9acb2aecdadf54aeab3c64", "16");
-  functionsIndex_[27] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_152cb1b704c053d24b0dab7461ba6ea3", "8");
-  functionsIndex_[28] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_eee03f337ec81d9f1783cd41e5238757", "8");
-  functionsIndex_[29] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_006f08237bd7611636fc721baebfb4c5", "8");
-  functionsIndex_[30] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_b794f5cd3dad7d7b575dd1fd902afdd0", "8");
-  functionsIndex_[31] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_8ee2e50dd9df8f66a3c1766090dd03ab", "8");
-  functionsIndex_[32] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_046aed35bbe4751691f4c34cc249a61d", "8");
-  functionsIndex_[33] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_2be452e7af5bf7dfd8c5021842674497", "8");
-  functionsIndex_[34] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_4dcc7a0fd025efba251ac6e9b701c2c5", "28");
-  functionsIndex_[35] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_b2601a161c24ad0a1d3586246f87452c", "32");
-  functionsIndex_[19] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_193599b9e345384fcdfcd47c29c55342", "12");
-  functionsIndex_[20] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_7c97f17063a357d38c5fab1136ad12a0", "4");
-  functionsIndex_[38] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_e65b20b7e0170b67544cd6664a4639b7", "4");
-  functionsIndex_[39] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_470e981b0e41f17231ba0ae6f3033321", "8");
-  functionsIndex_[40] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_04cefd138b6ea15ad909858f2a0a8f05", "12");
-  functionsIndex_[41] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_aee5b1f6f0c082f2c3b0986f9f6a18c7", "8");
-  functionsIndex_[42] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_93965682bace75491413e1f0b8d5a654", "16");
-  functionsIndex_[36] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_b01c6003238eb46c8db5dc823d7ca678", "12");
-  functionsIndex_[37] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_0147007fb99bad8cd95a139ec8795376", "4");
-  functionsIndex_[45] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_236ee8b403bc99535a8a4695c0cd45cb", "8");
-  functionsIndex_[46] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_2a437b7aba6bb01e81113835be8f0146", "8");
-  functionsIndex_[47] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_2bcbcb850934ae0bb4c6f0cc940e6cda", "8");
-  functionsIndex_[48] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_8d415c3a78a48e7e61d9fd24e7c79484", "12");
-  functionsIndex_[49] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_70d2f8398bbc63b5f792b69b4ad5fecb", "12");
-  functionsIndex_[50] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_1729a067d902771517388eedd7346b23", "12");
-  functionsIndex_[51] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_72e2aeee66cd3abd8ab7e987321c3745", "8");
-  functionsIndex_[52] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_1ea3df5a1ac1a1a687fe7325adddb6f0", "8");
-  functionsIndex_[53] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_99b4f370e4f532d8b763e2cb49db92f8", "8");
-  functionsIndex_[54] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_c41c742b68617f1c0590577a0a5ebc0c", "8");
-  functionsIndex_[55] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_142dd2feba0fc1d262bbd0baeb441a8b", "8");
-  functionsIndex_[56] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_5f5c9f81a4dff8daa6c359f1d0488fef", "12");
-  functionsIndex_[57] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_9ca979fffd08fa256306d4e68d8b0e91", "8");
-  functionsIndex_[58] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_6f2d77a26edc91c28d89408dbc3c271e", "8");
-  functionsIndex_[59] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_c0f494b80d4ff8b232df7a75baa0700a", "4");
-  functionsIndex_[60] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_d604f44bd5195e082e745e9cbc164f4c", "4");
-  functionsIndex_[61] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_1710299d1c5f3b1f2b7cf3962deebbfd", "8");
-  functionsIndex_[62] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_bb55aaf772ddceaadee36f4e54136bcb", "8");
-  functionsIndex_[43] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_6c5ad02f91b583e29cebd0bd319ce21d", "12");
-  functionsIndex_[44] = LAAW_ORTHANC_CLIENT_GET_FUNCTION(handle_, "LAAW_EXTERNC_4068241c44a9c1367fe0e57be523f207", "4");
-  
-  /* Check whether the functions were properly loaded */
-  for (unsigned int i = 0; i <= 63; i++)
-  {
-    if (functionsIndex_[i] == (LAAW_ORTHANC_CLIENT_FUNCTION_TYPE) NULL)
-    {
-      throw ::OrthancClient::OrthancClientException("Unable to load the functions of the shared library");
-    }
-  }
-}
-}}
-namespace OrthancClient
-{
-  class OrthancConnection;
-}
-
-namespace OrthancClient
-{
-  class Patient;
-}
-
-namespace OrthancClient
-{
-  class Series;
-}
-
-namespace OrthancClient
-{
-  class Study;
-}
-
-namespace OrthancClient
-{
-  class Instance;
-}
-
-namespace Orthanc
-{
-  /**
-  * @brief The memory layout of the pixels (resp. voxels) of a 2D (resp. 3D) image.
-  *
-  * The memory layout of the pixels (resp. voxels) of a 2D (resp. 3D) image.
-  *
-  * @ingroup Global
-  **/
-  enum PixelFormat
-  {
-    /**
-    * @brief Graylevel, signed 16bpp image.
-    *
-    * The image is graylevel. Each pixel is signed and stored in two bytes.
-    *
-    **/
-    PixelFormat_SignedGrayscale16 = 5,
-    /**
-    * @brief Color image in RGB24 format.
-    *
-    * This format describes a color image. The pixels are stored in 3 consecutive bytes. The memory layout is RGB.
-    *
-    **/
-    PixelFormat_RGB24 = 1,
-    /**
-    * @brief Color image in RGBA32 format.
-    *
-    * This format describes a color image. The pixels are stored in 4 consecutive bytes. The memory layout is RGBA.
-    *
-    **/
-    PixelFormat_RGBA32 = 2,
-    /**
-    * @brief Graylevel 8bpp image.
-    *
-    * The image is graylevel. Each pixel is unsigned and stored in one byte.
-    *
-    **/
-    PixelFormat_Grayscale8 = 3,
-    /**
-    * @brief Graylevel, unsigned 16bpp image.
-    *
-    * The image is graylevel. Each pixel is unsigned and stored in two bytes.
-    *
-    **/
-    PixelFormat_Grayscale16 = 4
-  };
-}
-
-namespace Orthanc
-{
-  /**
-  * @brief The extraction mode specifies the way the values of the pixels are scaled when downloading a 2D image.
-  *
-  * The extraction mode specifies the way the values of the pixels are scaled when downloading a 2D image.
-  *
-  * @ingroup Global
-  **/
-  enum ImageExtractionMode
-  {
-    /**
-    * @brief Truncation to the [-32768, 32767] range.
-    *
-    * Truncation to the [-32768, 32767] range.
-    *
-    **/
-    ImageExtractionMode_Int16 = 4,
-    /**
-    * @brief Rescaled to 8bpp.
-    *
-    * The minimum value of the image is set to 0, and its maximum value is set to 255.
-    *
-    **/
-    ImageExtractionMode_Preview = 1,
-    /**
-    * @brief Truncation to the [0, 255] range.
-    *
-    * Truncation to the [0, 255] range.
-    *
-    **/
-    ImageExtractionMode_UInt8 = 2,
-    /**
-    * @brief Truncation to the [0, 65535] range.
-    *
-    * Truncation to the [0, 65535] range.
-    *
-    **/
-    ImageExtractionMode_UInt16 = 3
-  };
-}
-
-namespace OrthancClient
-{
-  /**
-  * @brief Connection to an instance of %Orthanc.
-  *
-  * This class encapsulates a connection to a remote instance of %Orthanc through its REST API.
-  *
-  **/
-  class OrthancConnection
-  {
-    friend class ::OrthancClient::Patient;
-    friend class ::OrthancClient::Series;
-    friend class ::OrthancClient::Study;
-    friend class ::OrthancClient::Instance;
-  private:
-    bool isReference_;
-    OrthancConnection& operator= (const OrthancConnection&); // Assignment is forbidden
-    void* pimpl_;
-    OrthancConnection(void* pimpl) : isReference_(true), pimpl_(pimpl) {}
-  public:
-    /**
-     * @brief Construct a new reference to this object.
-     *
-     * Construct a new reference to this object. Pay attention to the fact that when the referenced object is deleted, the content of this object will be invalid.
-     *
-     * @param other The original object.
-     **/
-    OrthancConnection(const OrthancConnection& other) : isReference_(true), pimpl_(other.pimpl_) { }
-    inline OrthancConnection(const ::std::string& orthancUrl);
-    inline OrthancConnection(const ::std::string& orthancUrl, const ::std::string& username, const ::std::string& password);
-    inline ~OrthancConnection();
-    inline LAAW_UINT32 GetThreadCount() const;
-    inline void SetThreadCount(LAAW_UINT32 threadCount);
-    inline void Reload();
-    inline ::std::string GetOrthancUrl() const;
-    inline LAAW_UINT32 GetPatientCount();
-    inline ::OrthancClient::Patient GetPatient(LAAW_UINT32 index);
-    inline void DeletePatient(LAAW_UINT32 index);
-    inline void StoreFile(const ::std::string& filename);
-    inline void Store(const void* dicom, LAAW_UINT64 size);
-  };
-}
-
-namespace OrthancClient
-{
-  /**
-  * @brief Connection to a patient stored in %Orthanc.
-  *
-  * This class encapsulates a connection to a patient from a remote instance of %Orthanc.
-  *
-  **/
-  class Patient
-  {
-    friend class ::OrthancClient::OrthancConnection;
-    friend class ::OrthancClient::Series;
-    friend class ::OrthancClient::Study;
-    friend class ::OrthancClient::Instance;
-  private:
-    bool isReference_;
-    Patient& operator= (const Patient&); // Assignment is forbidden
-    void* pimpl_;
-    Patient(void* pimpl) : isReference_(true), pimpl_(pimpl) {}
-  public:
-    /**
-     * @brief Construct a new reference to this object.
-     *
-     * Construct a new reference to this object. Pay attention to the fact that when the referenced object is deleted, the content of this object will be invalid.
-     *
-     * @param other The original object.
-     **/
-    Patient(const Patient& other) : isReference_(true), pimpl_(other.pimpl_) { }
-    inline Patient(::OrthancClient::OrthancConnection& connection, const ::std::string& id);
-    inline ~Patient();
-    inline void Reload();
-    inline LAAW_UINT32 GetStudyCount();
-    inline ::OrthancClient::Study GetStudy(LAAW_UINT32 index);
-    inline ::std::string GetId() const;
-    inline ::std::string GetMainDicomTag(const ::std::string& tag, const ::std::string& defaultValue) const;
-  };
-}
-
-namespace OrthancClient
-{
-  /**
-  * @brief Connection to a series stored in %Orthanc.
-  *
-  * This class encapsulates a connection to a series from a remote instance of %Orthanc.
-  *
-  **/
-  class Series
-  {
-    friend class ::OrthancClient::OrthancConnection;
-    friend class ::OrthancClient::Patient;
-    friend class ::OrthancClient::Study;
-    friend class ::OrthancClient::Instance;
-  private:
-    bool isReference_;
-    Series& operator= (const Series&); // Assignment is forbidden
-    void* pimpl_;
-    Series(void* pimpl) : isReference_(true), pimpl_(pimpl) {}
-  public:
-    /**
-     * @brief Construct a new reference to this object.
-     *
-     * Construct a new reference to this object. Pay attention to the fact that when the referenced object is deleted, the content of this object will be invalid.
-     *
-     * @param other The original object.
-     **/
-    Series(const Series& other) : isReference_(true), pimpl_(other.pimpl_) { }
-    inline Series(::OrthancClient::OrthancConnection& connection, const ::std::string& id);
-    inline ~Series();
-    inline void Reload();
-    inline LAAW_UINT32 GetInstanceCount();
-    inline ::OrthancClient::Instance GetInstance(LAAW_UINT32 index);
-    inline ::std::string GetId() const;
-    inline ::std::string GetUrl() const;
-    inline ::std::string GetMainDicomTag(const ::std::string& tag, const ::std::string& defaultValue) const;
-    inline bool Is3DImage();
-    inline LAAW_UINT32 GetWidth();
-    inline LAAW_UINT32 GetHeight();
-    inline float GetVoxelSizeX();
-    inline float GetVoxelSizeY();
-    inline float GetVoxelSizeZ();
-    inline float GetSliceThickness();
-    inline void Load3DImage(void* target, ::Orthanc::PixelFormat format, LAAW_INT64 lineStride, LAAW_INT64 stackStride);
-    inline void Load3DImage(void* target, ::Orthanc::PixelFormat format, LAAW_INT64 lineStride, LAAW_INT64 stackStride, float progress[]);
-  };
-}
-
-namespace OrthancClient
-{
-  /**
-  * @brief Connection to a study stored in %Orthanc.
-  *
-  * This class encapsulates a connection to a study from a remote instance of %Orthanc.
-  *
-  **/
-  class Study
-  {
-    friend class ::OrthancClient::OrthancConnection;
-    friend class ::OrthancClient::Patient;
-    friend class ::OrthancClient::Series;
-    friend class ::OrthancClient::Instance;
-  private:
-    bool isReference_;
-    Study& operator= (const Study&); // Assignment is forbidden
-    void* pimpl_;
-    Study(void* pimpl) : isReference_(true), pimpl_(pimpl) {}
-  public:
-    /**
-     * @brief Construct a new reference to this object.
-     *
-     * Construct a new reference to this object. Pay attention to the fact that when the referenced object is deleted, the content of this object will be invalid.
-     *
-     * @param other The original object.
-     **/
-    Study(const Study& other) : isReference_(true), pimpl_(other.pimpl_) { }
-    inline Study(::OrthancClient::OrthancConnection& connection, const ::std::string& id);
-    inline ~Study();
-    inline void Reload();
-    inline LAAW_UINT32 GetSeriesCount();
-    inline ::OrthancClient::Series GetSeries(LAAW_UINT32 index);
-    inline ::std::string GetId() const;
-    inline ::std::string GetMainDicomTag(const ::std::string& tag, const ::std::string& defaultValue) const;
-  };
-}
-
-namespace OrthancClient
-{
-  /**
-  * @brief Connection to an instance stored in %Orthanc.
-  *
-  * This class encapsulates a connection to an image instance from a remote instance of %Orthanc.
-  *
-  **/
-  class Instance
-  {
-    friend class ::OrthancClient::OrthancConnection;
-    friend class ::OrthancClient::Patient;
-    friend class ::OrthancClient::Series;
-    friend class ::OrthancClient::Study;
-  private:
-    bool isReference_;
-    Instance& operator= (const Instance&); // Assignment is forbidden
-    void* pimpl_;
-    Instance(void* pimpl) : isReference_(true), pimpl_(pimpl) {}
-  public:
-    /**
-     * @brief Construct a new reference to this object.
-     *
-     * Construct a new reference to this object. Pay attention to the fact that when the referenced object is deleted, the content of this object will be invalid.
-     *
-     * @param other The original object.
-     **/
-    Instance(const Instance& other) : isReference_(true), pimpl_(other.pimpl_) { }
-    inline Instance(::OrthancClient::OrthancConnection& connection, const ::std::string& id);
-    inline ~Instance();
-    inline ::std::string GetId() const;
-    inline void SetImageExtractionMode(::Orthanc::ImageExtractionMode mode);
-    inline ::Orthanc::ImageExtractionMode GetImageExtractionMode() const;
-    inline ::std::string GetTagAsString(const ::std::string& tag) const;
-    inline float GetTagAsFloat(const ::std::string& tag) const;
-    inline LAAW_INT32 GetTagAsInt(const ::std::string& tag) const;
-    inline LAAW_UINT32 GetWidth();
-    inline LAAW_UINT32 GetHeight();
-    inline LAAW_UINT32 GetPitch();
-    inline ::Orthanc::PixelFormat GetPixelFormat();
-    inline const void* GetBuffer();
-    inline const void* GetBuffer(LAAW_UINT32 y);
-    inline LAAW_UINT64 GetDicomSize();
-    inline const void* GetDicom();
-    inline void DiscardImage();
-    inline void DiscardDicom();
-    inline void LoadTagContent(const ::std::string& path);
-    inline ::std::string GetLoadedTagContent() const;
-  };
-}
-
-namespace OrthancClient
-{
-  /**
-  * @brief Create a connection to an instance of %Orthanc.
-  *
-  * Create a connection to an instance of %Orthanc.
-  *
-  * @param orthancUrl URL to which the REST API of %Orthanc is listening.
-  **/
-  inline OrthancConnection::OrthancConnection(const ::std::string& orthancUrl)
-  {
-    isReference_ = false;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void**, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(0);
-    char* error = function(&pimpl_, orthancUrl.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Create a connection to an instance of %Orthanc, with authentication.
-  *
-  * Create a connection to an instance of %Orthanc, with authentication.
-  *
-  * @param orthancUrl URL to which the REST API of %Orthanc is listening.
-  * @param username The username.
-  * @param password The password.
-  **/
-  inline OrthancConnection::OrthancConnection(const ::std::string& orthancUrl, const ::std::string& username, const ::std::string& password)
-  {
-    isReference_ = false;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void**, const char*, const char*, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(1);
-    char* error = function(&pimpl_, orthancUrl.c_str(), username.c_str(), password.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Destructs the object.
-  *
-  * Destructs the object.
-  *
-  **/
-  inline OrthancConnection::~OrthancConnection()
-  {
-    if (isReference_) return;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(2);
-    char* error = function(pimpl_);
-    error = error;  // Remove warning about unused variable
-  }
-  /**
-  * @brief Returns the number of threads for this connection.
-  *
-  * Returns the number of simultaneous connections that are used when downloading information from this instance of %Orthanc.
-  *
-  * @return The number of threads.
-  **/
-  inline LAAW_UINT32 OrthancConnection::GetThreadCount() const
-  {
-    LAAW_UINT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, LAAW_UINT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(3);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Sets the number of threads for this connection.
-  *
-  * Sets the number of simultaneous connections that are used when downloading information from this instance of %Orthanc.
-  *
-  * @param threadCount The number of threads.
-  **/
-  inline void OrthancConnection::SetThreadCount(LAAW_UINT32 threadCount)
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_UINT32);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(4);
-    char* error = function(pimpl_, threadCount);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Reload the list of the patients.
-  *
-  * This method will reload the list of the patients from the remote instance of %Orthanc. Pay attention to the fact that the patients that have been previously returned by GetPatient() will be invalidated.
-  *
-  **/
-  inline void OrthancConnection::Reload()
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(5);
-    char* error = function(pimpl_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Returns the URL of this instance of %Orthanc.
-  *
-  * Returns the URL of the remote %Orthanc instance to which this object is connected.
-  *
-  * @return The URL.
-  **/
-  inline ::std::string OrthancConnection::GetOrthancUrl() const
-  {
-    const char* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, const char**);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(6);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return std::string(result_);
-  }
-  /**
-  * @brief Returns the number of patients.
-  *
-  * Returns the number of patients that are stored in the remote instance of %Orthanc.
-  *
-  * @return The number of patients.
-  **/
-  inline LAAW_UINT32 OrthancConnection::GetPatientCount()
-  {
-    LAAW_UINT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_UINT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(7);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get some patient.
-  *
-  * This method will return an object that contains information about some patient. The patients are indexed by a number between 0 (inclusive) and the result of GetPatientCount() (exclusive).
-  *
-  * @param index The index of the patient of interest.
-  * @return The patient.
-  **/
-  inline ::OrthancClient::Patient OrthancConnection::GetPatient(LAAW_UINT32 index)
-  {
-    void* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, void**, LAAW_UINT32);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(8);
-    char* error = function(pimpl_, &result_, index);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return ::OrthancClient::Patient(result_);
-  }
-  /**
-  * @brief Delete some patient.
-  *
-  * Delete some patient from the remote instance of %Orthanc. Pay attention to the fact that the patients that have been previously returned by GetPatient() will be invalidated.
-  *
-  * @param index The index of the patient of interest.
-  * @return The patient.
-  **/
-  inline void OrthancConnection::DeletePatient(LAAW_UINT32 index)
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_UINT32);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(9);
-    char* error = function(pimpl_, index);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Send a DICOM file.
-  *
-  * This method will store a DICOM file in the remote instance of %Orthanc. Pay attention to the fact that the patients that have been previously returned by GetPatient() will be invalidated.
-  *
-  * @param filename Path to the DICOM file
-  **/
-  inline void OrthancConnection::StoreFile(const ::std::string& filename)
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(10);
-    char* error = function(pimpl_, filename.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Send a DICOM file that is contained inside a memory buffer.
-  *
-  * This method will store a DICOM file in the remote instance of %Orthanc. Pay attention to the fact that the patients that have been previously returned by GetPatient() will be invalidated.
-  *
-  * @param dicom The memory buffer containing the DICOM file.
-  * @param size The size of the DICOM file.
-  **/
-  inline void OrthancConnection::Store(const void* dicom, LAAW_UINT64 size)
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, const void*, LAAW_UINT64);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(11);
-    char* error = function(pimpl_, dicom, size);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-}
-
-namespace OrthancClient
-{
-  /**
-  * @brief Create a connection to some patient.
-  *
-  * Create a connection to some patient.
-  *
-  * @param connection The remote instance of %Orthanc.
-  * @param id The %Orthanc identifier of the patient.
-  **/
-  inline Patient::Patient(::OrthancClient::OrthancConnection& connection, const ::std::string& id)
-  {
-    isReference_ = false;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void**, void*, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(12);
-    char* error = function(&pimpl_, connection.pimpl_, id.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Destructs the object.
-  *
-  * Destructs the object.
-  *
-  **/
-  inline Patient::~Patient()
-  {
-    if (isReference_) return;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(13);
-    char* error = function(pimpl_);
-    error = error;  // Remove warning about unused variable
-  }
-  /**
-  * @brief Reload the studies of this patient.
-  *
-  * This method will reload the list of the studies of this patient. Pay attention to the fact that the studies that have been previously returned by GetStudy() will be invalidated.
-  *
-  **/
-  inline void Patient::Reload()
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(14);
-    char* error = function(pimpl_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Return the number of studies for this patient.
-  *
-  * Return the number of studies for this patient.
-  *
-  * @return The number of studies.
-  **/
-  inline LAAW_UINT32 Patient::GetStudyCount()
-  {
-    LAAW_UINT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_UINT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(15);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get some study of this patient.
-  *
-  * This method will return an object that contains information about some study. The studies are indexed by a number between 0 (inclusive) and the result of GetStudyCount() (exclusive).
-  *
-  * @param index The index of the study of interest.
-  * @return The study.
-  **/
-  inline ::OrthancClient::Study Patient::GetStudy(LAAW_UINT32 index)
-  {
-    void* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, void**, LAAW_UINT32);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(16);
-    char* error = function(pimpl_, &result_, index);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return ::OrthancClient::Study(result_);
-  }
-  /**
-  * @brief Get the %Orthanc identifier of this patient.
-  *
-  * Get the %Orthanc identifier of this patient.
-  *
-  * @return The identifier.
-  **/
-  inline ::std::string Patient::GetId() const
-  {
-    const char* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, const char**);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(17);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return std::string(result_);
-  }
-  /**
-  * @brief Get the value of one of the main DICOM tags for this patient.
-  *
-  * Get the value of one of the main DICOM tags for this patient.
-  *
-  * @param tag The name of the tag of interest ("PatientName", "PatientID", "PatientSex" or "PatientBirthDate").
-  * @param defaultValue The default value to be returned if this tag does not exist.
-  * @return The value of the tag.
-  **/
-  inline ::std::string Patient::GetMainDicomTag(const ::std::string& tag, const ::std::string& defaultValue) const
-  {
-    const char* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, const char**, const char*, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(18);
-    char* error = function(pimpl_, &result_, tag.c_str(), defaultValue.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return std::string(result_);
-  }
-}
-
-namespace OrthancClient
-{
-  /**
-  * @brief Create a connection to some series.
-  *
-  * Create a connection to some series.
-  *
-  * @param connection The remote instance of %Orthanc.
-  * @param id The %Orthanc identifier of the series.
-  **/
-  inline Series::Series(::OrthancClient::OrthancConnection& connection, const ::std::string& id)
-  {
-    isReference_ = false;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void**, void*, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(19);
-    char* error = function(&pimpl_, connection.pimpl_, id.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Destructs the object.
-  *
-  * Destructs the object.
-  *
-  **/
-  inline Series::~Series()
-  {
-    if (isReference_) return;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(20);
-    char* error = function(pimpl_);
-    error = error;  // Remove warning about unused variable
-  }
-  /**
-  * @brief Reload the instances of this series.
-  *
-  * This method will reload the list of the instances of this series. Pay attention to the fact that the instances that have been previously returned by GetInstance() will be invalidated.
-  *
-  **/
-  inline void Series::Reload()
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(21);
-    char* error = function(pimpl_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Return the number of instances for this series.
-  *
-  * Return the number of instances for this series.
-  *
-  * @return The number of instances.
-  **/
-  inline LAAW_UINT32 Series::GetInstanceCount()
-  {
-    LAAW_UINT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_UINT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(22);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get some instance of this series.
-  *
-  * This method will return an object that contains information about some instance. The instances are indexed by a number between 0 (inclusive) and the result of GetInstanceCount() (exclusive).
-  *
-  * @param index The index of the instance of interest.
-  * @return The instance.
-  **/
-  inline ::OrthancClient::Instance Series::GetInstance(LAAW_UINT32 index)
-  {
-    void* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, void**, LAAW_UINT32);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(23);
-    char* error = function(pimpl_, &result_, index);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return ::OrthancClient::Instance(result_);
-  }
-  /**
-  * @brief Get the %Orthanc identifier of this series.
-  *
-  * Get the %Orthanc identifier of this series.
-  *
-  * @return The identifier.
-  **/
-  inline ::std::string Series::GetId() const
-  {
-    const char* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, const char**);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(24);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return std::string(result_);
-  }
-  /**
-  * @brief Returns the URL to this series.
-  *
-  * Returns the URL to this series.
-  *
-  * @return The URL.
-  **/
-  inline ::std::string Series::GetUrl() const
-  {
-    const char* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, const char**);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(25);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return std::string(result_);
-  }
-  /**
-  * @brief Get the value of one of the main DICOM tags for this series.
-  *
-  * Get the value of one of the main DICOM tags for this series.
-  *
-  * @param tag The name of the tag of interest ("Modality", "Manufacturer", "SeriesDate", "SeriesDescription", "SeriesInstanceUID"...).
-  * @param defaultValue The default value to be returned if this tag does not exist.
-  * @return The value of the tag.
-  **/
-  inline ::std::string Series::GetMainDicomTag(const ::std::string& tag, const ::std::string& defaultValue) const
-  {
-    const char* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, const char**, const char*, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(26);
-    char* error = function(pimpl_, &result_, tag.c_str(), defaultValue.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return std::string(result_);
-  }
-  /**
-  * @brief Test whether this series encodes a 3D image that can be downloaded from %Orthanc.
-  *
-  * Test whether this series encodes a 3D image that can be downloaded from %Orthanc.
-  *
-  * @return "true" if and only if this is a 3D image.
-  **/
-  inline bool Series::Is3DImage()
-  {
-    LAAW_INT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_INT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(27);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_ != 0;
-  }
-  /**
-  * @brief Get the width of the 3D image.
-  *
-  * Get the width of the 3D image (i.e. along the X-axis). This call is only valid if this series corresponds to a 3D image.
-  *
-  * @return The width.
-  **/
-  inline LAAW_UINT32 Series::GetWidth()
-  {
-    LAAW_UINT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_UINT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(28);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get the height of the 3D image.
-  *
-  * Get the height of the 3D image (i.e. along the Y-axis). This call is only valid if this series corresponds to a 3D image.
-  *
-  * @return The height.
-  **/
-  inline LAAW_UINT32 Series::GetHeight()
-  {
-    LAAW_UINT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_UINT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(29);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get the physical size of a voxel along the X-axis.
-  *
-  * Get the physical size of a voxel along the X-axis. This call is only valid if this series corresponds to a 3D image.
-  *
-  * @return The voxel size.
-  **/
-  inline float Series::GetVoxelSizeX()
-  {
-    float result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, float*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(30);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get the physical size of a voxel along the Y-axis.
-  *
-  * Get the physical size of a voxel along the Y-axis. This call is only valid if this series corresponds to a 3D image.
-  *
-  * @return The voxel size.
-  **/
-  inline float Series::GetVoxelSizeY()
-  {
-    float result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, float*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(31);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get the physical size of a voxel along the Z-axis.
-  *
-  * Get the physical size of a voxel along the Z-axis. This call is only valid if this series corresponds to a 3D image.
-  *
-  * @return The voxel size.
-  **/
-  inline float Series::GetVoxelSizeZ()
-  {
-    float result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, float*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(32);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get the slice thickness.
-  *
-  * Get the slice thickness. This call is only valid if this series corresponds to a 3D image.
-  *
-  * @return The slice thickness.
-  **/
-  inline float Series::GetSliceThickness()
-  {
-    float result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, float*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(33);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Load the 3D image into a memory buffer.
-  *
-  * Load the 3D image into a memory buffer. This call is only valid if this series corresponds to a 3D image. The "target" buffer must be wide enough to store all the voxels of the image.
-  *
-  * @param target The target memory buffer.
-  * @param format The memory layout of the voxels.
-  * @param lineStride The number of bytes between two lines in the target memory buffer.
-  * @param stackStride The number of bytes between two 2D slices in the target memory buffer.
-  **/
-  inline void Series::Load3DImage(void* target, ::Orthanc::PixelFormat format, LAAW_INT64 lineStride, LAAW_INT64 stackStride)
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, void*, LAAW_INT32, LAAW_INT64, LAAW_INT64);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(34);
-    char* error = function(pimpl_, target, format, lineStride, stackStride);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Load the 3D image into a memory buffer.
-  *
-  * Load the 3D image into a memory buffer. This call is only valid if this series corresponds to a 3D image. The "target" buffer must be wide enough to store all the voxels of the image. This method will also update a progress indicator to monitor the loading of the image.
-  *
-  * @param target The target memory buffer.
-  * @param format The memory layout of the voxels.
-  * @param lineStride The number of bytes between two lines in the target memory buffer.
-  * @param stackStride The number of bytes between two 2D slices in the target memory buffer.
-  * @param progress A pointer to a floating-point number that is continuously updated by the download threads to reflect the percentage of completion (between 0 and 1). This value can be read from a separate thread.
-  **/
-  inline void Series::Load3DImage(void* target, ::Orthanc::PixelFormat format, LAAW_INT64 lineStride, LAAW_INT64 stackStride, float progress[])
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, void*, LAAW_INT32, LAAW_INT64, LAAW_INT64, float*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(35);
-    char* error = function(pimpl_, target, format, lineStride, stackStride, progress);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-}
-
-namespace OrthancClient
-{
-  /**
-  * @brief Create a connection to some study.
-  *
-  * Create a connection to some study.
-  *
-  * @param connection The remote instance of %Orthanc.
-  * @param id The %Orthanc identifier of the study.
-  **/
-  inline Study::Study(::OrthancClient::OrthancConnection& connection, const ::std::string& id)
-  {
-    isReference_ = false;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void**, void*, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(36);
-    char* error = function(&pimpl_, connection.pimpl_, id.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Destructs the object.
-  *
-  * Destructs the object.
-  *
-  **/
-  inline Study::~Study()
-  {
-    if (isReference_) return;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(37);
-    char* error = function(pimpl_);
-    error = error;  // Remove warning about unused variable
-  }
-  /**
-  * @brief Reload the series of this study.
-  *
-  * This method will reload the list of the series of this study. Pay attention to the fact that the series that have been previously returned by GetSeries() will be invalidated.
-  *
-  **/
-  inline void Study::Reload()
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(38);
-    char* error = function(pimpl_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Return the number of series for this study.
-  *
-  * Return the number of series for this study.
-  *
-  * @return The number of series.
-  **/
-  inline LAAW_UINT32 Study::GetSeriesCount()
-  {
-    LAAW_UINT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_UINT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(39);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get some series of this study.
-  *
-  * This method will return an object that contains information about some series. The series are indexed by a number between 0 (inclusive) and the result of GetSeriesCount() (exclusive).
-  *
-  * @param index The index of the series of interest.
-  * @return The series.
-  **/
-  inline ::OrthancClient::Series Study::GetSeries(LAAW_UINT32 index)
-  {
-    void* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, void**, LAAW_UINT32);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(40);
-    char* error = function(pimpl_, &result_, index);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return ::OrthancClient::Series(result_);
-  }
-  /**
-  * @brief Get the %Orthanc identifier of this study.
-  *
-  * Get the %Orthanc identifier of this study.
-  *
-  * @return The identifier.
-  **/
-  inline ::std::string Study::GetId() const
-  {
-    const char* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, const char**);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(41);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return std::string(result_);
-  }
-  /**
-  * @brief Get the value of one of the main DICOM tags for this study.
-  *
-  * Get the value of one of the main DICOM tags for this study.
-  *
-  * @param tag The name of the tag of interest ("StudyDate", "StudyDescription", "StudyInstanceUID" or "StudyTime").
-  * @param defaultValue The default value to be returned if this tag does not exist.
-  * @return The value of the tag.
-  **/
-  inline ::std::string Study::GetMainDicomTag(const ::std::string& tag, const ::std::string& defaultValue) const
-  {
-    const char* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, const char**, const char*, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(42);
-    char* error = function(pimpl_, &result_, tag.c_str(), defaultValue.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return std::string(result_);
-  }
-}
-
-namespace OrthancClient
-{
-  /**
-  * @brief Create a connection to some image instance.
-  *
-  * Create a connection to some image instance.
-  *
-  * @param connection The remote instance of %Orthanc.
-  * @param id The %Orthanc identifier of the image instance.
-  **/
-  inline Instance::Instance(::OrthancClient::OrthancConnection& connection, const ::std::string& id)
-  {
-    isReference_ = false;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void**, void*, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(43);
-    char* error = function(&pimpl_, connection.pimpl_, id.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Destructs the object.
-  *
-  * Destructs the object.
-  *
-  **/
-  inline Instance::~Instance()
-  {
-    if (isReference_) return;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(44);
-    char* error = function(pimpl_);
-    error = error;  // Remove warning about unused variable
-  }
-  /**
-  * @brief Get the %Orthanc identifier of this identifier.
-  *
-  * Get the %Orthanc identifier of this identifier.
-  *
-  * @return The identifier.
-  **/
-  inline ::std::string Instance::GetId() const
-  {
-    const char* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, const char**);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(45);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return std::string(result_);
-  }
-  /**
-  * @brief Set the extraction mode for the 2D image corresponding to this instance.
-  *
-  * Set the extraction mode for the 2D image corresponding to this instance.
-  *
-  * @param mode The extraction mode.
-  **/
-  inline void Instance::SetImageExtractionMode(::Orthanc::ImageExtractionMode mode)
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_INT32);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(46);
-    char* error = function(pimpl_, mode);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Get the extraction mode for the 2D image corresponding to this instance.
-  *
-  * Get the extraction mode for the 2D image corresponding to this instance.
-  *
-  * @return The extraction mode.
-  **/
-  inline ::Orthanc::ImageExtractionMode Instance::GetImageExtractionMode() const
-  {
-    LAAW_INT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, LAAW_INT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(47);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return static_cast< ::Orthanc::ImageExtractionMode >(result_);
-  }
-  /**
-  * @brief Get the string value of some DICOM tag of this instance.
-  *
-  * Get the string value of some DICOM tag of this instance.
-  *
-  * @param tag The name of the tag of interest.
-  * @return The value of the tag.
-  **/
-  inline ::std::string Instance::GetTagAsString(const ::std::string& tag) const
-  {
-    const char* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, const char**, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(48);
-    char* error = function(pimpl_, &result_, tag.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return std::string(result_);
-  }
-  /**
-  * @brief Get the floating point value that is stored in some DICOM tag of this instance.
-  *
-  * Get the floating point value that is stored in some DICOM tag of this instance.
-  *
-  * @param tag The name of the tag of interest.
-  * @return The value of the tag.
-  **/
-  inline float Instance::GetTagAsFloat(const ::std::string& tag) const
-  {
-    float result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, float*, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(49);
-    char* error = function(pimpl_, &result_, tag.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get the integer value that is stored in some DICOM tag of this instance.
-  *
-  * Get the integer value that is stored in some DICOM tag of this instance.
-  *
-  * @param tag The name of the tag of interest.
-  * @return The value of the tag.
-  **/
-  inline LAAW_INT32 Instance::GetTagAsInt(const ::std::string& tag) const
-  {
-    LAAW_INT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, LAAW_INT32*, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(50);
-    char* error = function(pimpl_, &result_, tag.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get the width of the 2D image.
-  *
-  * Get the width of the 2D image that is encoded by this DICOM instance.
-  *
-  * @return The width.
-  **/
-  inline LAAW_UINT32 Instance::GetWidth()
-  {
-    LAAW_UINT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_UINT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(51);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get the height of the 2D image.
-  *
-  * Get the height of the 2D image that is encoded by this DICOM instance.
-  *
-  * @return The height.
-  **/
-  inline LAAW_UINT32 Instance::GetHeight()
-  {
-    LAAW_UINT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_UINT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(52);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get the number of bytes between two lines of the image (pitch).
-  *
-  * Get the number of bytes between two lines of the image in the memory buffer returned by GetBuffer(). This value depends on the extraction mode for the image.
-  *
-  * @return The pitch.
-  **/
-  inline LAAW_UINT32 Instance::GetPitch()
-  {
-    LAAW_UINT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_UINT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(53);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get the format of the pixels of the 2D image.
-  *
-  * Return the memory layout that is used for the 2D image that is encoded by this DICOM instance. This value depends on the extraction mode for the image.
-  *
-  * @return The pixel format.
-  **/
-  inline ::Orthanc::PixelFormat Instance::GetPixelFormat()
-  {
-    LAAW_INT32 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_INT32*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(54);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return static_cast< ::Orthanc::PixelFormat >(result_);
-  }
-  /**
-  * @brief Access the memory buffer in which the raw pixels of the 2D image are stored.
-  *
-  * Access the memory buffer in which the raw pixels of the 2D image are stored.
-  *
-  * @return A pointer to the memory buffer.
-  **/
-  inline const void* Instance::GetBuffer()
-  {
-    const void* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, const void**);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(55);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return reinterpret_cast< const void* >(result_);
-  }
-  /**
-  * @brief Access the memory buffer in which the raw pixels of some line of the 2D image are stored.
-  *
-  * Access the memory buffer in which the raw pixels of some line of the 2D image are stored.
-  *
-  * @param y The line of interest.
-  * @return A pointer to the memory buffer.
-  **/
-  inline const void* Instance::GetBuffer(LAAW_UINT32 y)
-  {
-    const void* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, const void**, LAAW_UINT32);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(56);
-    char* error = function(pimpl_, &result_, y);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return reinterpret_cast< const void* >(result_);
-  }
-  /**
-  * @brief Get the size of the DICOM file corresponding to this instance.
-  *
-  * Get the size of the DICOM file corresponding to this instance.
-  *
-  * @return The file size.
-  **/
-  inline LAAW_UINT64 Instance::GetDicomSize()
-  {
-    LAAW_UINT64 result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, LAAW_UINT64*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(57);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return result_;
-  }
-  /**
-  * @brief Get a pointer to the content of the DICOM file corresponding to this instance.
-  *
-  * Get a pointer to the content of the DICOM file corresponding to this instance.
-  *
-  * @return The DICOM file.
-  **/
-  inline const void* Instance::GetDicom()
-  {
-    const void* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, const void**);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(58);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return reinterpret_cast< const void* >(result_);
-  }
-  /**
-  * @brief Discard the downloaded 2D image, so as to make room in memory.
-  *
-  * Discard the downloaded 2D image, so as to make room in memory.
-  *
-  **/
-  inline void Instance::DiscardImage()
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(59);
-    char* error = function(pimpl_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Discard the downloaded DICOM file, so as to make room in memory.
-  *
-  * Discard the downloaded DICOM file, so as to make room in memory.
-  *
-  **/
-  inline void Instance::DiscardDicom()
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(60);
-    char* error = function(pimpl_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Load a raw tag from the DICOM file.
-  *
-  * Load a raw tag from the DICOM file.
-  *
-  * @param path The path to the tag of interest (e.g. "0020-000d").
-  **/
-  inline void Instance::LoadTagContent(const ::std::string& path)
-  {
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (void*, const char*);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(61);
-    char* error = function(pimpl_, path.c_str());
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-  }
-  /**
-  * @brief Return the value of the raw tag that was loaded by LoadContent.
-  *
-  * Return the value of the raw tag that was loaded by LoadContent.
-  *
-  * @return The tag value.
-  **/
-  inline ::std::string Instance::GetLoadedTagContent() const
-  {
-    const char* result_;
-    typedef char* (LAAW_ORTHANC_CLIENT_CALL_CONV* Function) (const void*, const char**);
-    Function function = (Function) ::OrthancClient::Internals::Library::GetInstance().GetFunction(62);
-    char* error = function(pimpl_, &result_);
-    ::OrthancClient::Internals::Library::GetInstance().ThrowExceptionIfNeeded(error);
-    return std::string(result_);
-  }
-}
-
--- a/OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows32.def	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-LIBRARY some.dll
-EXPORTS
-  _LAAW_EXTERNC_557aee7b61817292a0f31269d3c35db7@8 = LAAW_EXTERNC_557aee7b61817292a0f31269d3c35db7@8
-  _LAAW_EXTERNC_0b8dff0ce67f10954a49b059e348837e@8 = LAAW_EXTERNC_0b8dff0ce67f10954a49b059e348837e@8
-  _LAAW_EXTERNC_e05097c153f676e5a5ee54dcfc78256f@4 = LAAW_EXTERNC_e05097c153f676e5a5ee54dcfc78256f@4
-  _LAAW_EXTERNC_e840242bf58d17d3c1d722da09ce88e0@8 = LAAW_EXTERNC_e840242bf58d17d3c1d722da09ce88e0@8
-  _LAAW_EXTERNC_c9af31433001b5dfc012a552dc6d0050@8 = LAAW_EXTERNC_c9af31433001b5dfc012a552dc6d0050@8
-  _LAAW_EXTERNC_3fba4d6b818180a44cd1cae6046334dc@12 = LAAW_EXTERNC_3fba4d6b818180a44cd1cae6046334dc@12
-  _LAAW_EXTERNC_aeb20dc75b9246188db857317e5e0ce7@8 = LAAW_EXTERNC_aeb20dc75b9246188db857317e5e0ce7@8
-  _LAAW_EXTERNC_62689803d9871e4d9c51a648640b320b@8 = LAAW_EXTERNC_62689803d9871e4d9c51a648640b320b@8
-  _LAAW_EXTERNC_2fb64c9e5a67eccd413b0e913469a421@16 = LAAW_EXTERNC_2fb64c9e5a67eccd413b0e913469a421@16
-  _LAAW_EXTERNC_1f1acb322ea4d0aad65172824607673c@8 = LAAW_EXTERNC_1f1acb322ea4d0aad65172824607673c@8
-  _LAAW_EXTERNC_f3fd272e4636f6a531aabb72ee01cd5b@16 = LAAW_EXTERNC_f3fd272e4636f6a531aabb72ee01cd5b@16
-  _LAAW_EXTERNC_12d3de0a96e9efb11136a9811bb9ed38@4 = LAAW_EXTERNC_12d3de0a96e9efb11136a9811bb9ed38@4
-  _LAAW_EXTERNC_f756172daf04516eec3a566adabb4335@4 = LAAW_EXTERNC_f756172daf04516eec3a566adabb4335@4
-  _LAAW_EXTERNC_ddb68763ec902a97d579666a73a20118@8 = LAAW_EXTERNC_ddb68763ec902a97d579666a73a20118@8
-  _LAAW_EXTERNC_fba3c68b4be7558dbc65f7ce1ab57d63@12 = LAAW_EXTERNC_fba3c68b4be7558dbc65f7ce1ab57d63@12
-  _LAAW_EXTERNC_b4ca99d958f843493e58d1ef967340e1@8 = LAAW_EXTERNC_b4ca99d958f843493e58d1ef967340e1@8
-  _LAAW_EXTERNC_78d5cc76d282437b6f93ec3b82c35701@16 = LAAW_EXTERNC_78d5cc76d282437b6f93ec3b82c35701@16
-  _LAAW_EXTERNC_6cf0d7268667f9b0aa4511bacf184919@12 = LAAW_EXTERNC_6cf0d7268667f9b0aa4511bacf184919@12
-  _LAAW_EXTERNC_7d81cd502ee27e859735d0ea7112b5a1@4 = LAAW_EXTERNC_7d81cd502ee27e859735d0ea7112b5a1@4
-  _LAAW_EXTERNC_48a2a1a9d68c047e22bfba23014643d2@4 = LAAW_EXTERNC_48a2a1a9d68c047e22bfba23014643d2@4
-  _LAAW_EXTERNC_852bf8296ca21c5fde5ec565cc10721d@8 = LAAW_EXTERNC_852bf8296ca21c5fde5ec565cc10721d@8
-  _LAAW_EXTERNC_efd04574e0779faa83df1f2d8f9888db@12 = LAAW_EXTERNC_efd04574e0779faa83df1f2d8f9888db@12
-  _LAAW_EXTERNC_736247ff5e8036dac38163da6f666ed5@8 = LAAW_EXTERNC_736247ff5e8036dac38163da6f666ed5@8
-  _LAAW_EXTERNC_d82d2598a7a73f4b6fcc0c09c25b08ca@8 = LAAW_EXTERNC_d82d2598a7a73f4b6fcc0c09c25b08ca@8
-  _LAAW_EXTERNC_88134b978f9acb2aecdadf54aeab3c64@16 = LAAW_EXTERNC_88134b978f9acb2aecdadf54aeab3c64@16
-  _LAAW_EXTERNC_152cb1b704c053d24b0dab7461ba6ea3@8 = LAAW_EXTERNC_152cb1b704c053d24b0dab7461ba6ea3@8
-  _LAAW_EXTERNC_eee03f337ec81d9f1783cd41e5238757@8 = LAAW_EXTERNC_eee03f337ec81d9f1783cd41e5238757@8
-  _LAAW_EXTERNC_006f08237bd7611636fc721baebfb4c5@8 = LAAW_EXTERNC_006f08237bd7611636fc721baebfb4c5@8
-  _LAAW_EXTERNC_b794f5cd3dad7d7b575dd1fd902afdd0@8 = LAAW_EXTERNC_b794f5cd3dad7d7b575dd1fd902afdd0@8
-  _LAAW_EXTERNC_8ee2e50dd9df8f66a3c1766090dd03ab@8 = LAAW_EXTERNC_8ee2e50dd9df8f66a3c1766090dd03ab@8
-  _LAAW_EXTERNC_046aed35bbe4751691f4c34cc249a61d@8 = LAAW_EXTERNC_046aed35bbe4751691f4c34cc249a61d@8
-  _LAAW_EXTERNC_2be452e7af5bf7dfd8c5021842674497@8 = LAAW_EXTERNC_2be452e7af5bf7dfd8c5021842674497@8
-  _LAAW_EXTERNC_4dcc7a0fd025efba251ac6e9b701c2c5@28 = LAAW_EXTERNC_4dcc7a0fd025efba251ac6e9b701c2c5@28
-  _LAAW_EXTERNC_b2601a161c24ad0a1d3586246f87452c@32 = LAAW_EXTERNC_b2601a161c24ad0a1d3586246f87452c@32
-  _LAAW_EXTERNC_193599b9e345384fcdfcd47c29c55342@12 = LAAW_EXTERNC_193599b9e345384fcdfcd47c29c55342@12
-  _LAAW_EXTERNC_7c97f17063a357d38c5fab1136ad12a0@4 = LAAW_EXTERNC_7c97f17063a357d38c5fab1136ad12a0@4
-  _LAAW_EXTERNC_e65b20b7e0170b67544cd6664a4639b7@4 = LAAW_EXTERNC_e65b20b7e0170b67544cd6664a4639b7@4
-  _LAAW_EXTERNC_470e981b0e41f17231ba0ae6f3033321@8 = LAAW_EXTERNC_470e981b0e41f17231ba0ae6f3033321@8
-  _LAAW_EXTERNC_04cefd138b6ea15ad909858f2a0a8f05@12 = LAAW_EXTERNC_04cefd138b6ea15ad909858f2a0a8f05@12
-  _LAAW_EXTERNC_aee5b1f6f0c082f2c3b0986f9f6a18c7@8 = LAAW_EXTERNC_aee5b1f6f0c082f2c3b0986f9f6a18c7@8
-  _LAAW_EXTERNC_93965682bace75491413e1f0b8d5a654@16 = LAAW_EXTERNC_93965682bace75491413e1f0b8d5a654@16
-  _LAAW_EXTERNC_b01c6003238eb46c8db5dc823d7ca678@12 = LAAW_EXTERNC_b01c6003238eb46c8db5dc823d7ca678@12
-  _LAAW_EXTERNC_0147007fb99bad8cd95a139ec8795376@4 = LAAW_EXTERNC_0147007fb99bad8cd95a139ec8795376@4
-  _LAAW_EXTERNC_236ee8b403bc99535a8a4695c0cd45cb@8 = LAAW_EXTERNC_236ee8b403bc99535a8a4695c0cd45cb@8
-  _LAAW_EXTERNC_2a437b7aba6bb01e81113835be8f0146@8 = LAAW_EXTERNC_2a437b7aba6bb01e81113835be8f0146@8
-  _LAAW_EXTERNC_2bcbcb850934ae0bb4c6f0cc940e6cda@8 = LAAW_EXTERNC_2bcbcb850934ae0bb4c6f0cc940e6cda@8
-  _LAAW_EXTERNC_8d415c3a78a48e7e61d9fd24e7c79484@12 = LAAW_EXTERNC_8d415c3a78a48e7e61d9fd24e7c79484@12
-  _LAAW_EXTERNC_70d2f8398bbc63b5f792b69b4ad5fecb@12 = LAAW_EXTERNC_70d2f8398bbc63b5f792b69b4ad5fecb@12
-  _LAAW_EXTERNC_1729a067d902771517388eedd7346b23@12 = LAAW_EXTERNC_1729a067d902771517388eedd7346b23@12
-  _LAAW_EXTERNC_72e2aeee66cd3abd8ab7e987321c3745@8 = LAAW_EXTERNC_72e2aeee66cd3abd8ab7e987321c3745@8
-  _LAAW_EXTERNC_1ea3df5a1ac1a1a687fe7325adddb6f0@8 = LAAW_EXTERNC_1ea3df5a1ac1a1a687fe7325adddb6f0@8
-  _LAAW_EXTERNC_99b4f370e4f532d8b763e2cb49db92f8@8 = LAAW_EXTERNC_99b4f370e4f532d8b763e2cb49db92f8@8
-  _LAAW_EXTERNC_c41c742b68617f1c0590577a0a5ebc0c@8 = LAAW_EXTERNC_c41c742b68617f1c0590577a0a5ebc0c@8
-  _LAAW_EXTERNC_142dd2feba0fc1d262bbd0baeb441a8b@8 = LAAW_EXTERNC_142dd2feba0fc1d262bbd0baeb441a8b@8
-  _LAAW_EXTERNC_5f5c9f81a4dff8daa6c359f1d0488fef@12 = LAAW_EXTERNC_5f5c9f81a4dff8daa6c359f1d0488fef@12
-  _LAAW_EXTERNC_9ca979fffd08fa256306d4e68d8b0e91@8 = LAAW_EXTERNC_9ca979fffd08fa256306d4e68d8b0e91@8
-  _LAAW_EXTERNC_6f2d77a26edc91c28d89408dbc3c271e@8 = LAAW_EXTERNC_6f2d77a26edc91c28d89408dbc3c271e@8
-  _LAAW_EXTERNC_c0f494b80d4ff8b232df7a75baa0700a@4 = LAAW_EXTERNC_c0f494b80d4ff8b232df7a75baa0700a@4
-  _LAAW_EXTERNC_d604f44bd5195e082e745e9cbc164f4c@4 = LAAW_EXTERNC_d604f44bd5195e082e745e9cbc164f4c@4
-  _LAAW_EXTERNC_1710299d1c5f3b1f2b7cf3962deebbfd@8 = LAAW_EXTERNC_1710299d1c5f3b1f2b7cf3962deebbfd@8
-  _LAAW_EXTERNC_bb55aaf772ddceaadee36f4e54136bcb@8 = LAAW_EXTERNC_bb55aaf772ddceaadee36f4e54136bcb@8
-  _LAAW_EXTERNC_6c5ad02f91b583e29cebd0bd319ce21d@12 = LAAW_EXTERNC_6c5ad02f91b583e29cebd0bd319ce21d@12
-  _LAAW_EXTERNC_4068241c44a9c1367fe0e57be523f207@4 = LAAW_EXTERNC_4068241c44a9c1367fe0e57be523f207@4
-  _LAAW_EXTERNC_GetDescription@0 = LAAW_EXTERNC_GetDescription@0
-  _LAAW_EXTERNC_GetCompany@0 = LAAW_EXTERNC_GetCompany@0
-  _LAAW_EXTERNC_GetProduct@0 = LAAW_EXTERNC_GetProduct@0
-  _LAAW_EXTERNC_GetCopyright@0 = LAAW_EXTERNC_GetCopyright@0
-  _LAAW_EXTERNC_GetVersion@0 = LAAW_EXTERNC_GetVersion@0
-  _LAAW_EXTERNC_GetFileVersion@0 = LAAW_EXTERNC_GetFileVersion@0
-  _LAAW_EXTERNC_GetFullVersion@0 = LAAW_EXTERNC_GetFullVersion@0
-  _LAAW_EXTERNC_FreeString@4 = LAAW_EXTERNC_FreeString@4
--- a/OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows32.rc	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-#include <winver.h>
-
-VS_VERSION_INFO VERSIONINFO
-   FILEVERSION 0,8,0,6
-   PRODUCTVERSION 0,8,0,0
-   FILEOS VOS_NT_WINDOWS32
-   FILETYPE VFT_DLL
-   BEGIN
-      BLOCK "StringFileInfo"
-      BEGIN
-         BLOCK "040904E4"
-         BEGIN
-            VALUE "Comments", "Release 0.8.6"
-            VALUE "CompanyName", "University Hospital of Liege"
-            VALUE "FileDescription", "Native client to the REST API of Orthanc"
-            VALUE "FileVersion", "0.8.0.6"
-            VALUE "InternalName", "OrthancClient"
-            VALUE "LegalCopyright", "(c) 2012-2015, Sebastien Jodogne, University Hospital of Liege"
-            VALUE "LegalTrademarks", "Licensing information is available at http://www.orthanc-server.com/"
-            VALUE "OriginalFilename", "OrthancClient_Windows32.dll"
-            VALUE "ProductName", "OrthancClient"
-            VALUE "ProductVersion", "0.8"
-         END
-      END
-
-      BLOCK "VarFileInfo"
-      BEGIN
-        VALUE "Translation", 0x409, 1252  // U.S. English
-      END
-   END
--- a/OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows64.def	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-LIBRARY some.dll
-EXPORTS
-  LAAW_EXTERNC_557aee7b61817292a0f31269d3c35db7
-  LAAW_EXTERNC_0b8dff0ce67f10954a49b059e348837e
-  LAAW_EXTERNC_e05097c153f676e5a5ee54dcfc78256f
-  LAAW_EXTERNC_e840242bf58d17d3c1d722da09ce88e0
-  LAAW_EXTERNC_c9af31433001b5dfc012a552dc6d0050
-  LAAW_EXTERNC_3fba4d6b818180a44cd1cae6046334dc
-  LAAW_EXTERNC_aeb20dc75b9246188db857317e5e0ce7
-  LAAW_EXTERNC_62689803d9871e4d9c51a648640b320b
-  LAAW_EXTERNC_2fb64c9e5a67eccd413b0e913469a421
-  LAAW_EXTERNC_1f1acb322ea4d0aad65172824607673c
-  LAAW_EXTERNC_f3fd272e4636f6a531aabb72ee01cd5b
-  LAAW_EXTERNC_12d3de0a96e9efb11136a9811bb9ed38
-  LAAW_EXTERNC_f756172daf04516eec3a566adabb4335
-  LAAW_EXTERNC_ddb68763ec902a97d579666a73a20118
-  LAAW_EXTERNC_fba3c68b4be7558dbc65f7ce1ab57d63
-  LAAW_EXTERNC_b4ca99d958f843493e58d1ef967340e1
-  LAAW_EXTERNC_78d5cc76d282437b6f93ec3b82c35701
-  LAAW_EXTERNC_6cf0d7268667f9b0aa4511bacf184919
-  LAAW_EXTERNC_7d81cd502ee27e859735d0ea7112b5a1
-  LAAW_EXTERNC_48a2a1a9d68c047e22bfba23014643d2
-  LAAW_EXTERNC_852bf8296ca21c5fde5ec565cc10721d
-  LAAW_EXTERNC_efd04574e0779faa83df1f2d8f9888db
-  LAAW_EXTERNC_736247ff5e8036dac38163da6f666ed5
-  LAAW_EXTERNC_d82d2598a7a73f4b6fcc0c09c25b08ca
-  LAAW_EXTERNC_88134b978f9acb2aecdadf54aeab3c64
-  LAAW_EXTERNC_152cb1b704c053d24b0dab7461ba6ea3
-  LAAW_EXTERNC_eee03f337ec81d9f1783cd41e5238757
-  LAAW_EXTERNC_006f08237bd7611636fc721baebfb4c5
-  LAAW_EXTERNC_b794f5cd3dad7d7b575dd1fd902afdd0
-  LAAW_EXTERNC_8ee2e50dd9df8f66a3c1766090dd03ab
-  LAAW_EXTERNC_046aed35bbe4751691f4c34cc249a61d
-  LAAW_EXTERNC_2be452e7af5bf7dfd8c5021842674497
-  LAAW_EXTERNC_4dcc7a0fd025efba251ac6e9b701c2c5
-  LAAW_EXTERNC_b2601a161c24ad0a1d3586246f87452c
-  LAAW_EXTERNC_193599b9e345384fcdfcd47c29c55342
-  LAAW_EXTERNC_7c97f17063a357d38c5fab1136ad12a0
-  LAAW_EXTERNC_e65b20b7e0170b67544cd6664a4639b7
-  LAAW_EXTERNC_470e981b0e41f17231ba0ae6f3033321
-  LAAW_EXTERNC_04cefd138b6ea15ad909858f2a0a8f05
-  LAAW_EXTERNC_aee5b1f6f0c082f2c3b0986f9f6a18c7
-  LAAW_EXTERNC_93965682bace75491413e1f0b8d5a654
-  LAAW_EXTERNC_b01c6003238eb46c8db5dc823d7ca678
-  LAAW_EXTERNC_0147007fb99bad8cd95a139ec8795376
-  LAAW_EXTERNC_236ee8b403bc99535a8a4695c0cd45cb
-  LAAW_EXTERNC_2a437b7aba6bb01e81113835be8f0146
-  LAAW_EXTERNC_2bcbcb850934ae0bb4c6f0cc940e6cda
-  LAAW_EXTERNC_8d415c3a78a48e7e61d9fd24e7c79484
-  LAAW_EXTERNC_70d2f8398bbc63b5f792b69b4ad5fecb
-  LAAW_EXTERNC_1729a067d902771517388eedd7346b23
-  LAAW_EXTERNC_72e2aeee66cd3abd8ab7e987321c3745
-  LAAW_EXTERNC_1ea3df5a1ac1a1a687fe7325adddb6f0
-  LAAW_EXTERNC_99b4f370e4f532d8b763e2cb49db92f8
-  LAAW_EXTERNC_c41c742b68617f1c0590577a0a5ebc0c
-  LAAW_EXTERNC_142dd2feba0fc1d262bbd0baeb441a8b
-  LAAW_EXTERNC_5f5c9f81a4dff8daa6c359f1d0488fef
-  LAAW_EXTERNC_9ca979fffd08fa256306d4e68d8b0e91
-  LAAW_EXTERNC_6f2d77a26edc91c28d89408dbc3c271e
-  LAAW_EXTERNC_c0f494b80d4ff8b232df7a75baa0700a
-  LAAW_EXTERNC_d604f44bd5195e082e745e9cbc164f4c
-  LAAW_EXTERNC_1710299d1c5f3b1f2b7cf3962deebbfd
-  LAAW_EXTERNC_bb55aaf772ddceaadee36f4e54136bcb
-  LAAW_EXTERNC_6c5ad02f91b583e29cebd0bd319ce21d
-  LAAW_EXTERNC_4068241c44a9c1367fe0e57be523f207
-  LAAW_EXTERNC_GetDescription
-  LAAW_EXTERNC_GetCompany
-  LAAW_EXTERNC_GetProduct
-  LAAW_EXTERNC_GetCopyright
-  LAAW_EXTERNC_GetVersion
-  LAAW_EXTERNC_GetFileVersion
-  LAAW_EXTERNC_GetFullVersion
-  LAAW_EXTERNC_FreeString
--- a/OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows64.rc	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-#include <winver.h>
-
-VS_VERSION_INFO VERSIONINFO
-   FILEVERSION 0,8,0,6
-   PRODUCTVERSION 0,8,0,0
-   FILEOS VOS_NT_WINDOWS32
-   FILETYPE VFT_DLL
-   BEGIN
-      BLOCK "StringFileInfo"
-      BEGIN
-         BLOCK "040904E4"
-         BEGIN
-            VALUE "Comments", "Release 0.8.6"
-            VALUE "CompanyName", "University Hospital of Liege"
-            VALUE "FileDescription", "Native client to the REST API of Orthanc"
-            VALUE "FileVersion", "0.8.0.6"
-            VALUE "InternalName", "OrthancClient"
-            VALUE "LegalCopyright", "(c) 2012-2015, Sebastien Jodogne, University Hospital of Liege"
-            VALUE "LegalTrademarks", "Licensing information is available at http://www.orthanc-server.com/"
-            VALUE "OriginalFilename", "OrthancClient_Windows64.dll"
-            VALUE "ProductName", "OrthancClient"
-            VALUE "ProductVersion", "0.8"
-         END
-      END
-
-      BLOCK "VarFileInfo"
-      BEGIN
-        VALUE "Translation", 0x409, 1252  // U.S. English
-      END
-   END
--- a/OrthancCppClient/SharedLibrary/ConfigurationCpp.json	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-{
-  "InternalsNamespace" : [ "OrthancClient", "Internals" ],
-  "PublicNamespace" : [ "OrthancClient" ],
-  "ExceptionClassName" : "OrthancClientException"
-}
--- a/OrthancCppClient/SharedLibrary/Generate.sh	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-set -e
-
-mkdir -p AUTOGENERATED
-LAAW_ROOT=~/Subversion/Jomago/Src/Labo/Laaw
-
-${LAAW_ROOT}/Parser/Build/LaawParser.exe AUTOGENERATED/CodeModelRaw.json ../OrthancConnection.h -I`pwd`/../../s/jsoncpp-src-0.6.0-rc2/include -fms-extensions
-python ${LAAW_ROOT}/Generators/CodeModelPostProcessing.py AUTOGENERATED/CodeModel.json AUTOGENERATED/CodeModelRaw.json Product.json
-python ${LAAW_ROOT}/Generators/GenerateWrapperCpp.py AUTOGENERATED/OrthancCppClient.h AUTOGENERATED/CodeModel.json Product.json ConfigurationCpp.json
-python ${LAAW_ROOT}/Generators/GenerateExternC.py AUTOGENERATED/ExternC.cpp AUTOGENERATED/CodeModel.json Product.json
-python ${LAAW_ROOT}/Generators/GenerateWindows32Def.py AUTOGENERATED/Windows32.def AUTOGENERATED/CodeModel.json
-python ${LAAW_ROOT}/Generators/GenerateWindows64Def.py AUTOGENERATED/Windows64.def AUTOGENERATED/CodeModel.json
-python ${LAAW_ROOT}/Generators/ApplyProductSubstitutions.py AUTOGENERATED/Windows32.rc ${LAAW_ROOT}/Resources/DllResources.rc.mustache Product.json PLATFORM_SUFFIX "_Windows32"
-python ${LAAW_ROOT}/Generators/ApplyProductSubstitutions.py AUTOGENERATED/Windows64.rc ${LAAW_ROOT}/Resources/DllResources.rc.mustache Product.json PLATFORM_SUFFIX "_Windows64"
--- a/OrthancCppClient/SharedLibrary/Laaw/VersionScript.map	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-# This is a version-script
-
-{
-global:
-  LAAW_EXTERNC_*;
-
-local:
-  *;
-};
--- a/OrthancCppClient/SharedLibrary/Laaw/laaw/laaw-exports.h	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/**
- * Laaw - Lightweight, Automated API Wrapper
- * Copyright (C) 2010-2013 Jomago - Alain Mazy, Benjamin Golinvaux,
- * Sebastien Jodogne
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#pragma once
-
-/********************************************************************
- ** Windows target
- ********************************************************************/
-
-#if defined _WIN32
-
-#include <windows.h>
-
-#if defined(__GNUC__)
-// This is Mingw
-#define LAAW_EXPORT_DLL_API  // The exports are handled by the .DEF file
-#else
-// This is MSVC
-#define LAAW_EXPORT_DLL_API __declspec(dllexport)
-#endif
-
-#ifdef _M_X64
-// 64 bits target
-#define LAAW_CALL_CONVENTION
-#else
-// 32 bits target
-#define LAAW_CALL_CONVENTION  __stdcall  // Use the StdCall in Windows32 (for VB6)
-#endif
-
-
-/********************************************************************
- ** Linux target
- ********************************************************************/
-
-#elif defined(__linux)
-
-// Try the gcc visibility support
-// http://gcc.gnu.org/wiki/Visibility
-#if ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
-#define LAAW_EXPORT_DLL_API  __attribute__ ((visibility("default")))
-#define LAAW_CALL_CONVENTION
-#else
-#error No support for visibility in your version of GCC
-#endif
-
-
-/********************************************************************
- ** Max OS X target
- ********************************************************************/
-
-#else
-
-#define LAAW_EXPORT_DLL_API  __attribute__ ((visibility("default")))
-#define LAAW_CALL_CONVENTION
-
-#endif
--- a/OrthancCppClient/SharedLibrary/Laaw/laaw/laaw.h	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-/**
- * Laaw - Lightweight, Automated API Wrapper
- * Copyright (C) 2010-2013 Jomago - Alain Mazy, Benjamin Golinvaux,
- * Sebastien Jodogne
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#pragma once
-
-#include "laaw-exports.h"
-#include <stddef.h>
-#include <string>
-
-#if (LAAW_PARSING == 1)
-
-#define LAAW_API   __attribute__((deprecated("")))
-#define LAAW_API_INTERNAL  __attribute__((deprecated("")))
-#define LAAW_API_OVERLOAD(name)  __attribute__((deprecated("")))
-#define LAAW_API_PROPERTY  __attribute__((deprecated("")))
-#define LAAW_API_STATIC_CLASS  __attribute__((deprecated("")))
-#define LAAW_API_CUSTOM(name, value)  __attribute__((deprecated("")))
-
-#else
-
-#define LAAW_API
-#define LAAW_API_INTERNAL
-#define LAAW_API_OVERLOAD(name)
-#define LAAW_API_PROPERTY
-#define LAAW_API_STATIC_CLASS
-#define LAAW_API_CUSTOM(name, value)
-
-#endif
-
-
-namespace Laaw
-{
-  /**
-   * This is the base class from which all the public exceptions in
-   * the SDK should derive.
-   **/
-  class LaawException
-  {
-  private:
-    std::string what_;
-
-  public:
-    LaawException()
-    {
-    }
-
-    LaawException(const std::string& what) : what_(what)
-    {
-    }
-
-    LaawException(const char* what) : what_(what)
-    {
-    }
-
-    virtual const char* What() const
-    {
-      return what_.c_str();
-    }
-  };
-}
--- a/OrthancCppClient/SharedLibrary/Product.json	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-{
-  "Product" : "OrthancClient",
-  "Description" : "Native client to the REST API of Orthanc",
-  "Company" : "University Hospital of Liege",
-  "Copyright" : "(c) 2012-2015, Sebastien Jodogne, University Hospital of Liege",
-  "Legal" : "Licensing information is available at http://www.orthanc-server.com/",
-  "Version" : "0.8.6"
-}
--- a/OrthancCppClient/SharedLibrary/SharedLibrary.cpp	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-
-#include "../../Core/HttpClient.h"
-#include "../OrthancConnection.h"
-
-
-class SharedLibrarySingleton
-{
-public:
-  SharedLibrarySingleton()
-  {
-    Orthanc::HttpClient::GlobalInitialize();
-  }
-
-  ~SharedLibrarySingleton()
-  {
-    Orthanc::HttpClient::GlobalFinalize();
-  }
-};
-
-
-static SharedLibrarySingleton  singleton_;
-
-
-#include "AUTOGENERATED/ExternC.cpp"
--- a/OrthancCppClient/Study.cpp	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#include "../Core/PrecompiledHeaders.h"
-#include "Study.h"
-
-#include "OrthancConnection.h"
-
-namespace OrthancClient
-{
-  void Study::ReadStudy()
-  {
-    Orthanc::HttpClient client(connection_.GetHttpClient());
-    client.SetUrl(std::string(connection_.GetOrthancUrl()) + "/studies/" + id_);
-
-    Json::Value v;
-    if (!client.Apply(study_))
-    {
-      throw OrthancClientException(Orthanc::ErrorCode_NetworkProtocol);
-    }
-  }
-
-  Orthanc::IDynamicObject* Study::GetFillerItem(size_t index)
-  {
-    Json::Value::ArrayIndex tmp = static_cast<Json::Value::ArrayIndex>(index);
-    std::string id = study_["Series"][tmp].asString();
-    return new Series(connection_, id.c_str());
-  }
-
-  Study::Study(const OrthancConnection& connection,
-               const char* id) :
-    connection_(connection),
-    id_(id),
-    series_(*this)
-  {
-    series_.SetThreadCount(connection.GetThreadCount());
-    ReadStudy();
-  }
-
-  const char* Study::GetMainDicomTag(const char* tag, const char* defaultValue) const
-  {
-    if (study_["MainDicomTags"].isMember(tag))
-    {
-      return study_["MainDicomTags"][tag].asCString();
-    }
-    else
-    {
-      return defaultValue;
-    }
-  }
-}
--- a/OrthancCppClient/Study.h	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#pragma once
-
-#include "Series.h"
-
-namespace OrthancClient
-{
-  /**
-   * {summary}{Connection to a study stored in %Orthanc.}
-   * {description}{This class encapsulates a connection to a study
-   * from a remote instance of %Orthanc.}
-   **/
-  class LAAW_API Study : 
-    public Orthanc::IDynamicObject, 
-    private Orthanc::ArrayFilledByThreads::IFiller
-  {
-  private:
-    const OrthancConnection& connection_;
-    std::string id_;
-    Json::Value study_;
-    Orthanc::ArrayFilledByThreads  series_;
-
-    void ReadStudy();
-
-    virtual size_t GetFillerSize()
-    {
-      return study_["Series"].size();
-    }
-
-    virtual Orthanc::IDynamicObject* GetFillerItem(size_t index);
-
-  public:
-    /**
-     * {summary}{Create a connection to some study.}
-     * {param}{connection The remote instance of %Orthanc.}
-     * {param}{id The %Orthanc identifier of the study.}
-     **/
-    Study(const OrthancConnection& connection,
-          const char* id);
-
-    /**
-     * {summary}{Reload the series of this study.}
-     * {description}{This method will reload the list of the series of this study. Pay attention to the fact that the series that have been previously returned by GetSeries() will be invalidated.}
-     **/
-    void Reload()
-    {
-      series_.Reload();
-    }
-
-    /**
-     * {summary}{Return the number of series for this study.}
-     * {returns}{The number of series.}
-     **/
-    uint32_t GetSeriesCount()
-    {
-      return series_.GetSize();
-    }
-
-    /**
-     * {summary}{Get some series of this study.}
-     * {description}{This method will return an object that contains information about some series. The series are indexed by a number between 0 (inclusive) and the result of GetSeriesCount() (exclusive).}
-     * {param}{index The index of the series of interest.}
-     * {returns}{The series.}
-     **/
-    Series& GetSeries(uint32_t index)
-    {
-      return dynamic_cast<Series&>(series_.GetItem(index));
-    }
-    
-    /**
-     * {summary}{Get the %Orthanc identifier of this study.}
-     * {returns}{The identifier.}
-     **/
-    const char* GetId() const
-    {
-      return id_.c_str();
-    }
-
-    /**
-     * {summary}{Get the value of one of the main DICOM tags for this study.}
-     * {param}{tag The name of the tag of interest ("StudyDate", "StudyDescription", "StudyInstanceUID" or "StudyTime").}
-     * {param}{defaultValue The default value to be returned if this tag does not exist.}
-     * {returns}{The value of the tag.}
-     **/
-    const char* GetMainDicomTag(const char* tag, 
-                                const char* defaultValue) const;
-  };
-}
--- a/Resources/OrthancClient.doxygen	Sat May 30 10:03:07 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1792 +0,0 @@
-# Doxyfile 1.8.1.2
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project.
-#
-# All text after a hash (#) is considered a comment and will be ignored.
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ").
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file
-# that follow. The default is UTF-8 which is also the encoding used for all
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-# iconv built into libc) for the transcoding. See
-# http://www.gnu.org/software/libiconv for the list of possible encodings.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or sequence of words) that should
-# identify the project. Note that if you do not use Doxywizard you need
-# to put quotes around the project name if it contains spaces.
-
-PROJECT_NAME           = "Orthanc Client"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
-PROJECT_NUMBER         =
-
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer
-# a quick idea about the purpose of the project. Keep the description short.
-
-PROJECT_BRIEF          = "Documentation of the client library of Orthanc"
-
-# With the PROJECT_LOGO tag one can specify an logo or icon that is
-# included in the documentation. The maximum height of the logo should not
-# exceed 55 pixels and the maximum width should not exceed 200 pixels.
-# Doxygen will copy the logo to the output directory.
-
-PROJECT_LOGO           = @CMAKE_SOURCE_DIR@/Resources/OrthancLogoDocumentation.png
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = OrthancClientDocumentation
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
-
-CREATE_SUBDIRS         = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
-# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
-# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
-# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
-# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF           = NO
-
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF       =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES        = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
-
-STRIP_FROM_PATH        =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful if your file system
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like regular Qt-style comments
-# (thus requiring an explicit @brief command for a brief description.)
-
-JAVADOC_AUTOBRIEF      = NO
-
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
-# interpret the first line (until the first dot) of a Qt-style
-# comment as the brief description. If set to NO, the comments
-# will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE               = 8
-
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                =
-
-# This tag can be used to specify a number of word-keyword mappings (TCL only).
-# A mapping has the form "name=value". For example adding
-# "class=itcl::class" will allow you to use the command class in the
-# itcl::class meaning.
-
-TCL_SUBST              =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for
-# Java. For instance, namespaces will be presented as packages, qualified
-# scopes will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources only. Doxygen will then generate output that is more tailored for
-# Fortran.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for
-# VHDL.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given extension.
-# Doxygen has a built-in mapping, but you can override or extend it using this
-# tag. The format is ext=language, where ext is a file extension, and language
-# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
-# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
-# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
-# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
-# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
-
-EXTENSION_MAPPING      =
-
-# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
-# comments according to the Markdown format, which allows for more readable
-# documentation. See http://daringfireball.net/projects/markdown/ for details.
-# The output of markdown processing is further processed by doxygen, so you
-# can mix doxygen, HTML, and XML commands with Markdown formatting.
-# Disable only in case of backward compatibilities issues.
-
-MARKDOWN_SUPPORT       = YES
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also makes the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-
-BUILTIN_STL_SUPPORT    = YES
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
-# Doxygen will parse them like normal C++ but will assume all classes use public
-# instead of private inheritance when no explicit protection keyword is present.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate getter
-# and setter methods for a property. Setting this option to YES (the default)
-# will make doxygen replace the get and set methods by a property in the
-# documentation. This will only work if the methods are indeed getting or
-# setting a simple type. If this is not the case, or you want to show the
-# methods anyway, you should set this option to NO.
-
-IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
-
-SUBGROUPING            = YES
-
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
-# unions are shown inside the group in which they are included (e.g. using
-# @ingroup) instead of on a separate page (for HTML and Man pages) or
-# section (for LaTeX and RTF).
-
-INLINE_GROUPED_CLASSES = NO
-
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
-# unions with only public data fields will be shown inline in the documentation
-# of the scope in which they are defined (i.e. file, namespace, or group
-# documentation), provided this scope is documented. If set to NO (the default),
-# structs, classes, and unions are shown on a separate page (for HTML and Man
-# pages) or section (for LaTeX and RTF).
-
-INLINE_SIMPLE_STRUCTS  = NO
-
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
-# is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically
-# be useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-# determine which symbols to keep in memory and which to flush to disk.
-# When the cache is full, less often used symbols will be written to disk.
-# For small to medium size projects (<1000 input files) the default value is
-# probably good enough. For larger projects a too small cache size can cause
-# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penalty.
-# If the system has enough physical memory increasing the cache will improve the
-# performance by keeping more symbols in memory. Note that the value works on
-# a logarithmic scale so increasing the size by one will roughly double the
-# memory usage. The cache size is given by this formula:
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
-
-SYMBOL_CACHE_SIZE      = 0
-
-# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
-# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
-# their name and scope. Since this can be an expensive process and often the
-# same symbol appear multiple times in the code, doxygen keeps a cache of
-# pre-resolved symbols. If the cache is too small doxygen will become slower.
-# If the cache is too large, memory is wasted. The cache size is given by this
-# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
-
-LOOKUP_CACHE_SIZE      = 0
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL            = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation.
-
-EXTRACT_PACKAGE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
-EXTRACT_STATIC         = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base
-# name of the file that contains the anonymous namespace. By default
-# anonymous namespaces are hidden.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS  = YES
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES       = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
-# will list include files with double quotes in the documentation
-# rather than with sharp brackets.
-
-FORCE_LOCAL_INCLUDES   = NO
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
-SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
-
-SORT_BRIEF_DOCS        = NO
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
-# will sort the (brief and detailed) documentation of class members so that
-# constructors and destructors are listed first. If set to NO (the default)
-# the constructors will appear in the respective orders defined by
-# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
-# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
-# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
-# hierarchy of group names into alphabetical order. If set to NO (the default)
-# the group names will appear in their defined order.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
-# do proper type resolution of all parameters of a function it will reject a
-# match between the prototype and the implementation of a member function even
-# if there is only one candidate or it is obvious which candidate to choose
-# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
-# will still accept a match between prototype and implementation in such cases.
-
-STRICT_PROTO_MATCHING  = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or macro consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and macros in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES        = YES
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
-# This will remove the Files entry from the Quick Index and from the
-# Folder Tree View (if specified). The default is YES.
-
-SHOW_FILES             = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
-# Namespaces page.
-# This will remove the Namespaces entry from the Quick Index
-# and from the Folder Tree View (if specified). The default is YES.
-
-SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER    =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-# by doxygen. The layout file controls the global structure of the generated
-# output files in an output format independent way. To create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option.
-# You can optionally specify a file name after the option, if omitted
-# DoxygenLayout.xml will be used as the name of the layout file.
-
-LAYOUT_FILE            =
-
-# The CITE_BIB_FILES tag can be used to specify one or more bib files
-# containing the references data. This must be a list of .bib files. The
-# .bib extension is automatically appended if omitted. Using this command
-# requires the bibtex tool to be installed. See also
-# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
-# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
-# feature you need bibtex and perl available in the search path.
-
-CITE_BIB_FILES         =
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
-WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR      = YES
-
-# The WARN_NO_PARAMDOC option can be enabled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
-
-WARN_NO_PARAMDOC       = YES
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
-WARN_LOGFILE           =
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
-
-INPUT                  = @CMAKE_SOURCE_DIR@/OrthancCppClient/SharedLibrary/AUTOGENERATED/OrthancCppClient.h
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-# also the default input encoding. Doxygen uses libiconv (or the iconv built
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
-# the list of possible encodings.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
-# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
-# *.f90 *.f *.for *.vhd *.vhdl
-
-FILE_PATTERNS          = *.h
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
-RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should be
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-# Note that relative paths are relative to the directory from which doxygen is
-# run.
-
-EXCLUDE                =
-
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-# directories that are symbolic links (a Unix file system feature) are excluded
-# from the input.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# AClass::ANamespace, ANamespace::*Test
-
-EXCLUDE_SYMBOLS        = OrthancClient::Internals
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
-EXAMPLE_PATH           =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
-EXAMPLE_PATTERNS       =
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
-
-IMAGE_PATH             =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output.
-# If FILTER_PATTERNS is specified, this tag will be
-# ignored.
-
-INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis.
-# Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match.
-# The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty or if
-# non of the patterns match the file name, INPUT_FILTER is applied.
-
-FILTER_PATTERNS        =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES    = NO
-
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
-# and it is also possible to disable source filtering for a specific pattern
-# using *.ext= (so without naming a filter). This option only has effect when
-# FILTER_SOURCE_FILES is enabled.
-
-FILTER_SOURCE_PATTERNS =
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C, C++ and Fortran comments will always remain visible.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES
-# then for each documented function all documented
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
-REFERENCES_RELATION    = NO
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.
-# Otherwise they will link to the documentation.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS       = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX     = YES
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          =
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT            = doc
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header. Note that when using a custom header you are responsible
-#  for the proper inclusion of any scripts and style sheets that doxygen
-# needs, which is dependent on the configuration options used.
-# It is advised to generate a default header using "doxygen -w html
-# header.html footer.html stylesheet.css YourConfigFile" and then modify
-# that header. Note that the header is subject to change so you typically
-# have to redo this when upgrading to a newer version of doxygen or when
-# changing the value of configuration settings such as GENERATE_TREEVIEW!
-
-HTML_HEADER            =
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
-HTML_FOOTER            =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# style sheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET        =
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the HTML output directory. Note
-# that these files will be copied to the base HTML output directory. Use the
-# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that
-# the files will be copied as-is; there are no commands or markers available.
-
-HTML_EXTRA_FILES       =
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
-# Doxygen will adjust the colors in the style sheet and background images
-# according to this color. Hue is specified as an angle on a colorwheel,
-# see http://en.wikipedia.org/wiki/Hue for more information.
-# For instance the value 0 represents red, 60 is yellow, 120 is green,
-# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
-# The allowed range is 0 to 359.
-
-HTML_COLORSTYLE_HUE    = 220
-
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
-# the colors in the HTML output. For a value of 0 the output will use
-# grayscales only. A value of 255 will produce the most vivid colors.
-
-HTML_COLORSTYLE_SAT    = 100
-
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
-# the luminance component of the colors in the HTML output. Values below
-# 100 gradually make the output lighter, whereas values above 100 make
-# the output darker. The value divided by 100 is the actual gamma applied,
-# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
-# and 100 does not change the gamma.
-
-HTML_COLORSTYLE_GAMMA  = 80
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting
-# this to NO can help when comparing the output of multiple runs.
-
-HTML_TIMESTAMP         = NO
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded.
-
-HTML_DYNAMIC_SECTIONS  = NO
-
-# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
-# entries shown in the various tree structured indices initially; the user
-# can expand and collapse entries dynamically later on. Doxygen will expand
-# the tree to such a level that at most the specified number of entries are
-# visible (unless a fully collapsed tree already exceeds this amount).
-# So setting the number of entries 1 will produce a full collapsed tree by
-# default. 0 is a special value representing an infinite number of entries
-# and will result in a full expanded tree by default.
-
-HTML_INDEX_NUM_ENTRIES = 100
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files
-# will be generated that can be used as input for Apple's Xcode 3
-# integrated development environment, introduced with OSX 10.5 (Leopard).
-# To create a documentation set, doxygen will generate a Makefile in the
-# HTML output directory. Running make will produce the docset in that
-# directory and running "make install" will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
-# it at startup.
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
-# for more information.
-
-GENERATE_DOCSET        = NO
-
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
-# feed. A documentation feed provides an umbrella under which multiple
-# documentation sets from a single provider (such as a company or product suite)
-# can be grouped.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
-# should uniquely identify the documentation set bundle. This should be a
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
-# will append .docset to the name.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
-# string, e.g. com.mycompany.MyDocSet.documentation.
-
-DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
-
-# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
-
-DOCSET_PUBLISHER_NAME  = Publisher
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
-
-CHM_FILE               =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION           =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file
-# content.
-
-CHM_INDEX_ENCODING     =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND             = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
-# that can be used as input for Qt's qhelpgenerator to generate a
-# Qt Compressed Help (.qch) of the generated HTML documentation.
-
-GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
-# be used to specify the file name of the resulting .qch file.
-# The path specified is relative to the HTML output folder.
-
-QCH_FILE               =
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating
-# Qt Help Project output. For more information please see
-# http://doc.trolltech.com/qthelpproject.html#namespace
-
-QHP_NAMESPACE          = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
-# Qt Help Project output. For more information please see
-# http://doc.trolltech.com/qthelpproject.html#virtual-folders
-
-QHP_VIRTUAL_FOLDER     = doc
-
-# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
-# add. For more information please see
-# http://doc.trolltech.com/qthelpproject.html#custom-filters
-
-QHP_CUST_FILTER_NAME   =
-
-# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see
-# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
-# Qt Help Project / Custom Filters</a>.
-
-QHP_CUST_FILTER_ATTRS  =
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's
-# filter section matches.
-# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
-# Qt Help Project / Filter Attributes</a>.
-
-QHP_SECT_FILTER_ATTRS  =
-
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
-# be used to specify the location of Qt's qhelpgenerator.
-# If non-empty doxygen will try to run qhelpgenerator on the generated
-# .qhp file.
-
-QHG_LOCATION           =
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
-#  will be generated, which together with the HTML files, form an Eclipse help
-# plugin. To install this plugin and make it available under the help contents
-# menu in Eclipse, the contents of the directory containing the HTML and XML
-# files needs to be copied into the plugins directory of eclipse. The name of
-# the directory within the plugins directory should be the same as
-# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
-# the help appears.
-
-GENERATE_ECLIPSEHELP   = NO
-
-# A unique identifier for the eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have
-# this name.
-
-ECLIPSE_DOC_ID         = org.doxygen.Project
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
-# at top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it. Since the tabs have the same information as the
-# navigation tree you can set this option to NO if you already set
-# GENERATE_TREEVIEW to YES.
-
-DISABLE_INDEX          = NO
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information.
-# If the tag value is set to YES, a side panel will be generated
-# containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
-# Windows users are probably better off using the HTML help feature.
-# Since the tree basically has the same information as the tab index you
-# could consider to set DISABLE_INDEX to NO when enabling this option.
-
-GENERATE_TREEVIEW      = NO
-
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
-# (range [0,1..20]) that doxygen will group on one line in the generated HTML
-# documentation. Note that a value of 0 will completely suppress the enum
-# values from appearing in the overview section.
-
-ENUM_VALUES_PER_LINE   = 1
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
-TREEVIEW_WIDTH         = 250
-
-# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
-# links to external symbols imported via tag files in a separate window.
-
-EXT_LINKS_IN_WINDOW    = NO
-
-# Use this tag to change the font size of Latex formulas included
-# as images in the HTML documentation. The default is 10. Note that
-# when you change the font size after a successful doxygen run you need
-# to manually remove any form_*.png images from the HTML output directory
-# to force them to be regenerated.
-
-FORMULA_FONTSIZE       = 10
-
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are
-# not supported properly for IE 6.0, but are supported on all modern browsers.
-# Note that when changing this option you need to delete any form_*.png files
-# in the HTML output before the changes have effect.
-
-FORMULA_TRANSPARENT    = YES
-
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
-# (see http://www.mathjax.org) which uses client side Javascript for the
-# rendering instead of using prerendered bitmaps. Use this if you do not
-# have LaTeX installed or if you want to formulas look prettier in the HTML
-# output. When enabled you may also need to install MathJax separately and
-# configure the path to it using the MATHJAX_RELPATH option.
-
-USE_MATHJAX            = NO
-
-# When MathJax is enabled you need to specify the location relative to the
-# HTML output directory using the MATHJAX_RELPATH option. The destination
-# directory should contain the MathJax.js script. For instance, if the mathjax
-# directory is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to
-# the MathJax Content Delivery Network so you can quickly see the result without
-# installing MathJax.
-# However, it is strongly recommended to install a local
-# copy of MathJax from http://www.mathjax.org before deployment.
-
-MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
-
-# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
-# names that should be enabled during MathJax rendering.
-
-MATHJAX_EXTENSIONS     =
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box
-# for the HTML output. The underlying search engine uses javascript
-# and DHTML and should work on any modern browser. Note that when using
-# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
-# (GENERATE_DOCSET) there is already a search function so this one should
-# typically be disabled. For large projects the javascript based search engine
-# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
-
-SEARCHENGINE           = NO
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a PHP enabled web server instead of at the web client
-# using Javascript. Doxygen will generate the search PHP script and index
-# file to put on the web server. The advantage of the server
-# based approach is that it scales better to large projects and allows
-# full text search. The disadvantages are that it is more difficult to setup
-# and does not have live searching capabilities.
-
-SERVER_BASED_SEARCH    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-# Note that when enabling USE_PDFLATEX this option is only used for
-# generating bitmaps for formulas in the HTML output, but not in the
-# Makefile that is written to the output directory.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, letter, legal and
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE             = a4
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
-# the generated latex document. The footer should contain everything after
-# the last chapter. If it is left blank doxygen will generate a
-# standard footer. Notice: only use this tag if you know what you are doing!
-
-LATEX_FOOTER           =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE        = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
-
-LATEX_HIDE_INDICES     = NO
-
-# If LATEX_SOURCE_CODE is set to YES then doxygen will include
-# source code with syntax highlighting in the LaTeX output.
-# Note that which sources are shown also depends on other settings
-# such as SOURCE_BROWSER.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
-# http://en.wikipedia.org/wiki/BibTeX for more info.
-
-LATEX_BIB_STYLE        = plain
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS         = NO
-
-# Load style sheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    =
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA             =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD                =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader.
-# This is useful
-# if you want to understand what is going on.
-# On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# pointed to by INCLUDE_PATH will be searched when a #include is found.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
-
-PREDEFINED             =
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition that
-# overrules the definition found in the source code.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all references to function-like macros
-# that are alone on a line, have an all uppercase name, and do not end with a
-# semicolon, because these will confuse the parser if not removed.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles. For each
-# tag file the location of the external documentation should be added. The
-# format of a tag file without this location is as follows:
-#
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-#
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths
-# or URLs. Note that each tag file must have a unique name (where the name does
-# NOT include the path). If a tag file is not located in the directory in which
-# doxygen is run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
-
-EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option also works with HAVE_DOT disabled, but it is recommended to
-# install and use dot, since it yields more powerful graphs.
-
-CLASS_DIAGRAMS         = YES
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
-# allowed to run in parallel. When set to 0 (the default) doxygen will
-# base this on the number of processors available in the system. You can set it
-# explicitly to a value larger than 0 to get control over the balance
-# between CPU load and processing speed.
-
-DOT_NUM_THREADS        = 0
-
-# By default doxygen will use the Helvetica font for all dot files that
-# doxygen generates. When you want a differently looking font you can specify
-# the font name using DOT_FONTNAME. You need to make sure dot is able to find
-# the font, which can be done by putting it in a standard location or by setting
-# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
-# directory containing the font.
-
-DOT_FONTNAME           = Helvetica
-
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
-# The default size is 10pt.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the Helvetica font.
-# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
-# set the path where dot can find it.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside
-# the class node. If there are many fields or methods and many nodes the
-# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
-# threshold limits the number of items for each type to make the size more
-# managable. Set this to 0 for no limit. Note that the threshold may be
-# exceeded by 50% before the limit is enforced.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
-INCLUDE_GRAPH          = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then
-# doxygen will generate a call dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable call graphs
-# for selected functions only using the \callgraph command.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
-# doxygen will generate a caller dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable caller
-# graphs for selected functions only using the \callergraph command.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will generate a graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are svg, png, jpg, or gif.
-# If left blank png will be used. If you choose svg you need to set
-# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
-# visible in IE 9+ (other browsers do not have this requirement).
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-# Note that this requires a modern browser other than Internet Explorer.
-# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
-# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
-# visible. Older versions of IE do not have SVG support.
-
-INTERACTIVE_SVG        = NO
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the
-# \mscfile command).
-
-MSCFILE_DIRS           =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-# nodes that will be shown in the graph. If the number of nodes in a graph
-# becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen if the
-# number of direct children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-
-DOT_GRAPH_MAX_NODES    = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes
-# that lay further from the root node will be omitted. Note that setting this
-# option to 1 or 2 may greatly reduce the computation time needed for large
-# code bases. Also note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not
-# seem to support this out of the box. Warning: Depending on the platform used,
-# enabling this option may lead to badly anti-aliased labels on the edges of
-# a graph (i.e. they become hard to read).
-
-DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS      = YES
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
-
-DOT_CLEANUP            = YES
--- a/UnitTestsSources/LuaTests.cpp	Sat May 30 10:03:07 2015 +0200
+++ b/UnitTestsSources/LuaTests.cpp	Mon Jun 01 11:15:55 2015 +0200
@@ -244,7 +244,7 @@
 
 #if UNIT_TESTS_WITH_HTTP_CONNEXIONS == 1  
   lua.Execute("JSON = loadstring(HttpGet('http://www.montefiore.ulg.ac.be/~jodogne/Orthanc/ThirdPartyDownloads/JSON.lua')) ()");
-  const std::string url("http://orthanc.googlecode.com/hg/OrthancCppClient/SharedLibrary/Product.json");
+  const std::string url("http://www.montefiore.ulg.ac.be/~jodogne/Orthanc/ThirdPartyDownloads/Product.json");
 #endif
 
   std::string s;
--- a/UnitTestsSources/MultiThreadingTests.cpp	Sat May 30 10:03:07 2015 +0200
+++ b/UnitTestsSources/MultiThreadingTests.cpp	Mon Jun 01 11:15:55 2015 +0200
@@ -38,17 +38,15 @@
 
 #include "../Core/OrthancException.h"
 #include "../Core/Toolbox.h"
-#include "../Core/MultiThreading/ArrayFilledByThreads.h"
 #include "../Core/MultiThreading/Locker.h"
 #include "../Core/MultiThreading/Mutex.h"
 #include "../Core/MultiThreading/ReaderWriterLock.h"
-#include "../Core/MultiThreading/ThreadedCommandProcessor.h"
 
 using namespace Orthanc;
 
 namespace
 {
-  class DynamicInteger : public ICommand
+  class DynamicInteger : public IDynamicObject
   {
   private:
     int value_;
@@ -64,56 +62,10 @@
     {
       return value_;
     }
-
-    virtual bool Execute()
-    {
-      static boost::mutex mutex;
-      boost::mutex::scoped_lock lock(mutex);
-      target_.insert(value_);
-      return true;
-    }
-  };
-
-  class MyFiller : public ArrayFilledByThreads::IFiller
-  {
-  private:
-    int size_;
-    unsigned int created_;
-    std::set<int> set_;
-
-  public:
-    MyFiller(int size) : size_(size), created_(0)
-    {
-    }
-
-    virtual size_t GetFillerSize()
-    {
-      return size_;
-    }
-
-    virtual IDynamicObject* GetFillerItem(size_t index)
-    {
-      static boost::mutex mutex;
-      boost::mutex::scoped_lock lock(mutex);
-      created_++;
-      return new DynamicInteger(index * 2, set_);
-    }
-
-    unsigned int GetCreatedCount() const
-    {
-      return created_;
-    }
-
-    std::set<int> GetSet()
-    {
-      return set_;
-    }    
   };
 }
 
 
-
-
 TEST(MultiThreading, SharedMessageQueueBasic)
 {
   std::set<int> s;
@@ -154,78 +106,6 @@
 }
 
 
-TEST(MultiThreading, ArrayFilledByThreadEmpty)
-{
-  MyFiller f(0);
-  ArrayFilledByThreads a(f);
-  a.SetThreadCount(1);
-  ASSERT_EQ(0, a.GetSize());
-}
-
-
-TEST(MultiThreading, ArrayFilledByThread1)
-{
-  MyFiller f(100);
-  ArrayFilledByThreads a(f);
-  a.SetThreadCount(1);
-  ASSERT_EQ(100, a.GetSize());
-  for (size_t i = 0; i < a.GetSize(); i++)
-  {
-    ASSERT_EQ(2 * i, dynamic_cast<DynamicInteger&>(a.GetItem(i)).GetValue());
-  }
-}
-
-
-TEST(MultiThreading, ArrayFilledByThread4)
-{
-  MyFiller f(100);
-  ArrayFilledByThreads a(f);
-  a.SetThreadCount(4);
-  ASSERT_EQ(100, a.GetSize());
-  for (size_t i = 0; i < a.GetSize(); i++)
-  {
-    ASSERT_EQ(2 * i, dynamic_cast<DynamicInteger&>(a.GetItem(i)).GetValue());
-  }
-
-  ASSERT_EQ(100u, f.GetCreatedCount());
-
-  a.Invalidate();
-
-  ASSERT_EQ(100, a.GetSize());
-  ASSERT_EQ(200u, f.GetCreatedCount());
-  ASSERT_EQ(4u, a.GetThreadCount());
-  ASSERT_TRUE(f.GetSet().empty());
-
-  for (size_t i = 0; i < a.GetSize(); i++)
-  {
-    ASSERT_EQ(2 * i, dynamic_cast<DynamicInteger&>(a.GetItem(i)).GetValue());
-  }
-}
-
-
-TEST(MultiThreading, CommandProcessor)
-{
-  ThreadedCommandProcessor p(4);
-
-  std::set<int> s;
-
-  for (size_t i = 0; i < 100; i++)
-  {
-    p.Post(new DynamicInteger(i * 2, s));
-  }
-
-  p.Join();
-
-  for (size_t i = 0; i < 200; i++)
-  {
-    if (i % 2)
-      ASSERT_TRUE(s.find(i) == s.end());
-    else
-      ASSERT_TRUE(s.find(i) != s.end());
-  }
-}
-
-
 TEST(MultiThreading, Mutex)
 {
   Mutex mutex;