#ifndef NBOGLOBAL_H
#define NBOGLOBAL_H

#ifdef _MSC_VER
#pragma warning(disable                                                                                                \
                : 4251) //'type' : class 'type1' needs to have dll-interface to be used by clients of class 'type2'
#pragma warning(disable : 4275) //non - DLL-interface class 'class_1' used as base for DLL-interface class 'class_2'
#endif

#if !defined(SWIGJAVA) && !defined(SWIGPYTHON) && !defined(NBO_TEST) && !defined(INSC_DRIVER_LIB)
#if defined(_MSC_VER) || defined(WIN64) || defined(_WIN64) || defined(__WIN64__) || defined(WIN32) ||                  \
    defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
#define NBO_DECL_EXPORT __declspec(dllexport)
#define NBO_DECL_IMPORT __declspec(dllimport)
#else
#define NBO_DECL_EXPORT __attribute__((visibility("default")))
#define NBO_DECL_IMPORT __attribute__((visibility("default")))
#endif

#if defined(NBO_LIBRARY)
#define NBO_EXPORT NBO_DECL_EXPORT
#else
#define NBO_EXPORT NBO_DECL_IMPORT
#endif
#else
#define NBO_EXPORT
#endif

#if defined(SWIGJAVA) && !defined(JAVAWRAPPER)
#include <NBO/Shared/Exception/InscoperNBOException.h>
#define NBO_EXCEPTION throw(Inscoper::NBO::NBOException)
#define NBO_NO_EXCEPT noexcept
#else
#define NBO_EXCEPTION
#define NBO_NO_EXCEPT noexcept
#endif

#if !defined(SWIGJAVA)
#define NBO_DEPRECATED(message) [[deprecated(message)]]
#else
#define NBO_DEPRECATED(message)
#endif

#endif // NBOGLOBAL_H
