LibraryLink Utilities  3.0.1
Modern C++ wrapper over LibraryLink and WSTP
LibraryLinkFunctionMacro.h
Go to the documentation of this file.
1 
13 #ifndef LLU_LIBRARYLINKFUNCTIONMACRO_H
14 #define LLU_LIBRARYLINKFUNCTIONMACRO_H
15 
23 #define LIBRARY_LINK_FUNCTION(name) \
24  EXTERN_C DLLEXPORT int name(WolframLibraryData, mint, MArgument*, MArgument); \
25  int name([[maybe_unused]] WolframLibraryData libData, mint Argc, MArgument* Args, MArgument Res)
26 
32 #define LIBRARY_WSTP_FUNCTION(name) \
33  EXTERN_C DLLEXPORT int name(WolframLibraryData, WSLINK); \
34  int name([[maybe_unused]] WolframLibraryData libData, WSLINK wsl)
35 
44 #define LLU_LIBRARY_FUNCTION(name) \
45  void impl_##name(LLU::MArgumentManager&); /* forward declaration */ \
46  LIBRARY_LINK_FUNCTION(name) { \
47  auto err = LLU::ErrorCode::NoError; \
48  try { \
49  LLU::MArgumentManager mngr {libData, Argc, Args, Res}; \
50  impl_##name(mngr); \
51  } catch (const LLU::LibraryLinkError& e) { \
52  err = e.which(); \
53  } catch (...) { \
54  err = LLU::ErrorCode::FunctionError; \
55  } \
56  return err; \
57  } \
58  void impl_##name(LLU::MArgumentManager& mngr)
59 
60 #define LLU_WSTP_FUNCTION(name) \
61  void impl_##name(WSLINK&); /* forward declaration */ \
62  LIBRARY_WSTP_FUNCTION(name) { \
63  auto err = LLU::ErrorCode::NoError; \
64  try { \
65  impl_##name(wsl); \
66  } catch (const LLU::LibraryLinkError& e) { \
67  err = e.which(); \
68  } catch (...) { \
69  err = LLU::ErrorCode::FunctionError; \
70  } \
71  return err; \
72  } \
73  void impl_##name(WSLINK& wsl)
74 
75 #endif // LLU_LIBRARYLINKFUNCTIONMACRO_H