1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
/*****************************************************************************
* $CAMITK_LICENCE_BEGIN$
*
* CamiTK - Computer Assisted Medical Intervention ToolKit
* (c) 2001-2025 Univ. Grenoble Alpes, CNRS, Grenoble INP - UGA, TIMC, 38000 Grenoble, France
*
* Visit http://camitk.imag.fr for more information
*
* This file is part of CamiTK.
*
* CamiTK is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* CamiTK 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 Lesser General Public License version 3 for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with CamiTK. If not, see <http://www.gnu.org/licenses/>.
*
* $CAMITK_LICENCE_END$
****************************************************************************/
#ifndef CAMITK_API_H
#define CAMITK_API_H
// -----------------------------------------------------------------------
//
// CAMITK_API
//
// -----------------------------------------------------------------------
// The following ifdef block is the standard way of creating macros which make exporting
// from a DLL simpler. All files within this DLL are compiled with the COMPILE_CAMITK_API
// flag defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see
// CAMITK_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#if defined(_WIN32) // MSVC and mingw
#ifndef PYBIND11_EXPORT
#ifdef COMPILE_CAMITK_API
#define PYBIND11_EXPORT __declspec(dllexport)
#else
#define PYBIND11_EXPORT __declspec(dllimport)
#endif
#endif
#ifdef COMPILE_CAMITK_API
#define CAMITK_API __declspec(dllexport)
#else
#define CAMITK_API __declspec(dllimport)
#endif
#else
// for all other platforms CAMITK_API is defined to be "nothing"
// but for class that have pybind11 members, the visibility must be modified (use both CAMITK_API and PYBIND11_EXPORT, see PythonHotPlugAction.h)
// see https://pybind11.readthedocs.io/en/stable/faq.html#someclass-declared-with-greater-visibility-than-the-type-of-its-field-someclass-member-wattributes
#ifndef PYBIND11_EXPORT
#ifdef COMPILE_CAMITK_API
// hide symbols as pybind11 does not want its symbols to be exported
#define PYBIND11_EXPORT __attribute__((visibility("default")))
#else
#define PYBIND11_EXPORT
#endif
#endif
#ifndef CAMITK_API
#define CAMITK_API
#endif
#endif // MSVC and mingw
// -----------------------------------------------------------------------
// It seems that MSVC does not understand exception specification
// If I understand it well, when _declspec() is used, there is a default
// nothrow attribute.
// I did not find the throw attribute. It seems that msvc is therefore ignoring the
// specification of the type of the exception.
// The compiler therefore issues a warning.
// The following line is to avoid this particular warning.
// The best would be to ask msvc not only to take the exception into account, but also
// its type. Anyway, I did not find how to do that anywhere, and I am not sure this is
// possible...
#if defined(_WIN32) && !defined(__MINGW32__) // MSVC only
#pragma warning( disable : 4290 )
#endif // MSVC only
// -----------------------------------------------------------------------
// MSVC does not have the C++ Standard rint function (it should be included in any C99 implementation)
#if defined(_WIN32) && !defined(__MINGW32__) &&(_MSC_VER < 1800)
extern double rint(double x);
#endif
// -----------------------------------------------------------------------
// -- QT stuff
#include <QList>
#include <QSet>
#include <QMap>
#include <QString>
// -----------------------------------------------------------------------
// warning when using deprecated methods
//
// prefix each deprecated method by the CAMITK_API_DEPRECATED keyword
// CAMITK_API_DEPRECATED("Please use newMethod(..) instead") oldType oldMethod(...)
//
// example:
// -------
// @cond
//
// TODO CAMITK_API_DEPRECATED. This section list the methods marked as deprecated.
// They are to be removed in CamiTK xx.yy
// @deprecated
//
// DEPRECATED (CamiTK xx.yy) -> to be removed
//
// Please use newMethod(..) instead
//
// /// API DOC of the old method
// /// ...
// CAMITK_API_DEPRECATED("Please use newMethod(..) instead") oldType oldMethod(...);
// @endcond
// see https://stackoverflow.com/a/295229
#if defined(__GNUC__) || defined(__clang__)
#define CAMITK_API_DEPRECATED(X) __attribute__((deprecated(X)))
#elif defined(_MSC_VER)
#define CAMITK_API_DEPRECATED(X) __declspec(deprecated(X))
#else
#pragma message("WARNING: You need to implement CAMITK_API_DEPRECATED(X) for this compiler")
#define CAMITK_API_DEPRECATED(X)
#endif
// -----------------------------------------------------------------------
// warning when using deprecated methods
//
// prefix each deprecated method by the CAMITK_API_DEPRECATED keyword
// CAMITK_API_NOT_IMPLEMENTED mymethod(...)
//
// This is silent during CamiTK Core compilation
#if !defined(COMPILE_CAMITK_API)
#if defined(__GNUC__) || defined(__clang__)
#define CAMITK_API_UNIMPLEMENTED __attribute__((deprecated("Unimplemented method. Do not hesitate to contribute to CamiTK API!")))
#elif defined(_MSC_VER)
#define CAMITK_API_UNIMPLEMENTED __declspec(deprecated("Unimplemented method. Do not hesitate to contribute to CamiTK API!"))
#endif // elif
#else
// inside CamiTK Core compilation
#define CAMITK_API_UNIMPLEMENTED
#if !defined(__GNUC__) && !defined(__clang__) && !defined(_MSC_VER)
#pragma message("WARNING: You need to implement CAMITK_API_UNIMPLEMENTED() for this compiler")
#endif
#endif // COMPILE_CAMITK_API
// -----------------------------------------------------------------------
// -- Definition of some useful CamiTK container types
namespace camitk {
// -- Core stuff Classes
class Component;
class Action;
class Viewer;
/// A list of Component
using ComponentList = QList<Component*>;
/// A set of Action
using ActionSet = QSet<Action*>;
/// A set of Viewer
using ViewerSet = QSet<Viewer*>;
/// A list of Action
using ActionList = QList<Action*>;
/// A list of Viewer
using ViewerList = QList<Viewer*>;
}
#endif
|