G+S
mo
24.08.0
Geometry + Simulation Modules
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
gsExport.h
Go to the documentation of this file.
1
14
#pragma once
15
16
#include <
gsCore/gsConfig.h
>
17
18
19
/*
20
Symbol exporting and importing
21
22
By default no symbols are exported to the shared library. Symbols
23
that have to be exported must be marked with GISMO_EXPORT. Symbols
24
that should not be exported can be marked with GISMO_LOCAL.
25
Also:
26
27
- When building the shared library, gismo_EXPORTS must be defined,
28
but NOT when consuming G+Smo as a shared library
29
30
- When building the static library, gismo_STATIC must be defined
31
32
- If GISMO_BUILD_LIB is defined when building or consuming the
33
shared or static library then function definitions in .hpp files are
34
not included after class/function declarations. Otherwise
35
(GISMO_BUILD_LIB not defined) a pure template build will take place.
36
The macro GISMO_BUILD_LIB is controlled in gsCore/gsConfig.h.
37
38
info: https://gcc.gnu.org/wiki/Visibility
39
*/
40
#if defined(gismo_STATIC) // using/building static library
41
42
# define GISMO_EXPORT
43
# define GISMO_IMPORT
44
//# define GISMO_LOCAL
45
# define GISMO_DEFAULT_VIS //GCC warns when base/derived class differ in visibility, this macro allows to add attribute to the templated base
46
47
#elif defined(gismo_EXPORTS) // building shared library: export, don't import
48
49
# if defined(_WIN32) || defined(__CYGWIN__)
50
# define GISMO_EXPORT __declspec(dllexport) //equiv. __attribute__ ((dllexport))
51
//# define GISMO_LOCAL
52
# define GISMO_DEFAULT_VIS
53
# else
54
# define GISMO_EXPORT __attribute__((visibility("default")))
55
//# define GISMO_LOCAL __attribute__((visibility("hidden" )))
56
# define GISMO_DEFAULT_VIS __attribute__((visibility("default")))
57
# endif
58
# define GISMO_IMPORT
59
60
#else // using shared library: import all
61
62
# if defined(_WIN32) || defined(__CYGWIN__)
63
# define GISMO_EXPORT __declspec(dllimport) //equiv. __attribute__ ((dllimport))
64
# define GISMO_IMPORT __declspec(dllimport)
65
# else
66
// GCC: If a symbol declared dllimport is later defined, the attribute
67
// is ignored in subsequent references, and a warning is emitted.
68
# define GISMO_EXPORT //__attribute__ ((dllimport))
69
# define GISMO_IMPORT //__attribute__ ((dllimport))
70
# endif
71
//# define GISMO_LOCAL
72
# define GISMO_DEFAULT_VIS
73
#endif
74
75
76
/*
77
Macros for instantiating templated structs, classes or functions.
78
79
- When using the shared library all instantiations are expected to
80
be imported from the library are marked as "extern template". This
81
allows the compile to avoid to instantiate the template in this
82
translation unit.
83
84
- When compiling the translation unit for an explicit template
85
instantiation of a certain templated class, the
86
EXTERN_CLASS_TEMPLATE must be replaced with an explicit
87
instantiation directive, i.e. CLASS_TEMPLATE_INST.
88
89
- On GCC the scheme would work if the "extern template" where still
90
present in the headers and CLASS_TEMPLATE_INST would follow later.
91
Hoever, in MSVC2010, "extern template" cannot be followed later by
92
an explicit instantization. Actually MSVC considers "extern
93
template" already to be an instantization, which can happen only
94
once in the translation unit. Hence the error C2960 is emitted.
95
96
- The compiler is free to inline any function that it has the
97
definition for, if it chooses to do so.
98
99
info: https://support.microsoft.com/en-us/kb/168958
100
*/
101
#define STRUCT_TEMPLATE_INST template struct GISMO_EXPORT
102
#define CLASS_TEMPLATE_INST template class GISMO_EXPORT
103
#define TEMPLATE_INST template GISMO_EXPORT
104
#define EXTERN_STRUCT_TEMPLATE extern template struct GISMO_IMPORT
105
#define EXTERN_CLASS_TEMPLATE extern template class GISMO_IMPORT
106
#define EXTERN_TEMPLATE extern template GISMO_IMPORT
107
108
#ifndef __has_feature // clang only
109
#define __has_feature(x) 0
110
#endif
111
112
/*
113
Override control
114
115
- GISMO_FINAL
116
Marks a virtual method indicating that derived classes cannot
117
override it, or mark a class to indicate that there can be no
118
derived classes.
119
120
Example:
121
virtual void foo() GISMO_FINAL;
122
class B GISMO_FINAL : public A {};
123
124
- GISMO_OVERRIDE
125
Marks a virtual method indicating it must be overriding a virtual
126
method of the base class
127
128
Example:
129
virtual void foo() GISMO_OVERRIDE;
130
*/
131
#if defined(_MSC_VER) && _MSC_VER < 1700 // all versions before MSVC 2012
132
// MSVC2010 uses "sealed", later versions accept final as well
133
# define GISMO_FINAL sealed
134
# define GISMO_OVERRIDE override
135
#elif _MSC_VER >= 1700 // MSVC 2012 upward
136
# define GISMO_FINAL final
137
# define GISMO_OVERRIDE override
138
#elif defined(__clang__ ) && __has_feature(cxx_override_control)
139
# define GISMO_FINAL final
140
# define GISMO_OVERRIDE override
141
#elif defined(__GNUG__) && __cplusplus >= 201103 && \
142
(__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= 40700
143
// GCC 4.7 supports override control with C++11 enabled
144
# define GISMO_FINAL final
145
# define GISMO_OVERRIDE override
146
#else
147
# define GISMO_FINAL
148
# define GISMO_OVERRIDE
149
#endif
gsConfig.h
Provides preprocessor directives configuration of G+Smo.
gsCore
gsExport.h
Generated on Thu Nov 21 2024 14:52:11 for G+Smo by Doxygen v1.8.5