File: CamiTKAPI.h

package info (click to toggle)
camitk 6.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 389,496 kB
  • sloc: cpp: 103,476; sh: 2,448; python: 1,618; xml: 984; makefile: 128; perl: 84; sed: 20
file content (175 lines) | stat: -rw-r--r-- 6,504 bytes parent folder | download
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