# HG changeset patch # User Sebastien Jodogne # Date 1433150155 -7200 # Node ID ac4efabeb80cd77c80fa431b57b7fa72bb12db55 # Parent 785e01da36a171b71f70b5a7a3ca9eb20a1a7aef Migration of the orthanc-client as a separate project diff -r 785e01da36a1 -r ac4efabeb80c CMakeLists.txt --- 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() diff -r 785e01da36a1 -r ac4efabeb80c Core/Enumerations.h --- 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 - 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.} diff -r 785e01da36a1 -r ac4efabeb80c Core/FileStorage/IStorageArea.h --- 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 #include namespace Orthanc diff -r 785e01da36a1 -r ac4efabeb80c Core/ImageFormats/ImageAccessor.h --- 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 + namespace Orthanc { class ImageAccessor diff -r 785e01da36a1 -r ac4efabeb80c Core/MultiThreading/ArrayFilledByThreads.cpp --- 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 . - **/ - - -#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 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]; - } -} diff -r 785e01da36a1 -r ac4efabeb80c Core/MultiThreading/ArrayFilledByThreads.h --- 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 - -#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 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); - }; -} - diff -r 785e01da36a1 -r ac4efabeb80c Core/MultiThreading/ThreadedCommandProcessor.cpp --- 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 . - **/ - - -#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 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(*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; - } -} diff -r 785e01da36a1 -r ac4efabeb80c Core/MultiThreading/ThreadedCommandProcessor.h --- 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 . - **/ - - -#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 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_; - } - }; -} diff -r 785e01da36a1 -r ac4efabeb80c NEWS --- 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 ----- diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/Instance.cpp --- 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 . - **/ - - -#include "../Core/PrecompiledHeaders.h" -#include "Instance.h" - -#include "OrthancConnection.h" - -#include - -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(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(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& 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(tmp)); - tmp.clear(); - } - else - { - tmp.push_back(value[i]); - } - } - - target.push_back(boost::lexical_cast(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(); - } -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/Instance.h --- 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 . - **/ - - -#pragma once - -#include -#include - -#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 reader_; - Orthanc::ImageExtractionMode mode_; - std::auto_ptr 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& 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; - }; -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/OrthancClientException.h --- 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 . - **/ - - -#pragma once - -#include "../Core/OrthancException.h" -#include - -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) - { - } - }; -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/OrthancConnection.cpp --- 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 . - **/ - - -#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(index); - std::string id = content_[tmp].asString(); - return new Patient(*this, id.c_str()); - } - - Patient& OrthancConnection::GetPatient(unsigned int index) - { - return dynamic_cast(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)); - memcpy(&client_.AccessPostData()[0], dicom, static_cast(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()); - } - } - -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/OrthancConnection.h --- 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 . - **/ - - -#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); - }; -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/OrthancCppClient.cpp --- 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 . - **/ - - -/** - * 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" diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/Patient.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 . - **/ - - -#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(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); - } - } -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/Patient.h --- 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 . - **/ - - -#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(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(); - }; -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/Series.cpp --- 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 . - **/ - - -#include "../Core/PrecompiledHeaders.h" -#include "Series.h" - -#include "OrthancConnection.h" - -#include -#include - -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 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 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(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(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(current) / static_cast(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(sx); - voxelSizeY_ = boost::lexical_cast(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::infinity(); - - SliceLocator locator(reference); - float referenceSliceLocation = locator.ComputeSliceLocation(reference); - - std::set 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::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(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(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 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(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(lineStride), - static_cast(stackStride), &listener); - } -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/Series.h --- 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 . - **/ - - -#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(lineStride), - static_cast(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(lineStride), - static_cast(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); - }; -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/AUTOGENERATED/ExternC.cpp --- 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 . - **/ - - -#include -#include // For strcpy() and strlen() -#include // For free() - -static char* LAAW_EXTERNC_CopyString(const char* str) -{ - char* copy = reinterpret_cast(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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); - } -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/AUTOGENERATED/OrthancCppClient.h --- 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 . - **/ - - -/** - * @file - **/ - -#pragma once - -#include -#include -#include -#include - -#if defined(_WIN32) - -/******************************************************************** - ** This is the Windows-specific section - ********************************************************************/ - -#include - -/* 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 -#include - -/* 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 - -#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_); - } -} - diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows32.def --- 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 diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows32.rc --- 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 - -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 diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows64.def --- 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 diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows64.rc --- 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 - -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 diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/ConfigurationCpp.json --- 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" -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/Generate.sh --- 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" diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/Laaw/VersionScript.map --- 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: - *; -}; diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/Laaw/laaw/laaw-exports.h --- 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 . - **/ - - -#pragma once - -/******************************************************************** - ** Windows target - ********************************************************************/ - -#if defined _WIN32 - -#include - -#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 diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/Laaw/laaw/laaw.h --- 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 . - **/ - - -#pragma once - -#include "laaw-exports.h" -#include -#include - -#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(); - } - }; -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/Product.json --- 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" -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/SharedLibrary/SharedLibrary.cpp --- 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 . - **/ - - - -#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" diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/Study.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 . - **/ - - -#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(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; - } - } -} diff -r 785e01da36a1 -r ac4efabeb80c OrthancCppClient/Study.h --- 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 . - **/ - - -#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_.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; - }; -} diff -r 785e01da36a1 -r ac4efabeb80c Resources/OrthancClient.doxygen --- 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 , where is the value of -# the FILE_VERSION_FILTER tag, and 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 , where -# is the value of the INPUT_FILTER tag, and 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 -# -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. - -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 diff -r 785e01da36a1 -r ac4efabeb80c UnitTestsSources/LuaTests.cpp --- 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; diff -r 785e01da36a1 -r ac4efabeb80c UnitTestsSources/MultiThreadingTests.cpp --- 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 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 GetSet() - { - return set_; - } }; } - - TEST(MultiThreading, SharedMessageQueueBasic) { std::set 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(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(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(a.GetItem(i)).GetValue()); - } -} - - -TEST(MultiThreading, CommandProcessor) -{ - ThreadedCommandProcessor p(4); - - std::set 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;