Geant4 11.3.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Macros.hh
Go to the documentation of this file.
1//
2// MIT License
3// Copyright (c) 2020 Jonathan R. Madsen
4// Permission is hereby granted, free of charge, to any person obtaining a copy
5// of this software and associated documentation files (the "Software"), to deal
6// in the Software without restriction, including without limitation the rights
7// to use, copy, modify, merge, publish, distribute, sublicense, and
8// copies of the Software, and to permit persons to whom the Software is
9// furnished to do so, subject to the following conditions:
10// The above copyright notice and this permission notice shall be included in
11// all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED
12// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
13// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
15// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
16// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
17// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18//
19
20#pragma once
21
22#if defined(__APPLE__) || defined(__MACH__)
23# if !defined(PTL_MACOS)
24# define PTL_MACOS 1
25# endif
26# if !defined(PTL_UNIX)
27# define PTL_UNIX 1
28# endif
29#endif
30
31#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
32# if !defined(PTL_WINDOWS)
33# define PTL_WINDOWS 1
34# endif
35#endif
36
37#if defined(__linux__) || defined(__linux) || defined(linux) || defined(__gnu_linux__)
38# if !defined(PTL_LINUX)
39# define PTL_LINUX 1
40# endif
41# if !defined(PTL_UNIX)
42# define PTL_UNIX 1
43# endif
44#endif
45
46#if defined(__unix__) || defined(__unix) || defined(unix)
47# if !defined(PTL_UNIX)
48# define PTL_UNIX 1
49# endif
50#endif
51
52#if defined(PTL_WINDOWS)
53// Disable warning C4786 on WIN32 architectures:
54// identifier was truncated to '255' characters
55// in the debug information
56//
57# pragma warning(disable : 4786)
58//
59// Define DLL export macro for WIN32 systems for
60// importing/exporting external symbols to DLLs
61//
62# if defined PTL_BUILD_DLL
63# define DLLEXPORT __declspec(dllexport)
64# define DLLIMPORT __declspec(dllimport)
65# else
66# define DLLEXPORT
67# define DLLIMPORT
68# endif
69//
70// Unique identifier for global module
71//
72# if defined PTL_ALLOC_EXPORT
73# define PTL_DLL DLLEXPORT
74# else
75# define PTL_DLL DLLIMPORT
76# endif
77#else
78# define DLLEXPORT
79# define DLLIMPORT
80# define PTL_DLL
81#endif
82
83#if !defined(PTL_DEFAULT_OBJECT)
84# define PTL_DEFAULT_OBJECT(NAME) \
85 NAME() = default; \
86 ~NAME() = default; \
87 NAME(const NAME&) = default; \
88 NAME(NAME&&) = default; \
89 NAME& operator=(const NAME&) = default; \
90 NAME& operator=(NAME&&) = default;
91#endif
92
93#if !defined(PTL_NO_SANITIZE_THREAD)
94// expect that sanitizer is from compiler which supports __has_attribute
95# if defined(__has_attribute)
96# if __has_attribute(no_sanitize)
97# define PTL_NO_SANITIZE_THREAD __attribute__((no_sanitize("thread")))
98# else
99# define PTL_NO_SANITIZE_THREAD
100# endif
101# elif defined(__clang__) || defined(__GNUC__)
102# define PTL_NO_SANITIZE_THREAD __attribute__((no_sanitize("thread")))
103# else
104// otherwise, make blank
105# define PTL_NO_SANITIZE_THREAD
106# endif
107#endif