]> gerrit.simantics Code Review - simantics/fmil.git/blobdiff - org.simantics.fmil.core/native/FMILibrary/src/Util/include/JM/jm_callbacks.h
Add FMILibrary-2.0.3 to org.simantics.fmil.core\native.
[simantics/fmil.git] / org.simantics.fmil.core / native / FMILibrary / src / Util / include / JM / jm_callbacks.h
diff --git a/org.simantics.fmil.core/native/FMILibrary/src/Util/include/JM/jm_callbacks.h b/org.simantics.fmil.core/native/FMILibrary/src/Util/include/JM/jm_callbacks.h
new file mode 100644 (file)
index 0000000..0468eeb
--- /dev/null
@@ -0,0 +1,225 @@
+/*
+    Copyright (C) 2012 Modelon AB
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the BSD style license.
+
+     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
+    FMILIB_License.txt file for more details.
+
+    You should have received a copy of the FMILIB_License.txt file
+    along with this program. If not, contact Modelon AB <http://www.modelon.com>.
+*/
+
+#ifndef JM_CALLBACKS_H
+#define JM_CALLBACKS_H
+#include <stddef.h>
+#include <stdarg.h>
+
+#include <fmilib_config.h>
+
+#include "jm_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/** \file jm_callbacks.h Definition of ::jm_callbacks and supporting functions
+       *
+       * \addtogroup jm_utils
+       * @{
+               \addtogroup jm_callbacks
+       * @}
+*/
+/** \addtogroup jm_callbacks Definition of callbacks struct and supporting functions
+* @{  */
+typedef struct jm_callbacks jm_callbacks;
+
+/** \name Memory management callbacks\r
+* jm_malloc_f, jm_realloc_f, jm_calloc_f, jm_free_f function 
+* types correspond to the standard C memory management functions
+* @{ \r
+*/
+/** \brief Allocation function type. */
+typedef jm_voidp (*jm_malloc_f)(size_t size);
+
+/** \brief Re-allocation function type. */
+typedef jm_voidp (*jm_realloc_f)(void *ptr, size_t size);
+
+/** \brief Zero-initialized allocation function type. */
+typedef jm_voidp (*jm_calloc_f)(size_t numitems, size_t itemsize);
+
+/** \brief Free memory function type. */
+typedef void (*jm_free_f)(jm_voidp p);
+/** @}\r
+*/
+
+/**
+*  
+* \brief Logger callback type.
+*
+* The logger callback is used to report errors. Note that this function is
+* by default only used in FMI standard intependent code (e.g., fmi_import_get_fmi_version()).
+* Since logging functions are different between different standard versions separate
+* logging functions are necessary for each fmi implementation.\n
+* Defaults are provided for each standard. 
+*/
+typedef void (*jm_logger_f)(jm_callbacks* c, jm_string module, jm_log_level_enu_t log_level, jm_string message);
+
+/** \brief Maximum message size that can be stored in the ::jm_callbacks struct */
+#define JM_MAX_ERROR_MESSAGE_SIZE 2000\r
+
+/** \brief The callbacks struct is sent to all the modules in the library */
+struct jm_callbacks {
+       /** \brief Allocate non-initialized memory */
+       jm_malloc_f malloc; 
+       /** \brief Allocate zero initialized memory */
+       jm_calloc_f calloc; 
+       /** \brief Re-allocate memory */
+       jm_realloc_f realloc; 
+       /** \brief Free-allocated memory */
+       jm_free_f free;        
+       /** \brief Logging callback */
+       jm_logger_f logger;             
+       /** \brief Logging level */
+       jm_log_level_enu_t log_level; 
+       /** \brief Arbitrary context pointer passed to the logger function  */
+       jm_voidp context;       
+       /** \brief The buffer used along with jm_get_last_error() */
+       char errMessageBuffer[JM_MAX_ERROR_MESSAGE_SIZE]; 
+};
+
+/**
+* \brief Get the last log message produced by the library.
+*
+* An alternative way to get error information is to use jm_get_last_error(). This is only meaningful
+* if logger function is not present.
+*/
+static jm_string jm_get_last_error(jm_callbacks* cb) {return cb->errMessageBuffer; }
+
+/**
+ \brief Clear the last generated log message.
+*/
+static void jm_clear_last_error(jm_callbacks* cb) { cb->errMessageBuffer[0] = 0; }
+
+/**
+\brief Set the structure to be returned by jm_get_default_callbacks().
+
+@param c - a pointer to initialized struct to be used as default later on. If this is NULL
+       library default implementation will be used.
+*/
+FMILIB_EXPORT
+void jm_set_default_callbacks(jm_callbacks* c);
+
+/**
+\brief Get default callbacks. The function never returns NULL.
+\return Default ::jm_callbacks struture. Either the one supplied by the library of the one set with jm_set_default_callbacks().
+*/
+FMILIB_EXPORT
+jm_callbacks* jm_get_default_callbacks(void);
+
+/**
+\brief The default logger implementation prints messages to stderr.
+*/
+FMILIB_EXPORT
+void jm_default_logger(jm_callbacks* c, jm_string module, jm_log_level_enu_t log_level, jm_string message);
+
+/**
+\brief Send a message to the logger function.
+       @param cb - callbacks to be used for reporting;
+       @param module - a name of reporting module;
+       @param log_level - message kind;
+       @param fmt - "printf" type of format followed by the arguments.
+*/
+FMILIB_EXPORT
+void jm_log(jm_callbacks* cb, const char* module, jm_log_level_enu_t log_level, const char* fmt, ...);
+
+/** \copydoc jm_log()
+       @param ap - variable size argument list.
+*/
+FMILIB_EXPORT
+void jm_log_v(jm_callbacks* cb, const char* module, jm_log_level_enu_t log_level, const char* fmt, va_list ap);
+
+/** \brief Send a fatal error message to the logger function. See jm_log() for details.
+*/
+FMILIB_EXPORT
+void jm_log_fatal_v(jm_callbacks* cb, const char* module, const char* fmt, va_list ap);
+/** \brief Send a fatal error message to the logger function. See jm_log() for details.
+*/
+FMILIB_EXPORT
+void jm_log_fatal(jm_callbacks* cb, const char* module, const char* fmt, ...);
+
+/** \brief Send a error message to the logger function. See jm_log() for details.
+*/
+FMILIB_EXPORT
+void jm_log_error_v(jm_callbacks* cb, const char* module, const char* fmt, va_list ap);
+
+/** \brief Send a error message to the logger function. See jm_log() for details.
+*/
+FMILIB_EXPORT
+void jm_log_error(jm_callbacks* cb, const char* module, const char* fmt, ...);
+
+/** \brief Send a warning message to the logger function. See jm_log() for details.
+*/
+FMILIB_EXPORT
+void jm_log_warning_v(jm_callbacks* cb, const char* module, const char* fmt, va_list ap);
+
+/** \brief Send a warning message to the logger function. See jm_log() for details.
+*/
+FMILIB_EXPORT
+void jm_log_warning(jm_callbacks* cb, const char* module, const char* fmt, ...);
+
+/** \brief Send an info message to the logger function. See jm_log() for details.
+*/
+FMILIB_EXPORT
+void jm_log_info_v(jm_callbacks* cb, const char* module, const char* fmt, va_list ap);
+/** \brief Send an info message to the logger function. See jm_log() for details.
+*/
+FMILIB_EXPORT
+void jm_log_info(jm_callbacks* cb, const char* module, const char* fmt, ...);
+
+/** \brief Send a verbose message to the logger function. See jm_log() for details.
+*/
+FMILIB_EXPORT
+void jm_log_verbose_v(jm_callbacks* cb, const char* module, const char* fmt, va_list ap);
+/** \brief Send a verbose message to the logger function. See jm_log() for details.
+*/
+FMILIB_EXPORT
+void jm_log_verbose(jm_callbacks* cb, const char* module, const char* fmt, ...);
+
+#ifdef FMILIB_ENABLE_LOG_LEVEL_DEBUG
+/** \brief Send a debug message to the logger function. See jm_log() for details.
+
+       Note that the function is only active if the library is configure with FMILIB_ENABLE_LOG_LEVEL_DEBUG=ON
+*/
+FMILIB_EXPORT
+void jm_log_debug_v(jm_callbacks* cb, const char* module, const char* fmt, va_list ap);
+/** \brief Send a debug message to the logger function. See jm_log() for details.
+
+       Note that the function is only active if the library is configure with FMILIB_ENABLE_LOG_LEVEL_DEBUG=ON
+*/
+FMILIB_EXPORT
+void jm_log_debug(jm_callbacks* cb, const char* module, const char* fmt, ...);
+#else
+/** \brief Send a debug message to the logger function. See jm_log() for details.
+
+       Note that the function is only active if the library is configure with FMILIB_ENABLE_LOG_LEVEL_DEBUG=ON
+*/
+static void jm_log_debug_v(jm_callbacks* cb, const char* module, const char* fmt, va_list ap) {}
+/** \brief Send a debug message to the logger function. See jm_log() for details.
+
+       Note that the function is only active if the library is configure with FMILIB_ENABLE_LOG_LEVEL_DEBUG=ON
+*/
+static void jm_log_debug(jm_callbacks* cb, const char* module, const char* fmt, ...) {}
+#endif
+
+
+/* @}\r
+*/
+
+#ifdef __cplusplus
+}
+#endif
+/* JM_CONTEXT_H */
+#endif