Mercurial > hg > orthanc
diff Plugins/OrthancCPlugin/OrthancCPlugin.h @ 898:7000fc86fe62 plugins
improved plugin api
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 18 Jun 2014 09:18:28 +0200 |
parents | bafc9d592632 |
children | bb0a51561016 |
line wrap: on
line diff
--- a/Plugins/OrthancCPlugin/OrthancCPlugin.h Tue Jun 17 17:43:39 2014 +0200 +++ b/Plugins/OrthancCPlugin/OrthancCPlugin.h Wed Jun 18 09:18:28 2014 +0200 @@ -33,13 +33,6 @@ #pragma once -#ifdef _MSC_VER -#include "../../Resources/VisualStudio/stdint.h" -#else -#include <stdint.h> -#endif - - #ifdef WIN32 #define ORTHANC_PLUGINS_API __declspec(dllexport) #else @@ -47,9 +40,59 @@ #endif + +/******************************************************************** + ** Check that function inlining is properly supported. The use of + ** inlining is required, to avoid the duplication of object code + ** between two compilation modules that would use the Orthanc Plugin + ** API. + ********************************************************************/ + +/* If the auto-detection of the "inline" keyword below does not work + automatically and that your compiler is known to properly support + inlining, uncomment the following #define and adapt the definition + of "static inline". */ + +/* #define ORTHANC_PLUGIN_INLINE static inline */ + +#ifndef ORTHANC_PLUGIN_INLINE +# if __STDC_VERSION__ >= 199901L +/* This is C99 or above: http://predef.sourceforge.net/prestd.html */ +# define ORTHANC_PLUGIN_INLINE static inline +# elif defined(__cplusplus) +/* This is C++ */ +# define ORTHANC_PLUGIN_INLINE static inline +# elif defined(__GNUC__) +/* This is GCC running in C89 mode */ +# define ORTHANC_PLUGIN_INLINE static __inline +# elif defined(_MSC_VER) +/* This is Visual Studio running in C89 mode */ +# define ORTHANC_PLUGIN_INLINE static __inline +# else +# error Your compiler is not known to support the "inline" keyword +# endif +#endif + + + +/******************************************************************** + ** Inclusion of standard libaries. + ********************************************************************/ + +#ifdef _MSC_VER +#include "../../Resources/VisualStudio/stdint.h" +#else +#include <stdint.h> +#endif + #include <stdlib.h> + +/******************************************************************** + ** Definition of the Orthanc Plugin API. + ********************************************************************/ + #ifdef __cplusplus extern "C" { @@ -65,8 +108,12 @@ OrthancPluginHttpMethod_Delete = 4 } OrthancPluginHttpMethod; - typedef int32_t (*OrthancPluginService) (const char* serviceName, - const void* serviceParameters); + typedef enum + { + OrthancPluginService_LogInfo = 1, + OrthancPluginService_LogWarning = 2, + OrthancPluginService_LogError = 3 + } OrthancPluginService; typedef int32_t (*OrthancPluginRestCallback) (OrthancPluginRestOutput* output, OrthancPluginHttpMethod method, @@ -78,15 +125,13 @@ typedef struct OrthancPluginContext_t { - void* pimpl; + void* pluginsManager; const char* orthancVersion; void (*FreeBuffer) (void* buffer); - - /* Logging functions */ - void (*LogError) (const char* str); - void (*LogWarning) (const char* str); - void (*LogInfo) (const char* str); + int32_t (*InvokeService) (struct OrthancPluginContext_t* context, + OrthancPluginService service, + const void* parameters); /* REST API */ void (*RegisterRestCallback) (const struct OrthancPluginContext_t* context, @@ -100,6 +145,28 @@ } OrthancPluginContext; + ORTHANC_PLUGIN_INLINE void OrthancPluginLogError(OrthancPluginContext* context, + const char* str) + { + context->InvokeService(context, OrthancPluginService_LogError, str); + } + + + ORTHANC_PLUGIN_INLINE void OrthancPluginLogWarning(OrthancPluginContext* context, + const char* str) + { + context->InvokeService(context, OrthancPluginService_LogWarning, str); + } + + + ORTHANC_PLUGIN_INLINE void OrthancPluginLogInfo(OrthancPluginContext* context, + const char* str) + { + context->InvokeService(context, OrthancPluginService_LogInfo, str); + } + + + /** Each plugin must define 4 functions, whose signature are: - int32_t OrthancPluginInitialize(const OrthancPluginContext*);