12#ifndef ARCANE_UTILS_ARCANEGLOBAL_H
13#define ARCANE_UTILS_ARCANEGLOBAL_H
17#include "arccore/base/ArccoreGlobal.h"
21#include "arcane_core_config.h"
23#ifdef ARCCORE_OS_LINUX
24# define ARCANE_OS_LINUX
28#ifdef ARCCORE_OS_WIN32
29# define ARCANE_OS_WIN32
32#define ARCANE_EXPORT ARCCORE_EXPORT
33#define ARCANE_IMPORT ARCCORE_IMPORT
34#define ARCANE_TEMPLATE_EXPORT ARCCORE_TEMPLATE_EXPORT
35#define ARCANE_RESTRICT ARCCORE_RESTRICT
41#define ARCANE_UNUSED(var) ARCCORE_UNUSED(var)
46#if defined(ARCANE_HAS_CUDA) && defined(__CUDACC__)
51#define ARCANE_COMPILING_CUDA
53#if defined(ARCANE_HAS_HIP) && defined(__HIP__)
58#define ARCANE_COMPILING_HIP
61#if defined(ARCANE_HAS_SYCL)
62# if defined(SYCL_LANGUAGE_VERSION) || defined(__ADAPTIVECPP__)
67# define ARCANE_COMPILING_SYCL
76#ifndef ARCANE_NO_USING_FOR_STREAM
83using std::ostringstream;
84using std::istringstream;
91typedef ARCANE_TYPE_INT16 Int16;
92typedef ARCANE_TYPE_INT32 Int32;
93typedef ARCANE_TYPE_INT64 Int64;
96#define ARCANE_BEGIN_NAMESPACE namespace Arcane {
97#define ARCANE_END_NAMESPACE }
98#define NUMERICS_BEGIN_NAMESPACE namespace Numerics {
99#define NUMERICS_END_NAMESPACE }
104#ifdef ARCANE_COMPONENT_FULL
105#define ARCANE_COMPONENT_arcane_utils
106#define ARCANE_COMPONENT_arcane
107#define ARCANE_COMPONENT_arcane_mesh
108#define ARCANE_COMPONENT_arcane_std
109#define ARCANE_COMPONENT_arcane_impl
110#define ARCANE_COMPONENT_arcane_script
113#if defined(ARCANE_COMPONENT_arcane) || defined(ARCANE_COMPONENT_arcane_core)
114#define ARCANE_CORE_EXPORT ARCANE_EXPORT
115#define ARCANE_EXPR_EXPORT ARCANE_EXPORT
116#define ARCANE_DATATYPE_EXPORT ARCANE_EXPORT
117#define ARCANE_CORE_EXTERN_TPL
119#define ARCANE_CORE_EXPORT ARCANE_IMPORT
120#define ARCANE_EXPR_EXPORT ARCANE_IMPORT
121#define ARCANE_DATATYPE_EXPORT ARCANE_IMPORT
122#define ARCANE_CORE_EXTERN_TPL extern
125#ifdef ARCANE_COMPONENT_arcane_utils
126#define ARCANE_UTILS_EXPORT ARCANE_EXPORT
127#define ARCANE_UTILS_EXTERN_TPL
129#define ARCANE_UTILS_EXPORT ARCANE_IMPORT
130#define ARCANE_UTILS_EXTERN_TPL extern
133#ifdef ARCANE_COMPONENT_arcane_impl
134#define ARCANE_IMPL_EXPORT ARCANE_EXPORT
136#define ARCANE_IMPL_EXPORT ARCANE_IMPORT
139#ifdef ARCANE_COMPONENT_arcane_mesh
140#define ARCANE_MESH_EXPORT ARCANE_EXPORT
142#define ARCANE_MESH_EXPORT ARCANE_IMPORT
145#ifdef ARCANE_COMPONENT_arcane_std
146#define ARCANE_STD_EXPORT ARCANE_EXPORT
148#define ARCANE_STD_EXPORT ARCANE_IMPORT
151#ifdef ARCANE_COMPONENT_arcane_script
152#define ARCANE_SCRIPT_EXPORT ARCANE_EXPORT
154#define ARCANE_SCRIPT_EXPORT ARCANE_IMPORT
157#ifdef ARCANE_COMPONENT_arcane_solvers
158#define ARCANE_SOLVERS_EXPORT ARCANE_EXPORT
160#define ARCANE_SOLVERS_EXPORT ARCANE_IMPORT
163#ifdef ARCANE_COMPONENT_arcane_geometry
164#define ARCANE_GEOMETRY_EXPORT ARCANE_EXPORT
166#define ARCANE_GEOMETRY_EXPORT ARCANE_IMPORT
169#ifdef ARCANE_COMPONENT_arcane_thread
170#define ARCANE_THREAD_EXPORT ARCANE_EXPORT
172#define ARCANE_THREAD_EXPORT ARCANE_IMPORT
175#ifdef ARCANE_COMPONENT_arcane_mpi
176#define ARCANE_MPI_EXPORT ARCANE_EXPORT
178#define ARCANE_MPI_EXPORT ARCANE_IMPORT
181#ifdef ARCANE_COMPONENT_arcane_hyoda
182#define ARCANE_HYODA_EXPORT ARCANE_EXPORT
184#define ARCANE_HYODA_EXPORT ARCANE_IMPORT
187#ifdef ARCANE_REAL_USE_APFLOAT
212#define ARCANE_HAS_LONG_LONG
217const double cgrEPSILON_DELTA = 1.0e-2;
218const double cgrPI = 3.14159265358979323846;
223#define ARCANE_REAL(val) ARCCORE_REAL(val)
225#ifdef ARCCORE_REAL_NOT_BUILTIN
226# define ARCANE_REAL_NOT_BUILTIN
229#ifdef ARCCORE_REAL_LONG
230# define ARCANE_REAL_LONG
233#ifdef ARCCORE_REAL_IS_DOUBLE
234# define ARCANE_REAL_IS_DOUBLE
303extern "C++" ARCANE_UTILS_EXPORT
void
319extern "C++" ARCANE_UTILS_EXPORT
void
325extern "C++" ARCANE_UTILS_EXPORT
void
326_internalArcaneMathError(
long double arg_value,
const char* func_name);
328extern "C++" ARCANE_UTILS_EXPORT
void
329_internalArcaneMathError(
long double arg_value1,
long double arg_value2,
const char* func_name);
341ARCCORE_HOST_DEVICE
inline void
344#ifndef ARCCORE_DEVICE_CODE
345 _internalArcaneMathError(arg_value,func_name);
347 ARCANE_UNUSED(arg_value);
348 ARCANE_UNUSED(func_name);
361ARCCORE_HOST_DEVICE
inline void
364#ifndef ARCCORE_DEVICE_CODE
365 _internalArcaneMathError(arg_value1,arg_value2,func_name);
367 ARCANE_UNUSED(arg_value1);
368 ARCANE_UNUSED(arg_value2);
369 ARCANE_UNUSED(func_name);
385extern "C++" ARCANE_UTILS_EXPORT
void
392extern "C++" ARCANE_UTILS_EXPORT
void
407extern "C++" ARCANE_UTILS_EXPORT
void
419extern "C++" ARCANE_UTILS_EXPORT
void
428extern "C++" ARCANE_UTILS_EXPORT Integer
437extern "C++" ARCANE_UTILS_EXPORT Integer
446extern "C++" ARCANE_UTILS_EXPORT Integer
455extern "C++" ARCANE_UTILS_EXPORT Integer
464extern "C++" ARCANE_UTILS_EXPORT Integer
473extern "C++" ARCANE_UTILS_EXPORT Integer
480extern "C++" ARCANE_UTILS_EXPORT
void
489extern "C++" ARCANE_UTILS_EXPORT
499extern "C++" ARCANE_UTILS_EXPORT
505extern "C++" ARCANE_UTILS_EXPORT
511extern "C++" ARCANE_UTILS_EXPORT
523extern "C++" ARCANE_UTILS_EXPORT
531extern "C++" ARCANE_UTILS_EXPORT
552extern "C++" ARCANE_UTILS_EXPORT
bool _checkDebug(
size_t);
553#define ARCANE_DEBUGP(a,b) if (_checkDebug(a)) { arcanePrintf b; }
555#define ARCANE_DEBUGP(a,b)
562# define ARCANE_NOT_YET_IMPLEMENTED(a) \
563{ arcaneNotYetImplemented(__FILE__,__PRETTY_FUNCTION__,__LINE__,(a)); }
565# define ARCANE_NOT_YET_IMPLEMENTED(a) \
566{ arcaneNotYetImplemented(__FILE__,"(NoInfo)",__LINE__,(a)); }
569#define ARCANE_DEPRECATED ARCCORE_DEPRECATED
571#define ARCANE_DEPRECATED_112 ARCANE_DEPRECATED
572#define ARCANE_DEPRECATED_114 ARCANE_DEPRECATED
573#define ARCANE_DEPRECATED_116 ARCANE_DEPRECATED
574#define ARCANE_DEPRECATED_118 ARCANE_DEPRECATED
575#define ARCANE_DEPRECATED_120 ARCANE_DEPRECATED
576#define ARCANE_DEPRECATED_122 ARCANE_DEPRECATED
577#define ARCANE_DEPRECATED_200 ARCANE_DEPRECATED
578#define ARCANE_DEPRECATED_220 ARCANE_DEPRECATED
579#define ARCANE_DEPRECATED_240 ARCANE_DEPRECATED
580#define ARCANE_DEPRECATED_260 ARCANE_DEPRECATED
581#define ARCANE_DEPRECATED_280 ARCANE_DEPRECATED
582#define ARCANE_DEPRECATED_2018 ARCANE_DEPRECATED
583#define ARCANE_DEPRECATED_2018_R(reason) [[deprecated(reason)]]
585#ifndef ARCCORE_DEPRECATED_2021
586#define ARCCORE_DEPRECATED_2021(reason) [[deprecated(reason)]]
589#define ARCANE_DEPRECATED_REASON(reason) [[deprecated(reason)]]
591#ifdef ARCANE_NO_DEPRECATED_LONG_TERM
592#define ARCANE_DEPRECATED_LONG_TERM(reason)
601#define ARCANE_DEPRECATED_LONG_TERM(reason) [[deprecated(reason)]]
606#define ARCANE_NO_DEPRECATED
610#ifdef ARCANE_NO_NOTIFY_DEPRECATED_ARRAY
611#define ARCANE_DEPRECATED_ARRAY
613#define ARCANE_DEPRECATED_ARRAY ARCANE_DEPRECATED
624#define ARCANE_JOIN_HELPER2(a,b) a ## b
625#define ARCANE_JOIN_HELPER(a,b) ARCANE_JOIN_HELPER2(a,b)
626#define ARCANE_JOIN_WITH_LINE(a) ARCANE_JOIN_HELPER(a,__LINE__)
632#define ARCANE_NORETURN ARCCORE_NORETURN
635#define ARCANE_CONSTEXPR ARCCORE_CONSTEXPR
642#define ARCANE_NOEXCEPT ARCCORE_NOEXCEPT
643#define ARCANE_NOEXCEPT_FALSE ARCCORE_NOEXCEPT_FALSE
658# define ARCANE_ALIGNAS(value) __declspec(align(value))
660# define ARCANE_ALIGNAS_PACKED(value) __declspec(align(value))
663# define ARCANE_ALIGNAS_PACKED(value) __attribute__ ((aligned (value),packed))
665# define ARCANE_ALIGNAS(value) __attribute__ ((aligned (value)))
672#ifdef ARCANE_DEPRECATED
673#undef ARCANE_DEPRECATED
680#if defined(ARCANE_CHECK) || defined(ARCANE_DEBUG)
681#ifndef ARCANE_DEBUG_ASSERT
682#define ARCANE_DEBUG_ASSERT
695extern "C++" ARCANE_UTILS_EXPORT
void
711extern "C++" ARCANE_UTILS_EXPORT
void
720arcaneCheckNull(
const void* ptr)
736static const Integer SIMD_PADDING_SIZE = 8;
748extern "C++" ARCANE_UTILS_EXPORT
Integer
757#ifdef ARCANE_DEBUG_ASSERT
758extern "C++" ARCANE_UTILS_EXPORT
void _doAssert(
const char*,
const char*,
const char*,
size_t);
759template<
typename T>
inline T*
760_checkPointer(T* t,
const char* file,
const char* func,
size_t line)
763 _doAssert(
"ARCANE_ASSERT",file,func,line);
769# define ARCANE_D_WHERE(a) Arcane::_doAssert(a,__FILE__,__PRETTY_FUNCTION__,__LINE__)
770# define ARCANE_DCHECK_POINTER(a) Arcane::_checkPointer((a),__FILE__,__PRETTY_FUNCTION__,__LINE__);
772# define ARCANE_D_WHERE(a) Arcane::_doAssert(a,__FILE__,"(NoInfo)",__LINE__)
773# define ARCANE_DCHECK_POINTER(a) Arcane::_checkPointer((a),__FILE__,"(NoInfo"),__LINE__);
775# define ARCANE_CHECK_PTR(a) \
776 {if (!(a)){Arcane::arcanePrintf("Null value");ARCANE_D_WHERE("ARCANE_ASSERT");}}
778# define ARCANE_ASSERT(a,b) \
779 {if (!(a)){ Arcane::arcanePrintf("Assertion '%s' fails:",#a); Arcane::arcanePrintf b; ARCANE_D_WHERE("ARCANE_ASSERT");}}
780# define ARCANE_WARNING(a) \
781 { Arcane::arcanePrintf a; ARCANE_D_WHERE("ARCANE_WARNING"); }
783# define ARCANE_CHECK_PTR(a)
784# define ARCANE_ASSERT(a,b)
785# define ARCANE_WARNING(a)
786# define ARCANE_DCHECK_POINTER(a) (a);
798#define ARCANE_THROW(exception_class,...) \
799 throw exception_class (A_FUNCINFO,Arcane::String::format(__VA_ARGS__))
809#define ARCANE_FATAL(...)\
810 throw Arcane::FatalErrorException(A_FUNCINFO,Arcane::String::format(__VA_ARGS__))
821arcaneThrowIfNull(
void* ptr,
const char* ptr_name,
const char* text)
836static inline const void*
837arcaneThrowIfNull(
const void* ptr,
const char* ptr_name,
const char* text)
852template<
typename T>
inline T*
853arcaneThrowIfNull(T* ptr,
const char* ptr_name,
const char* text)
868#define ARCANE_CHECK_POINTER(ptr) \
869 arcaneThrowIfNull(ptr,#ptr,nullptr)
877#define ARCANE_CHECK_POINTER2(ptr,text)\
878 arcaneThrowIfNull(ptr,#ptr,text)
891extern "C++" ARCANE_UTILS_EXPORT
void
892arcaneRangeError [[noreturn]] (Int64 i,Int64 max_size);
897static inline constexpr ARCCORE_HOST_DEVICE
void
898arcaneCheckAt(Int64 i,Int64 max_size)
900#ifndef ARCCORE_DEVICE_CODE
901 if (i<0 || i>=max_size)
902 arcaneRangeError(i,max_size);
905 ARCANE_UNUSED(max_size);
909#if defined(ARCANE_CHECK) || defined(ARCANE_DEBUG)
910#define ARCANE_CHECK_AT(a,b) ::Arcane::arcaneCheckAt((a),(b))
912#define ARCANE_CHECK_AT(a,b)
Emulation de réel en précision arbitraire.
Type flottant demi-précision.
Interface du gestionnaire de traces.
Constructeur de chaîne de caractère unicode.
Vue sur une chaîne de caractères UTF-8.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
void arcaneNoReferenceErrorCallTerminate(const void *ptr)
Utilisation d'un objet non référencé.
Int64 arcaneCurrentThread()
Retourne l'identifiant du thread courant.
Integer arcaneCheckArraySize(unsigned long long size)
Vérifie que size peut être converti dans un 'Integer' pour servir de taille à un tableau....
bool arcaneIsCheck()
Vrai si on est en mode vérification.
bool arcaneHasThread()
Vrai si arcane est compilé avec le support des threads ET qu'ils sont actifs.
void arcaneSetHasThread(bool v)
Active ou désactive le support des threads.
void arcaneNullPointerError()
Signalue l'utilisation d'un pointeur nul.
void arcanePrintf(const char *,...)
Encapsulation de la fonction C printf.
void arcaneNotYetImplemented(const char *file, const char *func, unsigned long line, const char *text)
Signale une fonction non implémentée.
Arccore::Int8 Int8
Type représentant un entier sur 8 bits.
Integer arcaneSizeWithPadding(Integer size)
Retourne la taille avec padding pour une taille size.
void arcaneDeprecated(const char *file, const char *func, unsigned long line, const char *text)
Signale l'utilisation d'une fonction obsolète.
bool arcaneIsDebug()
Vrai si la macro ARCANE_DEBUG est définie.
void arcaneSetCheck(bool v)
Active ou désactive le mode vérification.
void arcaneNoReferenceError(const void *ptr)
Utilisation d'un objet non référencé.
bool _checkDebug(unsigned int val)
float Float32
Type flottant IEEE-753 simple précision (binary32)
Int32 LocalIdType
Type des entiers utilisés pour stocker les identifiants locaux des entités.
__host__ __device__ void arcaneMathError(long double arg_value, const char *func_name)
Signale un argument invalide d'une fonction mathématique.
void _doAssert(const char *text, const char *file, const char *func, size_t line)
void arcaneDebugPause(const char *msg)
Passe en mode pause ou lance une erreur fatale.
Int64 UniqueIdType
Type des entiers utilisés pour stocker les identifiants uniques (globaux) des entités.
void arcaneCheckAlignment(const void *ptr, Integer alignment)
Vérifie que ptr est aligné sur alignment octets. Si ce n'est pas le cas, Sinon, lance une exception d...
void arcaneThrowNullPointerError(const char *ptr_name, const char *text)
Signalee l'utilisation d'un pointeur nul en envoyant une exception.
Espace de nom de Arccore.
double Real
Type représentant un réel.
Int32 Integer
Type représentant un entier.
std::uint32_t UInt32
Type entier non signé sur 32 bits.
void * Pointer
Type représentant un pointeur.
std::int64_t Int64
Type entier signé sur 64 bits.
std::uint64_t UInt64
Type entier non signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.
std::int8_t Int8
Type entier signé sur 8 bits.
std::int16_t Int16
Type entier signé sur 16 bits.