jaulib v1.3.0
Jau Support Library (C++, Java, ..)
Namespaces | Classes | Typedefs | Enumerations | Functions | Variables
jau Namespace Reference

__pack(...): Produces MSVC, clang and gcc compatible lead-in and -out macros. More...

Namespaces

namespace  codec
 
namespace  cpu
 
namespace  CT
 Functions for constant time operations on data and testing of constant time annotations using valgrind.
 
namespace  float_literals
 
namespace  fraction_tv
 
namespace  fractions_i64
 fractions namespace to provide fraction constants using int64_t as underlying integral integer type.
 
namespace  fractions_i64_literals
 
namespace  fs
 Author: Sven Gothel sgoth.nosp@m.el@j.nosp@m.ausof.nosp@m.t.co.nosp@m.m Copyright (c) 2022 Gothel Software e.K.
 
namespace  func
 
namespace  impl
 
namespace  int_literals
 
namespace  io
 
namespace  jni
 
namespace  lang
 
namespace  math
 
namespace  mp
 big_int_t (this file) (c) 2024 Gothel Software e.K.
 
namespace  os
 Author: Sven Gothel sgoth.nosp@m.el@j.nosp@m.ausof.nosp@m.t.co.nosp@m.m Copyright (c) 2024 Gothel Software e.K.
 

Classes

class  call_on_release
 Call on release allows the user to pass a function to be called at destruction of this instance. More...
 
struct  callocator
 A simple allocator using POSIX C functions: ::malloc(), ::free() and ::realloc(). More...
 
struct  callocator_sec
 A simple secure allocator for integral types using POSIX C functions: ::malloc() and ::free(). More...
 
struct  counting_allocator
 Performance counter std::allocator specialization. More...
 
struct  counting_callocator
 Performance counter jau::callocator specialization. More...
 
class  cow_darray
 Implementation of a Copy-On-Write (CoW) using jau::darray as the underlying storage, exposing lock-free read operations using SC-DRF atomic synchronization. More...
 
class  cow_ro_iterator
 Implementation of a Copy-On-Write (CoW) read-onlu iterator over immutable value_type storage. More...
 
class  cow_rw_iterator
 Implementation of a Copy-On-Write (CoW) read-write iterator over mutable value_type storage. More...
 
class  cow_vector
 Implementation of a Copy-On-Write (CoW) using std::vector as the underlying storage, exposing lock-free read operations using SC-DRF atomic synchronization. More...
 
class  darray
 Implementation of a dynamic linear array storage, aka vector. More...
 
class  darray_sorted
 Extension to darray resulting in a sorted darray via insert(). More...
 
class  environment
 Main jau environment class, supporting environment variable access and fetching elapsed time using its stored startup-time. More...
 
struct  EUI48
 A packed 48 bit EUI-48 identifier, formerly known as MAC-48 or simply network device MAC address (Media Access Control address). More...
 
struct  EUI48Sub
 A 48 bit EUI-48 sub-identifier, see EUI48. More...
 
class  ExceptionBase
 
struct  float_bytes
 
struct  float_bytes< sizeof(double)>
 
struct  float_bytes< sizeof(float)>
 
struct  float_bytes< sizeof(long double)>
 
class  fraction
 Fraction template type using integral values, evaluated at runtime. More...
 
struct  fraction_timespec
 Timespec structure using int64_t for its components in analogy to struct timespec_t on 64-bit platforms. More...
 
class  function
 Class template jau::function is a general-purpose static-polymorphic function wrapper. More...
 
class  function< R(A...)>
 Class template jau::function is a general-purpose static-polymorphic function wrapper. More...
 
struct  has_builtin_bit_cast
 Convenience type trait for __has_builtin(__builtin_bit_cast). More...
 
struct  has_endian_big
 A big-endian type trait for convenience . More...
 
struct  has_endian_little
 A little-endian type trait for convenience . More...
 
struct  has_member_of_pointer
 Checker for member of pointer '->' operator with convertible pointer return, no arguments. More...
 
struct  has_member_of_pointer< C, typename std::enable_if< std::is_pointer< decltype(std::declval< C >().operator->())>::value >::type >
 
class  IllegalArgumentException
 
class  IllegalStateException
 
class  IndexOutOfBoundsException
 
class  InternalError
 
class  IOError
 
struct  is_container_memmove_compliant
 template< class T > is_container_memmove_compliant<T>::value compile-time Type Trait, determining whether the given template class claims to be container memmove compliant, see @Ref darray_memmove. More...
 
struct  is_container_memmove_compliant< T, std::void_t< typename T::container_memmove_compliant > >
 template< class T > is_container_memmove_compliant<T>::value compile-time Type Trait, determining whether the given template class claims to be container memmove compliant, see @Ref darray_memmove. More...
 
struct  is_cow_type
 template< class T > is_cow_type<T>::value compile-time Type Trait, determining whether the given template class is a CoW type, e.g. More...
 
struct  is_cow_type< T, std::void_t< typename T::cow_container_t > >
 template< class T > is_cow_type<T>::value compile-time Type Trait, determining whether the given template class is a CoW type, e.g. More...
 
struct  is_darray_type
 template< class T > is_darray_type<T>::value compile-time Type Trait, determining whether the given template class is a - or has a darray type, e.g. More...
 
struct  is_darray_type< T, std::void_t< typename T::darray_tag > >
 template< class T > is_darray_type<T>::value compile-time Type Trait, determining whether the given template class is a - or has a darray type, e.g. More...
 
struct  is_enforcing_secmem
 template< class T > is_enforcing_secmem<T>::value compile-time Type Trait, determining whether the given template class enforces secmem, see @Ref darray_secmem. More...
 
struct  is_enforcing_secmem< T, std::void_t< typename T::enforce_secmem > >
 template< class T > is_enforcing_secmem<T>::value compile-time Type Trait, determining whether the given template class enforces secmem, see @Ref darray_secmem. More...
 
struct  is_rtti_available_t
 Template type trait evaluating std::true_type{} if RTTI is available, otherwise std::false_type{}. More...
 
class  latch
 Inspired by std::latch of C++20. More...
 
class  NotImplementedError
 
class  NullPointerException
 
struct  ordered_atomic
 std::atomic<T> type with predefined fixed std::memory_order, not allowing changing the memory model on usage and applying the set order to all operator. More...
 
class  OutOfMemoryError
 
struct  packed_t
 Support aligned memory transfer from and to potentially unaligned memory. More...
 
class  POctets
 Persistent endian aware octet data, i.e. More...
 
class  ringbuffer
 Ring buffer implementation, a.k.a circular buffer, exposing lock-free get*(..) and put*(..) methods. More...
 
class  root_environment
 Base jau environment class, merely to tag all environment settings by inheritance and hence documentation. More...
 
class  RuntimeException
 
class  sc_atomic_critical
 This class provides a RAII-style Sequentially Consistent (SC) data race free (DRF) critical block. More...
 
class  service_runner
 Service runner, a reusable dedicated thread performing custom user services. More...
 
class  simple_timer
 A simple timer for timeout and interval applications, using one dedicated service_runner thread per instance. More...
 
struct  sint_bytes
 
struct  sint_bytes< 4 >
 
struct  sint_bytes< 8 >
 
class  TOctets
 Transient endian aware octet data, i.e. More...
 
class  TOctetSlice
 Transient endian aware octet data slice, i.e. More...
 
class  TROOctets
 Transient read only and endian aware octet data, i.e. More...
 
struct  type_cue
 Helper, allowing simple access to compile time typename and Type traits information, see jau::type_name_cue to setup typename's string representation. More...
 
class  type_info
 Generic type information using either Runtime type information (RTTI) or Compile time type information (CTTI) More...
 
struct  type_name_cue
 Helper, allowing simple access and provision of a typename string representation at compile time, see jau::type_cue for usage. More...
 
struct  uint128dp_t
 A 128-bit packed uint8_t data array. More...
 
struct  uint192dp_t
 A 196-bit packed uint8_t data array. More...
 
struct  uint256dp_t
 A 256-bit packed uint8_t data array. More...
 
struct  uint_bytes
 
struct  uint_bytes< 4 >
 
struct  uint_bytes< 8 >
 
class  UnsupportedOperationException
 
class  uuid128_t
 
class  uuid16_t
 
class  uuid32_t
 
class  uuid_t
 

Typedefs

typedef jau::uint_bytes< sizeof(double)>::type double_uint_t
 
typedef float float32_t
 
typedef double float64_t
 
typedef jau::uint_bytes< sizeof(float)>::type float_uint_t
 
typedef fraction< int64_t > fraction_i64
 fraction using int64_t as integral type More...
 
typedef fraction< uint64_t > fraction_u64
 fraction using uint64_t as integral type More...
 
typedef uint_fast32_t nsize_t
 Natural 'size_t' alternative using uint_fast32_t as its natural sized type. More...
 
typedef ordered_atomic< bool, std::memory_order_relaxed > relaxed_atomic_bool
 Relaxed non-SC atomic integral scalar boolean. More...
 
typedef ordered_atomic< jau::fraction_i64, std::memory_order_relaxed > relaxed_atomic_fraction_i64
 Relaxed non-SC atomic integral scalar jau::fraction_i64. More...
 
typedef ordered_atomic< jau::fraction_u64, std::memory_order_relaxed > relaxed_atomic_fraction_u64
 Relaxed non-SC atomic integral scalar jau::fraction_u64. More...
 
typedef ordered_atomic< int, std::memory_order_relaxed > relaxed_atomic_int
 Relaxed non-SC atomic integral scalar integer. More...
 
typedef ordered_atomic< int16_t, std::memory_order_relaxed > relaxed_atomic_int16
 Relaxed non-SC atomic integral scalar int16_t. More...
 
typedef ordered_atomic< int32_t, std::memory_order_relaxed > relaxed_atomic_int32
 Relaxed non-SC atomic integral scalar int32_t. More...
 
typedef ordered_atomic< int64_t, std::memory_order_relaxed > relaxed_atomic_int64
 Relaxed non-SC atomic integral scalar int64_t. More...
 
typedef ordered_atomic< int8_t, std::memory_order_relaxed > relaxed_atomic_int8
 Relaxed non-SC atomic integral scalar int8_t. More...
 
typedef ordered_atomic< jau::nsize_t, std::memory_order_relaxed > relaxed_atomic_nsize_t
 Relaxed non-SC atomic integral scalar jau::nsize_t. More...
 
typedef ordered_atomic< std::size_t, std::memory_order_relaxed > relaxed_atomic_size_t
 Relaxed non-SC atomic integral scalar size_t. More...
 
typedef ordered_atomic< jau::snsize_t, std::memory_order_relaxed > relaxed_atomic_snsize_t
 Relaxed non-SC atomic integral scalar jau::snsize_t. More...
 
typedef ordered_atomic< ssize_t, std::memory_order_relaxed > relaxed_atomic_ssize_t
 Relaxed non-SC atomic integral scalar ssize_t. More...
 
typedef ordered_atomic< uint16_t, std::memory_order_relaxed > relaxed_atomic_uint16
 Relaxed non-SC atomic integral scalar uint16_t. More...
 
typedef ordered_atomic< uint32_t, std::memory_order_relaxed > relaxed_atomic_uint32
 Relaxed non-SC atomic integral scalar uint32_t. More...
 
typedef ordered_atomic< uint64_t, std::memory_order_relaxed > relaxed_atomic_uint64
 Relaxed non-SC atomic integral scalar uint64_t. More...
 
typedef ordered_atomic< uint8_t, std::memory_order_relaxed > relaxed_atomic_uint8
 Relaxed non-SC atomic integral scalar uint8_t. More...
 
typedef ordered_atomic< bool, std::memory_order_seq_cst > sc_atomic_bool
 SC atomic integral scalar boolean. More...
 
typedef ordered_atomic< jau::fraction_i64, std::memory_order_seq_cst > sc_atomic_fraction_i64
 SC atomic integral scalar jau::fraction_i64. More...
 
typedef ordered_atomic< jau::fraction_u64, std::memory_order_seq_cst > sc_atomic_fraction_u64
 SC atomic integral scalar jau::fraction_u64. More...
 
typedef ordered_atomic< int, std::memory_order_seq_cst > sc_atomic_int
 SC atomic integral scalar integer. More...
 
typedef ordered_atomic< int16_t, std::memory_order_seq_cst > sc_atomic_int16
 SC atomic integral scalar int16_t. More...
 
typedef ordered_atomic< int32_t, std::memory_order_seq_cst > sc_atomic_int32
 SC atomic integral scalar int32_t. More...
 
typedef ordered_atomic< int64_t, std::memory_order_seq_cst > sc_atomic_int64
 SC atomic integral scalar int64_t. More...
 
typedef ordered_atomic< int8_t, std::memory_order_seq_cst > sc_atomic_int8
 SC atomic integral scalar int8_t. More...
 
typedef ordered_atomic< jau::nsize_t, std::memory_order_seq_cst > sc_atomic_nsize_t
 SC atomic integral scalar jau::nsize_t. More...
 
typedef ordered_atomic< std::size_t, std::memory_order_seq_cst > sc_atomic_size_t
 SC atomic integral scalar size_t. More...
 
typedef ordered_atomic< jau::snsize_t, std::memory_order_seq_cst > sc_atomic_snsize_t
 SC atomic integral scalar jau::snsize_t. More...
 
typedef jau::ordered_atomic< ssize_t, std::memory_order_seq_cst > sc_atomic_ssize_t
 SC atomic integral scalar ssize_t. More...
 
typedef ordered_atomic< uint16_t, std::memory_order_seq_cst > sc_atomic_uint16
 SC atomic integral scalar uint16_t. More...
 
typedef ordered_atomic< uint32_t, std::memory_order_seq_cst > sc_atomic_uint32
 SC atomic integral scalar uint32_t. More...
 
typedef ordered_atomic< uint64_t, std::memory_order_seq_cst > sc_atomic_uint64
 SC atomic integral scalar uint64_t. More...
 
typedef ordered_atomic< uint8_t, std::memory_order_seq_cst > sc_atomic_uint8
 SC atomic integral scalar uint8_t. More...
 
typedef float si_lengthf32_t
 Length in fractions of meter using float. More...
 
typedef float si_massf32_t
 Mass in fractions of kilograms using float. More...
 
typedef float si_speedf32_t
 Speed in fractions of meter/seconds using float. More...
 
typedef float si_timef32_t
 Time in fractions of seconds using float. More...
 
typedef int_fast32_t snsize_t
 Natural 'ssize_t' alternative using int_fast32_t as its natural sized type. More...
 

Enumerations

enum class  endian_t : uint32_t {
  endian_t::little = 0x41424344U , endian_t::big = 0x44434241U , endian_t::pdp = 0x43444142U , endian_t::honeywell = 0x42414443U ,
  endian_t::undefined = 0x00000000U , endian_t::native = impl::get_host_order()
}
 Endian identifier, indicating endianess of all scalar types. More...
 
enum class  lb_endian_t : uint32_t { lb_endian_t::little = static_cast<uint32_t>( endian_t::little ) , lb_endian_t::big = static_cast<uint32_t>( endian_t::big ) , lb_endian_t::native = static_cast<uint32_t>( endian_t::native ) }
 Simplified reduced endian type only covering little- and big-endian. More...
 
enum class  TypeTraitGroup : uint8_t {
  TypeTraitGroup::NONE = 0b00000000 , TypeTraitGroup::PRIMARY_TYPE_CAT = 0b00000001 , TypeTraitGroup::TYPE_PROPERTIES = 0b00000010 , TypeTraitGroup::COMPOSITE_TYPE_CAT = 0b00000100 ,
  TypeTraitGroup::SUPPORTED_OPERATIONS = 0b00001000 , TypeTraitGroup::ALL = 0b11111111
}
 Enumerating the different groups of type traits. More...
 

Functions

void ABORT_impl (const char *func, const char *file, const int line, const char *format,...) noexcept
 Use for unconditional ::abort() call with given messages, prefix '[elapsed_time] ABORT @ file:line func: '. More...
 
template<typename int_type >
constexpr fraction< int_type > abs (const fraction< int_type > &rhs) noexcept
 Returns the absolute fraction. More...
 
constexpr fraction_timespec abs (const fraction_timespec &rhs) noexcept
 Returns the absolute fraction_timespec. More...
 
template<typename T , std::enable_if_t< std::is_arithmetic_v< T > &&!std::is_unsigned_v< T >, bool > = true>
constexpr T abs (const T x) noexcept
 Returns the absolute value of an arithmetic number (w/ branching) in O(1) More...
 
mp::BigInt abs (mp::BigInt x) noexcept
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
constexpr bool add_overflow (const T a, const T b, T &res) noexcept
 Integer overflow aware addition returning true if overflow occurred, otherwise false having the result stored in res. More...
 
template<typename T , std::enable_if_t< std::is_floating_point_v< T >, bool > = true>
constexpr T adeg_to_rad (const T arc_degree) noexcept
 Converts arc-degree to radians. More...
 
template<class T >
std::enable_if< std::is_floating_point_v< T >, bool >::type almost_equal (const T &a, const T &b, int ulp=1, const T &epsilon=std::numeric_limits< T >::epsilon()) noexcept
 Returns true, if both floating point values are equal in the sense that their potential difference is less or equal epsilon * |a+b| * ulp, where |a+b| scales epsilon to the magnitude of used values. More...
 
constexpr EUI48 be_to_cpu (EUI48 const &n) noexcept
 
constexpr uint128dp_t be_to_cpu (uint128dp_t const &n) noexcept
 
constexpr uint16_t be_to_cpu (uint16_t const n) noexcept
 
constexpr uint192dp_t be_to_cpu (uint192dp_t const &n) noexcept
 
constexpr uint256dp_t be_to_cpu (uint256dp_t const &n) noexcept
 
constexpr uint32_t be_to_cpu (uint32_t const n) noexcept
 
constexpr uint64_t be_to_cpu (uint64_t const &n) noexcept
 
template<typename R , typename I , typename... A>
jau::function< R(A...)> bind_capref (I *data_ptr, R(*func)(I *, A...)) noexcept
 Bind given data by passing the captured reference (pointer) to the value and non-void function to an anonymous function using func::capref_target_t. More...
 
template<typename I , typename... A>
jau::function< void(A...)> bind_capref (I *data_ptr, void(*func)(I *, A...)) noexcept
 Bind given data by passing the captured reference (pointer) to the value and void function to an anonymous function using func::capref_target_t. More...
 
template<typename R , typename I , typename... A>
jau::function< R(A...)> bind_capval (const I &data, R(*func)(I &, A...)) noexcept
 Bind given data by copying the captured value and the given non-void function to an anonymous function using func::capval_target_t. More...
 
template<typename I , typename... A>
jau::function< void(A...)> bind_capval (const I &data, void(*func)(I &, A...)) noexcept
 Bind given data by copying the captured value and the given void function to an anonymous function using func::capval_target_t. More...
 
template<typename R , typename I , typename... A>
jau::function< R(A...)> bind_capval (I &&data, R(*func)(I &, A...)) noexcept
 Bind given data by moving the captured value and copying the given non-void function to an anonymous function using func::capval_target_t. More...
 
template<typename I , typename... A>
jau::function< void(A...)> bind_capval (I &&data, void(*func)(I &, A...)) noexcept
 Bind given data by moving the captured value and copying the given void function to an anonymous function using func::capval_target_t. More...
 
template<typename R , typename... A>
jau::function< R(A...)> bind_free (R(*func)(A...)) noexcept
 Bind given non-void free-function to an anonymous function using func::free_target_t. More...
 
template<typename... A>
jau::function< void(A...)> bind_free (void(*func)(A...)) noexcept
 Bind given void free-function to an anonymous function using func::free_target_t. More...
 
template<typename R , typename C , typename... A>
jau::function< R(A...)> bind_member (C *base, R(C::*mfunc)(A...)) noexcept
 Bind given class instance and non-void member function to an anonymous function using func_member_targer_t. More...
 
template<typename C , typename... A>
jau::function< void(A...)> bind_member (C *base, void(C::*mfunc)(A...)) noexcept
 Bind given class instance and void member function to an anonymous function using func_member_targer_t. More...
 
template<typename R , typename C0 , typename C1 , typename... A>
jau::function< R(A...)> bind_member (C1 *base, R(C0::*mfunc)(A...)) noexcept
 Bind given class instance and non-void member function to an anonymous function using func_member_targer_t. More...
 
template<typename C0 , typename C1 , typename... A>
jau::function< void(A...)> bind_member (C1 *base, void(C0::*mfunc)(A...)) noexcept
 Bind given class instance and void member function to an anonymous function using func_member_targer_t. More...
 
template<typename R , typename... A>
jau::function< R(A...)> bind_std (uint64_t id, std::function< R(A...)> func) noexcept
 Bind given non-void std::function to an anonymous function using func::std_target_t. More...
 
template<typename... A>
jau::function< void(A...)> bind_std (uint64_t id, std::function< void(A...)> func) noexcept
 Bind given void std::function to an anonymous function using func::std_target_t. More...
 
template<class Dest , class Source >
constexpr std::enable_if_t< sizeof(Dest)==sizeof(Source) &&std::is_trivially_copyable_v< Dest > &&std::is_trivially_copyable_v< Source >, Dest > bit_cast (const Source &src) noexcept
 C++20 bit_cast<>(arg) implementation for C++17. More...
 
constexpr uint64_t bit_value (const double a) noexcept
 Returns the unsigned integer representation according to IEEE 754 (IEC 559) double floating-point bit layout. More...
 
constexpr uint32_t bit_value (const float a) noexcept
 Returns the unsigned integer representation according to IEEE 754 (IEC 559) single floating-point bit layout. More...
 
constexpr uint64_t bit_value_raw (const double a) noexcept
 Returns the unsigned integer representation according to IEEE 754 (IEC 559) double floating-point bit layout. More...
 
constexpr uint32_t bit_value_raw (const float a) noexcept
 Returns the unsigned integer representation according to IEEE 754 (IEC 559) single floating-point bit layout. More...
 
template<class T , std::enable_if_t< std::is_floating_point_v< T >, bool > = true>
jau::uint_bytes< sizeof(T)>::type bit_value_raw (const T a) noexcept
 Returns the unsigned integer representation according to IEEE 754 (IEC 559) floating-point bit layout. More...
 
constexpr EUI48 bswap (EUI48 const &source) noexcept
 
constexpr uint128dp_t bswap (uint128dp_t const &source) noexcept
 
constexpr uint16_t bswap (uint16_t const source) noexcept
 
constexpr uint192dp_t bswap (uint192dp_t const &source) noexcept
 
constexpr uint256dp_t bswap (uint256dp_t const &source) noexcept
 
constexpr uint32_t bswap (uint32_t const source) noexcept
 
constexpr uint64_t bswap (uint64_t const &source) noexcept
 
constexpr void bswap (uint8_t *sink, uint8_t const *source, nsize_t len)
 
static constexpr void bswap_6bytes (uint8_t *sink, const uint8_t *source) noexcept
 
std::string & byteHexString (std::string &dest, const uint8_t value, const bool lowerCase) noexcept
 Produce a hexadecimal string representation of the given byte value. More...
 
template<class uint8_container_type , std::enable_if_t< std::is_integral_v< typename uint8_container_type::value_type > &&std::is_convertible_v< typename uint8_container_type::value_type, uint8_t >, bool > = true>
std::string bytesHexString (const uint8_container_type &bytes, const bool lsbFirst, const bool lowerCase=true) noexcept
 
std::string bytesHexString (const void *data, const nsize_t offset, const nsize_t length, const bool lsbFirst, const bool lowerCase=true) noexcept
 Produce a hexadecimal string representation of the given byte values. More...
 
const uint8_t * cast_char_ptr_to_uint8 (const char *s) noexcept
 
const char * cast_uint8_ptr_to_char (const uint8_t *b) noexcept
 
char * cast_uint8_ptr_to_char (uint8_t *b) noexcept
 
const mp::BigIntclamp (const mp::BigInt &x, const mp::BigInt &min_val, const mp::BigInt &max_val) noexcept
 
template<typename T , std::enable_if_t< std::is_arithmetic_v< T >, bool > = true>
constexpr T clamp (const T x, const T min_val, const T max_val) noexcept
 Returns constrained integral value to lie between given min- and maximum value (w/ branching) in O(1). More...
 
mp::BigIntclamp (mp::BigInt &x, mp::BigInt &min_val, mp::BigInt &max_val) noexcept
 
void clear_bit_uint32 (const uint8_t nr, uint32_t &mask)
 
void clear_bit_uint64 (const uint8_t nr, uint64_t &mask)
 
template<class T , std::enable_if_t< std::is_floating_point_v< T >, bool > = true>
constexpr int compare (const T a, const T b) noexcept
 Returns -1, 0 or 1 if a is less, equal or greater than b, disregarding epsilon but considering NaN, -Inf and +Inf. More...
 
template<class T , std::enable_if_t< std::is_floating_point_v< T >, bool > = true>
constexpr int compare (const T a, const T b, const T epsilon) noexcept
 Returns -1, 0 or 1 if a is less, equal or greater than b, considering epsilon and NaN, -Inf and +Inf. More...
 
void COND_PRINT_impl (const char *format,...) noexcept
 
template<class InputArray , class T >
constexpr bool contains (InputArray &array, const T &value)
 Return true if value is contained in array. More...
 
constexpr EUI48 cpu_to_be (EUI48 const &h) noexcept
 
constexpr uint128dp_t cpu_to_be (uint128dp_t const &h) noexcept
 
constexpr uint16_t cpu_to_be (uint16_t const h) noexcept
 
constexpr uint192dp_t cpu_to_be (uint192dp_t const &h) noexcept
 
constexpr uint256dp_t cpu_to_be (uint256dp_t const &h) noexcept
 
constexpr uint32_t cpu_to_be (uint32_t const h) noexcept
 
constexpr uint64_t cpu_to_be (uint64_t const &h) noexcept
 
constexpr EUI48 cpu_to_le (EUI48 const &h) noexcept
 
constexpr uint128dp_t cpu_to_le (uint128dp_t const &h) noexcept
 
constexpr uint16_t cpu_to_le (uint16_t const h) noexcept
 
constexpr uint192dp_t cpu_to_le (uint192dp_t const &h) noexcept
 
constexpr uint256dp_t cpu_to_le (uint256dp_t const &h) noexcept
 
constexpr uint32_t cpu_to_le (uint32_t const h) noexcept
 
constexpr uint64_t cpu_to_le (uint64_t const &h) noexcept
 
template<typename T , std::enable_if_t< std::is_arithmetic_v< T > &&std::is_integral_v< T > &&!std::is_unsigned_v< T >, bool > = true>
constexpr T ct_abs (const T x) noexcept
 Returns the absolute value of an arithmetic number (w/o branching) in O(1) and constant time (CT), while ct_abs(INT_MIN) is undefined behavior (UB) instead of being mapped correctly to INT_MAX like jau::abs() does, see above. More...
 
constexpr uint32_t ct_bit_count (uint32_t n) noexcept
 Returns the number of set bits within given 32bit integer (w/o branching) in O(1) and constant time (CT). More...
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
constexpr T ct_clamp (const T x, const T min_val, const T max_val) noexcept
 Returns constrained integral value to lie between given min- and maximum value for MIN <= x - y <= MAX (w/o branching) in O(1) and constant time (CT). More...
 
template<typename T , std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T >, bool > = true>
constexpr T ct_expand_top_bit (T x)
 Returns ~0 (2-complement) if top bit of arg is set, otherwise 0 (w/o branching) in O(1) and constant time (CT). More...
 
template<typename T , std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T >, bool > = true>
constexpr T ct_is_zero (T x)
 Returns ~0 (2-complement) if arg is zero, otherwise 0 (w/o branching) in O(1) and constant time (CT). More...
 
template<typename T , std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T >, bool > = true>
constexpr T ct_masked_merge (T mask, T a_if_masked, T b_if_unmasked)
 Returns merged a_if_masked bits selected by mask 1 bits and b_if_unmasked bits selected by mask 0 bits (w/o branching) in O(1) and constant time (CT). More...
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
constexpr T ct_max (const T x, const T y) noexcept
 Returns the maximum of two integrals for MIN <= x - y <= MAX (w/o branching) in O(1) and constant time (CT). More...
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
constexpr T ct_min (const T x, const T y) noexcept
 Returns the minimum of two integrals for MIN <= x - y <= MAX (w/o branching) in O(1) and constant time (CT). More...
 
constexpr uint32_t ct_next_power_of_2 (uint32_t n)
 Returns the next higher power of 2 of given unsigned 32-bit n (w/o branching) in O(1) and constant time (CT). More...
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
constexpr int ct_sign (const T x) noexcept
 Returns the value of the sign function (w/o branching) in O(1) and constant time (CT) More...
 
template<typename T >
constexpr const char * ctti_name () noexcept
 Returns the type name of given type T using template Compile Time Type Information (CTTI) only with static constant storage duration. More...
 
template<typename R , typename L , typename... A>
constexpr const char * ctti_name () noexcept
 Returns the type name of given function types R(*L)(A...) using template Compile Time Type Information (CTTI) only with static constant storage duration. More...
 
void DBG_PRINT_impl (const char *format,...) noexcept
 
std::string demangle_name (const char *mangled_name) noexcept
 Returns the demangled given mangled_name if successful, otherwise the mangled_name. More...
 
std::string dfa_utf8_decode (const uint8_t *buffer, const size_t buffer_size)
 Returns all valid consecutive UTF-8 characters within buffer in the range up to buffer_size or until EOS. More...
 
uint32_t dfa_utf8_decode (uint32_t &state, uint32_t &codep, const uint32_t byte_value)
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
constexpr nsize_t digits10 (const T x, const bool sign_is_digit=true) noexcept
 Returns the number of decimal digits of the given integral value number using std::log10<T>(). More...
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
constexpr nsize_t digits10 (const T x, const snsize_t x_sign, const bool sign_is_digit=true) noexcept
 Returns the number of decimal digits of the given integral value number using std::log10<T>(). More...
 
constexpr double double_value (const uint64_t a) noexcept
 Converting IEEE 754 (IEC 559) double floating-point bit layout to double, see bit_value() More...
 
template<class T >
std::enable_if< std::is_integral_v< T >, bool >::type constexpr equals (const T &a, const T &b) noexcept
 Returns true if both values are equal. More...
 
template<class T >
std::enable_if< std::is_integral_v< T >, bool >::type constexpr equals (const T &a, const T &b, const T &allowed_deviation) noexcept
 Returns true if both values are equal, i.e. More...
 
template<class T >
std::enable_if< std::is_floating_point_v< T >, bool >::type constexpr equals (const T &a, const T &b, const T &epsilon=std::numeric_limits< T >::epsilon()) noexcept
 Returns true if both values are equal, i.e. More...
 
template<class T >
std::enable_if< std::is_floating_point_v< T >, bool >::type constexpr equals (const T &a, const T &b, int ulp, const T &epsilon=std::numeric_limits< T >::epsilon()) noexcept
 Returns true, if both floating point values are equal in the sense that their potential difference is less or equal epsilon * ulp. More...
 
template<class T >
std::enable_if< std::is_floating_point_v< T >, bool >::type constexpr equals2 (const T &a, const T &b, const T &epsilon=std::numeric_limits< T >::epsilon()) noexcept
 Returns true if both values are equal, i.e. More...
 
template<class T >
std::enable_if< std::is_floating_point_v< T >, bool >::type constexpr equals_raw (const T &a, const T &b) noexcept
 Returns true if both values are equal disregarding epsilon but considering NaN, -Inf and +Inf. More...
 
void ERR_PRINT_impl (const char *prefix, const bool backtrace, const char *func, const char *file, const int line, const char *format,...) noexcept
 
void ERR_PRINTv (const char *func, const char *file, const int line, const char *format, va_list args) noexcept
 Use for unconditional error messages, prefix '[elapsed_time] Error @ file:line func: '. More...
 
template<class InputIt , class T >
constexpr InputIt find (InputIt first, InputIt last, const T &value)
 Like std::find() of 'algorithm'. More...
 
template<class T >
const T::value_type * find_const (T &data, typename T::value_type const &elem, std::enable_if_t< !is_cow_type< T >::value, bool >=true) noexcept
 
template<class T >
const T::value_type * find_const (T &data, typename T::value_type const &elem, std::enable_if_t< is_cow_type< T >::value, bool >=true) noexcept
 
template<class InputIt , class UnaryPredicate >
constexpr InputIt find_if (InputIt first, InputIt last, UnaryPredicate p)
 Like std::find_if() of 'algorithm'. More...
 
template<class InputIt , class UnaryPredicate >
constexpr InputIt find_if_not (InputIt first, InputIt last, UnaryPredicate q)
 Like std::find_if_not() of 'algorithm'. More...
 
constexpr float float_value (const uint32_t a) noexcept
 Converting IEEE 754 (IEC 559) single floating-point bit layout to float, see bit_value() More...
 
template<class InputIt , class UnaryFunction >
constexpr UnaryFunction for_each (InputIt first, InputIt last, UnaryFunction f)
 Like std::for_each() of 'algorithm'. More...
 
template<class T , class UnaryFunction >
constexpr UnaryFunction for_each_const (T &data, UnaryFunction f, std::enable_if_t< !is_cow_type< T >::value, bool >=true) noexcept
 
template<class T , class UnaryFunction >
constexpr UnaryFunction for_each_const (T &data, UnaryFunction f, std::enable_if_t< is_cow_type< T >::value, bool >=true) noexcept
 
template<class InputIt , class UnaryFunction >
constexpr UnaryFunction for_each_fidelity (InputIt first, InputIt last, UnaryFunction f)
 Like jau::for_each(), see above. More...
 
template<class T , class UnaryFunction >
constexpr UnaryFunction for_each_fidelity (T &data, UnaryFunction f, std::enable_if_t< !is_cow_type< T >::value, bool >=true) noexcept
 See jau::for_each_fidelity() More...
 
template<class T , class UnaryFunction >
constexpr UnaryFunction for_each_fidelity (T &data, UnaryFunction f, std::enable_if_t< is_cow_type< T >::value, bool >=true) noexcept
 See jau::for_each_fidelity() More...
 
template<class InputArray , class UnaryFunction >
constexpr UnaryFunction for_each_idx (InputArray &array, UnaryFunction f)
 Custom for_each template, using indices instead of iterators, allowing container to be modified within lambda 'callback'. More...
 
template<class Mutex , class InputArray , class UnaryFunction >
constexpr UnaryFunction for_each_idx_mtx (Mutex &mtx, InputArray &array, UnaryFunction f)
 Custom for_each template, same as jau::for_each but using indices instead of iterators and a mutex. More...
 
template<class Mutex , class InputIt , class UnaryFunction >
constexpr UnaryFunction for_each_mtx (Mutex &mtx, InputIt first, InputIt last, UnaryFunction f)
 Custom for_each template, same as jau::for_each but using a mutex. More...
 
std::string format_string (const char *format,...) noexcept
 Returns a string according to printf() formatting rules and variable number of arguments following the format argument. More...
 
int fprintf_td (const uint64_t elapsed_ms, FILE *stream, const char *format,...) noexcept
 Convenient fprintf() invocation, prepending the given elapsed_ms timestamp. More...
 
int fprintf_td (FILE *stream, const char *format,...) noexcept
 Convenient fprintf() invocation, prepending the environment::getElapsedMillisecond() timestamp. More...
 
mp::BigInt gcd (const mp::BigInt &a, const mp::BigInt &b) noexcept
 
template<typename T , std::enable_if_t< std::is_integral_v< T > &&!std::is_unsigned_v< T >, bool > = true>
constexpr T gcd (T a, T b) noexcept
 Returns the greatest common divisor (GCD) of the two given integer values following Euclid's algorithm from Euclid's Elements ~300 BC, using the absolute positive value of given integers. More...
 
std::string get_backtrace (const bool skip_anon_frames, const jau::snsize_t max_frames=-1, const jau::snsize_t skip_frames=1) noexcept
 Returns a de-mangled backtrace string separated by newline excluding this function. More...
 
constexpr int8_t get_int8 (uint8_t const *buffer) noexcept
 
template<typename T >
constexpr T get_packed_value (const packed_t< T > *source, const lb_endian_t byte_order) noexcept
 Return packed_t::store after converting it to from either lb_endian::little or lb_endian::big depending on given byte_order to lb_endian::native. More...
 
std::string get_string (const uint8_t *buffer, nsize_t const buffer_len, nsize_t const max_len) noexcept
 Returns a C++ String taken from buffer with maximum length of min(max_len, max_len). More...
 
constexpr uint128dp_t get_uint128 (uint8_t const *buffer) noexcept
 See get_uint16() for reference. More...
 
constexpr uint128dp_t get_uint128 (uint8_t const *buffer, const lb_endian_t byte_order) noexcept
 See get_uint16() for reference. More...
 
constexpr uint16_t get_uint16 (uint8_t const *buffer) noexcept
 Returns a uint16_t value from the given byte address using packed_t to resolve a potential memory alignment issue free of costs. More...
 
constexpr uint16_t get_uint16 (uint8_t const *buffer, const lb_endian_t byte_order) noexcept
 Returns a uint16_t value from the given byte address using packed_t to resolve a potential memory alignment issue free of costs. More...
 
constexpr uint192dp_t get_uint192 (uint8_t const *buffer) noexcept
 See get_uint16() for reference. More...
 
constexpr uint192dp_t get_uint192 (uint8_t const *buffer, const lb_endian_t byte_order) noexcept
 See get_uint16() for reference. More...
 
constexpr uint256dp_t get_uint256 (uint8_t const *buffer) noexcept
 See get_uint16() for reference. More...
 
constexpr uint256dp_t get_uint256 (uint8_t const *buffer, const lb_endian_t byte_order) noexcept
 See get_uint16() for reference. More...
 
constexpr uint32_t get_uint32 (uint8_t const *buffer) noexcept
 See get_uint16() for reference. More...
 
constexpr uint32_t get_uint32 (uint8_t const *buffer, const lb_endian_t byte_order) noexcept
 See get_uint16() for reference. More...
 
constexpr uint64_t get_uint64 (uint8_t const *buffer) noexcept
 See get_uint16() for reference. More...
 
constexpr uint64_t get_uint64 (uint8_t const *buffer, const lb_endian_t byte_order) noexcept
 See get_uint16() for reference. More...
 
constexpr uint8_t get_uint8 (uint8_t const *buffer) noexcept
 
uuid128_t get_uuid128 (uint8_t const *buffer) noexcept
 
uuid128_t get_uuid128 (uint8_t const *buffer, lb_endian_t const le_or_be) noexcept
 
uuid16_t get_uuid16 (uint8_t const *buffer) noexcept
 
uuid16_t get_uuid16 (uint8_t const *buffer, lb_endian_t const le_or_be) noexcept
 
uuid32_t get_uuid32 (uint8_t const *buffer) noexcept
 
uuid32_t get_uuid32 (uint8_t const *buffer, lb_endian_t const le_or_be) noexcept
 
template<typename T >
constexpr std::enable_if_t< std::is_standard_layout_v< T >, T > get_value (uint8_t const *buffer) noexcept
 Returns a T value from the given byte address using packed_t to resolve a potential memory alignment issue free of costs. More...
 
template<typename T >
constexpr std::enable_if_t< std::is_standard_layout_v< T >, T > get_value (uint8_t const *buffer, const lb_endian_t byte_order) noexcept
 Returns a T value from the given byte address using packed_t to resolve a potential memory alignment issue free of costs. More...
 
uint64_t getCurrentMilliseconds () noexcept
 Returns current monotonic time in milliseconds. More...
 
fraction_timespec getMonotonicTime () noexcept
 Returns current monotonic time since Unix Epoch 00:00:00 UTC on 1970-01-01. More...
 
uint64_t getWallClockSeconds () noexcept
 Returns current wall-clock system time of day in seconds since Unix Epoch 00:00:00 UTC on 1 January 1970. More...
 
fraction_timespec getWallClockTime () noexcept
 Returns current wall-clock real-time since Unix Epoch 00:00:00 UTC on 1970-01-01. More...
 
size_t hexStringBytes (std::vector< uint8_t > &out, const std::string &hexstr, const bool lsbFirst, const bool checkLeading0x) noexcept
 Converts a given hexadecimal string representation into a byte vector. More...
 
size_t hexStringBytes (std::vector< uint8_t > &out, const uint8_t hexstr[], const size_t hexstr_len, const bool lsbFirst, const bool checkLeading0x) noexcept
 See hexStringBytes() More...
 
template<typename T , std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T >, bool > = true>
constexpr nsize_t high_bit (T x)
 Return the index of the highest set bit w/ branching (loop) in O(n), actually O(n/2). More...
 
template<class T , std::enable_if_t< std::is_arithmetic_v< T >, bool > = true>
bool in_range (const T &a, const T &b, const T &range)
 base_math: arithmetic types, i.e. More...
 
void INFO_PRINT (const char *format,...) noexcept
 Use for unconditional informal messages, prefix '[elapsed_time] Info: '. More...
 
template<typename T , std::enable_if_t< std::is_arithmetic_v< T > &&!std::is_unsigned_v< T >, bool > = true>
constexpr T invert_sign (const T x) noexcept
 Safely inverts the sign of an arithmetic number w/ branching in O(1) More...
 
constexpr bool is_big_endian () noexcept
 Evaluates true if platform is running in big endian mode, i.e. More...
 
consteval_cxx20 bool is_builtin_bit_cast_available () noexcept
 Query whether __builtin_bit_cast(Dest_type, arg) is available, using jau::has_builtin_bit_cast. More...
 
consteval_cxx20 bool is_builtin_int128_available () noexcept
 
consteval_cxx20 bool is_cxx17 () noexcept
 Returns true if compiled with >= C++17. More...
 
consteval_cxx20 bool is_cxx20 () noexcept
 Returns true if compiled with >= C++20. More...
 
consteval_cxx20 bool is_cxx23 () noexcept
 Returns true if compiled with >= C++23. More...
 
consteval_cxx20 bool is_cxx26 () noexcept
 Returns true if compiled with >= C++26. More...
 
consteval_cxx20 bool is_debug_enabled () noexcept
 Returns true if compiled with debug information and w/o optimization, i.e. More...
 
constexpr bool is_defined_endian (const endian_t &v) noexcept
 Evaluates true if the given endian is defined, i.e. More...
 
constexpr bool is_little_endian () noexcept
 Evaluates true if platform is running in little endian mode, i.e. More...
 
constexpr bool is_little_endian (const endian_t byte_order) noexcept
 Returns true if given byte_order equals endian::little, otherwise false. More...
 
constexpr bool is_little_endian (const lb_endian_t byte_order) noexcept
 Returns true if given byte_order equals lb_endian::little, otherwise false. More...
 
constexpr bool is_little_or_big_endian () noexcept
 Evaluates true if platform is running in little or big endian mode, i.e. More...
 
template<typename T , std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T >, bool > = true>
constexpr bool is_power_of_2 (const T x) noexcept
 Power of 2 test (w/o branching ?) in O(1) More...
 
consteval_cxx20 bool is_rtti_available () noexcept
 Returns true if compiled with RTTI available. More...
 
template<class T >
std::enable_if< std::is_integral_v< T >, bool >::type constexpr is_zero (const T &a) noexcept
 base_math: arithmetic types, i.e. More...
 
template<class T >
std::enable_if< std::is_floating_point_v< T >, bool >::type constexpr is_zero (const T &a, const T &epsilon=std::numeric_limits< T >::epsilon()) noexcept
 Returns true if the given value is less than epsilon, w/ epsilon > 0. More...
 
template<class T >
std::enable_if< std::is_floating_point_v< T >, bool >::type constexpr is_zero2f (const T &a, const T &b, const T &epsilon=std::numeric_limits< T >::epsilon()) noexcept
 Returns true if all given values a and b are less than epsilon, w/ epsilon > 0. More...
 
template<class T >
std::enable_if< std::is_floating_point_v< T >, bool >::type constexpr is_zero3f (const T &a, const T &b, const T &c, const T &epsilon=std::numeric_limits< T >::epsilon()) noexcept
 Returns true if all given values a, b and c are less than epsilon, w/ epsilon > 0. More...
 
template<class T >
std::enable_if< std::is_floating_point_v< T >, bool >::type constexpr is_zero4f (const T &a, const T &b, const T &c, const T &d, const T &epsilon=std::numeric_limits< T >::epsilon()) noexcept
 Returns true if all given values a, b, c and d are less than epsilon, w/ epsilon > 0. More...
 
template<class T >
std::enable_if< std::is_floating_point_v< T >, bool >::type constexpr is_zero_raw (const T &a) noexcept
 Returns true if the given value is zero, disregarding epsilon but considering NaN, -Inf and +Inf. More...
 
constexpr bool isTypeTraitBitSet (const TypeTraitGroup mask, const TypeTraitGroup bit) noexcept
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
constexpr bool lcm_overflow (const T a, const T b, T &result) noexcept
 Integer overflow aware calculation of least common multiple (LCM) following Euclid's algorithm from Euclid's Elements ~300 BC. More...
 
constexpr EUI48 le_to_cpu (EUI48 const &l) noexcept
 
constexpr uint128dp_t le_to_cpu (uint128dp_t const &l) noexcept
 
constexpr uint16_t le_to_cpu (uint16_t const l) noexcept
 
constexpr uint192dp_t le_to_cpu (uint192dp_t const &l) noexcept
 
constexpr uint256dp_t le_to_cpu (uint256dp_t const &l) noexcept
 
constexpr uint32_t le_to_cpu (uint32_t const l) noexcept
 
constexpr uint64_t le_to_cpu (uint64_t const &l) noexcept
 
template<class T >
std::enable_if< std::is_floating_point_v< T >, T >::type machineEpsilon () noexcept
 Calculates the smallest floating point value approximation the given type T can represent, the machine epsilon of T. More...
 
template<typename First , typename... Next>
constexpr cow_darray< First > make_cow_darray (First &&arg1)
 Complement constructor for cow_darray<T> instance, move semantics initializer for one argument. More...
 
template<typename First , typename... Next, std::enable_if_t< std::conjunction_v< std::is_same< First, Next >... >, bool > = true>
constexpr cow_darray< First > make_cow_darray (First &&arg1, Next &&... argsN)
 Construct a cow_darray<T> instance, initialized by move semantics from the variadic (template pack) argument list. More...
 
template<typename T >
jau::type_info make_ctti () noexcept
 Constructs a jau::type_info instance based on given type T using template Compile Time Type Information (CTTI) only. More...
 
template<typename R , typename L , typename... A>
jau::type_info make_ctti () noexcept
 Constructs a jau::type_info instance based on given function types R(*L)(A...) using template Compile Time Type Information (CTTI) only via RTTI's `typeid(L) if available or jau::ctti_name<R, L, A...>() otherwise. More...
 
template<typename First , typename... Next>
constexpr darray< First > make_darray (First &&arg1)
 Complement constructor for darray<T> instance, move semantics initializer for one argument. More...
 
template<typename First , typename... Next, std::enable_if_t< std::conjunction_v< std::is_same< First, Next >... >, bool > = true>
constexpr darray< First > make_darray (First &&arg1, Next &&... argsN)
 Construct a darray<T> instance, initialized by move semantics from the variadic (template pack) argument list. More...
 
template<typename T , std::enable_if_t< std::is_floating_point_v< T >, bool > = true>
std::string & mat_to_string (std::string &sb, const std::string &rowPrefix, const std::string &f, const T a[], const jau::nsize_t rows, const jau::nsize_t columns, const bool rowMajorOrder) noexcept
 Appends a matrix of floating points to the given string sb More...
 
template<typename int_type >
constexpr const fraction< int_type > & max (const fraction< int_type > &lhs, const fraction< int_type > &rhs) noexcept
 Return the maximum of the two given fractions. More...
 
constexpr const fraction_timespecmax (const fraction_timespec &lhs, const fraction_timespec &rhs) noexcept
 Return the maximum of the two given fraction_timespec. More...
 
const mp::BigIntmax (const mp::BigInt &x, const mp::BigInt &y) noexcept
 
template<typename T , std::enable_if_t< std::is_arithmetic_v< T >, bool > = true>
constexpr T max (const T x, const T y) noexcept
 Returns the maximum of two integrals (w/ branching) in O(1) More...
 
mp::BigIntmax (mp::BigInt &x, mp::BigInt &y) noexcept
 
uint128dp_t merge_uint128 (uint16_t const uuid16, uint128dp_t const &base_uuid, nsize_t const uuid16_le_octet_index)
 Merge the given 'uuid16' into a 'base_uuid' copy at the given little endian 'uuid16_le_octet_index' position. More...
 
uint128dp_t merge_uint128 (uint32_t const uuid32, uint128dp_t const &base_uuid, nsize_t const uuid32_le_octet_index)
 Merge the given 'uuid32' into a 'base_uuid' copy at the given little endian 'uuid32_le_octet_index' position. More...
 
bool milli_sleep (uint64_t td_ms, const bool ignore_irq=true) noexcept
 millisecond sleep using high precision monotonic timer, useful for one-shot delays (only). More...
 
template<typename int_type >
constexpr const fraction< int_type > & min (const fraction< int_type > &lhs, const fraction< int_type > &rhs) noexcept
 Return the minimum of the two given fractions. More...
 
constexpr const fraction_timespecmin (const fraction_timespec &lhs, const fraction_timespec &rhs) noexcept
 Return the minimum of the two given fraction_timespec. More...
 
const mp::BigIntmin (const mp::BigInt &x, const mp::BigInt &y) noexcept
 
template<typename T , std::enable_if_t< std::is_arithmetic_v< T >, bool > = true>
constexpr T min (const T x, const T y) noexcept
 Returns the minimum of two integrals (w/ branching) in O(1) More...
 
mp::BigIntmin (mp::BigInt &x, mp::BigInt &y) noexcept
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
constexpr bool mul_overflow (const T a, const T b, T &res) noexcept
 Integer overflow aware multiplication returning true if overflow occurred, otherwise false having the result stored in res. More...
 
constexpr uint32_t number (const func::target_type rhs) noexcept
 
constexpr uint8_t number (const TypeTraitGroup rhs) noexcept
 
template<class T1 , class T2 >
bool operator!= (const callocator< T1 > &lhs, const callocator< T2 > &rhs) noexcept
 
template<class T1 , class T2 >
bool operator!= (const callocator_sec< T1 > &lhs, const callocator_sec< T2 > &rhs) noexcept
 
template<class T1 , class T2 >
bool operator!= (const counting_allocator< T1 > &lhs, const counting_allocator< T2 > &rhs) noexcept
 
template<class T1 , class T2 >
bool operator!= (const counting_callocator< T1 > &lhs, const counting_callocator< T2 > &rhs) noexcept
 
template<typename Value_type , typename Size_type , typename Alloc_type >
bool operator!= (const cow_darray< Value_type, Size_type, Alloc_type > &rhs, const cow_darray< Value_type, Size_type, Alloc_type > &lhs)
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr bool operator!= (const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr bool operator!= (const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Value_type , typename Alloc_type >
bool operator!= (const cow_vector< Value_type, Alloc_type > &rhs, const cow_vector< Value_type, Alloc_type > &lhs)
 
template<typename Value_type , typename Size_type , typename Alloc_type >
bool operator!= (const darray< Value_type, Size_type, Alloc_type > &rhs, const darray< Value_type, Size_type, Alloc_type > &lhs)
 
bool operator!= (const EUI48 &lhs, const EUI48 &rhs) noexcept
 
bool operator!= (const EUI48Sub &lhs, const EUI48Sub &rhs) noexcept
 
template<typename int_type >
constexpr bool operator!= (const fraction< int_type > &lhs, const fraction< int_type > &rhs) noexcept
 
constexpr bool operator!= (const fraction_timespec &lhs, const fraction_timespec &rhs) noexcept
 
template<class R , class... A>
bool operator!= (const function< R(A...)> &lhs, std::nullptr_t) noexcept
 Unequal operator of jau::function<R(A...)> with a right-hand-side nullptr. More...
 
template<typename Rl , typename... Al, template< typename... > typename Fl = function, typename Rr , typename... Ar, template< typename... > typename Fr = function>
bool operator!= (const function< Rl(Al...)> &lhs, const function< Rr(Ar...)> &rhs) noexcept
 Unequal operator using two jau::function<R(A...)> types for both arguments. More...
 
constexpr bool operator!= (const TypeTraitGroup lhs, const TypeTraitGroup rhs) noexcept
 
template<class R , class... A>
bool operator!= (std::nullptr_t, const function< R(A...)> &rhs) noexcept
 Unequal operator of jau::function<R(A...)> with a left-hand-side nullptr. More...
 
constexpr TypeTraitGroup operator& (const TypeTraitGroup lhs, const TypeTraitGroup rhs) noexcept
 
template<typename int_type >
constexpr fraction< int_type > operator* (const fraction< int_type > &lhs, const fraction< int_type > &rhs) noexcept
 Returns product of two fraction. More...
 
template<typename int_type >
constexpr fraction< int_type > operator* (const fraction< int_type > &lhs, const int_type &rhs) noexcept
 Returns multiplication of fraction with scalar. More...
 
template<typename int_type >
constexpr fraction< int_type > operator* (const int_type &lhs, const fraction< int_type > &rhs) noexcept
 Returns multiplication of fraction with scalar. More...
 
template<typename int_type >
constexpr fraction< int_type > operator+ (const fraction< int_type > &lhs, const fraction< int_type > &rhs) noexcept
 Returns sum of two fraction. More...
 
constexpr fraction_timespec operator+ (const fraction_timespec &lhs, const fraction_timespec &rhs) noexcept
 Returns sum of two fraction_timespec. More...
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr Storage_type::difference_type operator- (const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr Storage_type::difference_type operator- (const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename int_type >
constexpr fraction< int_type > operator- (const fraction< int_type > &lhs, const fraction< int_type > &rhs) noexcept
 Returns difference of two fraction. More...
 
constexpr fraction_timespec operator- (const fraction_timespec &lhs, const fraction_timespec &rhs) noexcept
 Returns difference of two fraction_timespec. More...
 
template<typename int_type >
constexpr fraction< int_type > operator/ (const fraction< int_type > &lhs, const fraction< int_type > &rhs) noexcept
 Returns division of two fraction. More...
 
template<typename int_type >
constexpr fraction< int_type > operator/ (const fraction< int_type > &lhs, const int_type &rhs) noexcept
 Returns division of fraction with scalar. More...
 
template<typename int_type >
constexpr fraction< int_type > operator/ (const int_type &lhs, const fraction< int_type > &rhs) noexcept
 Returns division of fraction with scalar. More...
 
template<typename Value_type , typename Size_type , typename Alloc_type >
bool operator< (const cow_darray< Value_type, Size_type, Alloc_type > &rhs, const cow_darray< Value_type, Size_type, Alloc_type > &lhs)
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr bool operator< (const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr bool operator< (const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Value_type , typename Alloc_type >
bool operator< (const cow_vector< Value_type, Alloc_type > &rhs, const cow_vector< Value_type, Alloc_type > &lhs)
 
template<typename Value_type , typename Size_type , typename Alloc_type >
bool operator< (const darray< Value_type, Size_type, Alloc_type > &rhs, const darray< Value_type, Size_type, Alloc_type > &lhs)
 
template<typename int_type >
constexpr bool operator< (const fraction< int_type > &lhs, const fraction< int_type > &rhs) noexcept
 
constexpr bool operator< (const fraction_timespec &lhs, const fraction_timespec &rhs) noexcept
 
template<typename Value_type , typename Size_type , typename Alloc_type >
std::ostream & operator<< (std::ostream &out, const cow_darray< Value_type, Size_type, Alloc_type > &c)
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
std::ostream & operator<< (std::ostream &out, const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &c)
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
std::ostream & operator<< (std::ostream &out, const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &c)
 
template<typename Value_type , typename Alloc_type >
std::ostream & operator<< (std::ostream &out, const cow_vector< Value_type, Alloc_type > &c)
 
template<typename Value_type , typename Size_type , typename Alloc_type >
std::ostream & operator<< (std::ostream &out, const darray< Value_type, Size_type, Alloc_type > &c)
 
template<typename Value_type , typename Size_type , typename Alloc_type >
bool operator<= (const cow_darray< Value_type, Size_type, Alloc_type > &rhs, const cow_darray< Value_type, Size_type, Alloc_type > &lhs)
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr bool operator<= (const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr bool operator<= (const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Value_type , typename Alloc_type >
bool operator<= (const cow_vector< Value_type, Alloc_type > &rhs, const cow_vector< Value_type, Alloc_type > &lhs)
 
template<typename Value_type , typename Size_type , typename Alloc_type >
bool operator<= (const darray< Value_type, Size_type, Alloc_type > &rhs, const darray< Value_type, Size_type, Alloc_type > &lhs)
 
template<typename int_type >
constexpr bool operator<= (const fraction< int_type > &lhs, const fraction< int_type > &rhs) noexcept
 
constexpr bool operator<= (const fraction_timespec &lhs, const fraction_timespec &rhs) noexcept
 
template<class T1 , class T2 >
bool operator== (const callocator< T1 > &lhs, const callocator< T2 > &rhs) noexcept
 
template<class T1 , class T2 >
bool operator== (const callocator_sec< T1 > &lhs, const callocator_sec< T2 > &rhs) noexcept
 
template<class T1 , class T2 >
bool operator== (const counting_allocator< T1 > &lhs, const counting_allocator< T2 > &rhs) noexcept
 
template<class T1 , class T2 >
bool operator== (const counting_callocator< T1 > &lhs, const counting_callocator< T2 > &rhs) noexcept
 
template<typename Value_type , typename Size_type , typename Alloc_type >
bool operator== (const cow_darray< Value_type, Size_type, Alloc_type > &rhs, const cow_darray< Value_type, Size_type, Alloc_type > &lhs)
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr bool operator== (const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr bool operator== (const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Value_type , typename Alloc_type >
bool operator== (const cow_vector< Value_type, Alloc_type > &rhs, const cow_vector< Value_type, Alloc_type > &lhs)
 
template<typename Value_type , typename Size_type , typename Alloc_type >
bool operator== (const darray< Value_type, Size_type, Alloc_type > &rhs, const darray< Value_type, Size_type, Alloc_type > &lhs)
 
bool operator== (const EUI48 &lhs, const EUI48 &rhs) noexcept
 
bool operator== (const EUI48Sub &lhs, const EUI48Sub &rhs) noexcept
 
template<typename int_type >
constexpr bool operator== (const fraction< int_type > &lhs, const fraction< int_type > &rhs) noexcept
 
constexpr bool operator== (const fraction_timespec &lhs, const fraction_timespec &rhs) noexcept
 
template<class R , class... A>
bool operator== (const function< R(A...)> &lhs, std::nullptr_t) noexcept
 Equal operator of jau::function<R(A...)> with a right-hand-side nullptr. More...
 
template<typename Rl , typename... Al, template< typename... > class Fl = function, typename Rr , typename... Ar, template< typename... > class Fr = function, std::enable_if_t< !std::is_same_v< Fl< Rl(Al...)>, Fr< Rr(Ar...)> >, bool > = true>
bool operator== (const function< Rl(Al...)> &lhs, const function< Rr(Ar...)> &rhs) noexcept
 Equal operator using different jau::function<R(A...)> return and argument types for both arguments, always returns false. More...
 
constexpr bool operator== (const TypeTraitGroup lhs, const TypeTraitGroup rhs) noexcept
 
template<class R , class... A>
bool operator== (std::nullptr_t, const function< R(A...)> &rhs) noexcept
 Equal operator of jau::function<R(A...)> with a left-hand-side nullptr. More...
 
template<typename Value_type , typename Size_type , typename Alloc_type >
bool operator> (const cow_darray< Value_type, Size_type, Alloc_type > &rhs, const cow_darray< Value_type, Size_type, Alloc_type > &lhs)
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr bool operator> (const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr bool operator> (const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Value_type , typename Alloc_type >
bool operator> (const cow_vector< Value_type, Alloc_type > &rhs, const cow_vector< Value_type, Alloc_type > &lhs)
 
template<typename Value_type , typename Size_type , typename Alloc_type >
bool operator> (const darray< Value_type, Size_type, Alloc_type > &rhs, const darray< Value_type, Size_type, Alloc_type > &lhs)
 
template<typename int_type >
constexpr bool operator> (const fraction< int_type > &lhs, const fraction< int_type > &rhs) noexcept
 
constexpr bool operator> (const fraction_timespec &lhs, const fraction_timespec &rhs) noexcept
 
template<typename Value_type , typename Size_type , typename Alloc_type >
bool operator>= (const cow_darray< Value_type, Size_type, Alloc_type > &rhs, const cow_darray< Value_type, Size_type, Alloc_type > &lhs)
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr bool operator>= (const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Storage_type , typename Storage_ref_type , typename CoW_container >
constexpr bool operator>= (const cow_rw_iterator< Storage_type, Storage_ref_type, CoW_container > &lhs, const cow_ro_iterator< Storage_type, Storage_ref_type, CoW_container > &rhs) noexcept
 
template<typename Value_type , typename Alloc_type >
bool operator>= (const cow_vector< Value_type, Alloc_type > &rhs, const cow_vector< Value_type, Alloc_type > &lhs)
 
template<typename Value_type , typename Size_type , typename Alloc_type >
bool operator>= (const darray< Value_type, Size_type, Alloc_type > &rhs, const darray< Value_type, Size_type, Alloc_type > &lhs)
 
template<typename int_type >
constexpr bool operator>= (const fraction< int_type > &lhs, const fraction< int_type > &rhs) noexcept
 
constexpr bool operator>= (const fraction_timespec &lhs, const fraction_timespec &rhs) noexcept
 
constexpr TypeTraitGroup operator^ (const TypeTraitGroup lhs, const TypeTraitGroup rhs) noexcept
 
constexpr TypeTraitGroup operator| (const TypeTraitGroup lhs, const TypeTraitGroup rhs) noexcept
 
void PLAIN_PRINT (const bool printPrefix, const char *format,...) noexcept
 Use for unconditional plain messages, prefix '[elapsed_time] ' if printPrefix == true. More...
 
template<class Dest , class Source >
constexpr std::enable_if_t< sizeof(Dest)==sizeof(Source) &&std::is_pointer_v< Source > &&std::is_pointer_v< Dest >, Dest > pointer_cast (const Source &src) noexcept
 A constexpr pointer cast implementation for C++17, inspired by C++20 bit_cast<>(arg). More...
 
mp::BigInt pow (mp::BigInt b, mp::BigInt e)
 
void print_backtrace (const bool skip_anon_frames, const jau::snsize_t max_frames=-1, const jau::snsize_t skip_frames=2) noexcept
 Prints the de-mangled backtrace string separated by newline excluding this function to stderr, using get_backtrace(). More...
 
template<class List >
void printSharedPtrList (const std::string &prefix, List &list) noexcept
 
constexpr void put_uint128 (uint8_t *buffer, const uint128dp_t &v) noexcept
 See put_uint16() for reference. More...
 
constexpr void put_uint128 (uint8_t *buffer, const uint128dp_t &v, const lb_endian_t byte_order) noexcept
 See put_uint16() for reference. More...
 
constexpr void put_uint16 (uint8_t *buffer, const uint16_t v) noexcept
 Put the given uint16_t value into the given byte address using packed_t to resolve a potential memory alignment issue free of costs. More...
 
constexpr void put_uint16 (uint8_t *buffer, const uint16_t v, const lb_endian_t byte_order) noexcept
 Put the given uint16_t value into the given byte address using packed_t to resolve a potential memory alignment issue free of costs. More...
 
constexpr void put_uint192 (uint8_t *buffer, const uint192dp_t &v) noexcept
 See put_uint16() for reference. More...
 
constexpr void put_uint192 (uint8_t *buffer, const uint192dp_t &v, const lb_endian_t byte_order) noexcept
 See put_uint16() for reference. More...
 
constexpr void put_uint256 (uint8_t *buffer, const uint256dp_t &v) noexcept
 See put_uint16() for reference. More...
 
constexpr void put_uint256 (uint8_t *buffer, const uint256dp_t &v, const lb_endian_t byte_order) noexcept
 See put_uint16() for reference. More...
 
constexpr void put_uint32 (uint8_t *buffer, const uint32_t v) noexcept
 See put_uint16() for reference. More...
 
constexpr void put_uint32 (uint8_t *buffer, const uint32_t v, const lb_endian_t byte_order) noexcept
 See put_uint16() for reference. More...
 
constexpr void put_uint64 (uint8_t *buffer, const uint64_t &v) noexcept
 See put_uint16() for reference. More...
 
constexpr void put_uint64 (uint8_t *buffer, const uint64_t &v, const lb_endian_t byte_order) noexcept
 See put_uint16() for reference. More...
 
constexpr void put_uint8 (uint8_t *buffer, const uint8_t v) noexcept
 
template<typename T >
constexpr std::enable_if_t< std::is_standard_layout_v< T >, void > put_value (uint8_t *buffer, const T &v) noexcept
 Put the given T value into the given byte address using packed_t to resolve a potential memory alignment issue free of costs. More...
 
template<typename T >
constexpr std::enable_if_t< std::is_standard_layout_v< T >, void > put_value (uint8_t *buffer, const T &v, const lb_endian_t byte_order) noexcept
 Put the given T value into the given byte address using packed_t to resolve a potential memory alignment issue free of costs. More...
 
template<typename T , std::enable_if_t< std::is_floating_point_v< T >, bool > = true>
constexpr T rad_to_adeg (const T rad) noexcept
 Converts radians to arc-degree. More...
 
template<class ForwardIt , class UnaryPredicate >
ForwardIt remove_if (ForwardIt first, ForwardIt last, UnaryPredicate p)
 Identical to C++20 std::remove_if() of algorithm More...
 
template<typename T , typename U , std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T > &&std::is_integral_v< U > &&std::is_unsigned_v< U >, bool > = true>
constexpr T round_down (T n, U align_to)
 Round down w/ branching in O(1) More...
 
template<class T , std::enable_if_t< std::is_floating_point_v< T >, bool > = true>
constexpr jau::sint_bytes< sizeof(T)>::type round_to_int (const T v) noexcept
 Returns the rounded value cast to int. More...
 
constexpr uint32_t round_to_power_of_2 (const uint32_t n)
 If the given n is not is_power_of_2() return next_power_of_2(), otherwise return n unchanged. More...
 
template<typename T , typename U , std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T > &&std::is_integral_v< U > &&std::is_unsigned_v< U >, bool > = true>
constexpr T round_up (const T n, const U align_to)
 Round up w/ branching in O(1) More...
 
template<typename T , std::enable_if_t< std::is_floating_point_v< T >, bool > = true>
std::string & row_to_string (std::string &sb, const std::string &f, const T a[], const jau::nsize_t rows, const jau::nsize_t columns, const bool rowMajorOrder, const jau::nsize_t row) noexcept
 Appends a row of floating points to the given string sb More...
 
void set_bit_uint32 (const uint8_t nr, uint32_t &mask)
 
void set_bit_uint64 (const uint8_t nr, uint64_t &mask)
 
template<typename int_type >
constexpr snsize_t sign (const fraction< int_type > &rhs) noexcept
 Returns the value of the sign function applied to numerator. More...
 
constexpr snsize_t sign (const fraction_timespec &rhs) noexcept
 Returns the value of the sign function applied to tv_sec. More...
 
template<typename T , std::enable_if_t< std::is_arithmetic_v< T > &&!std::is_unsigned_v< T >, bool > = true>
constexpr int sign (const T x) noexcept
 Returns the value of the sign function (w/o branching ?) in O(1). More...
 
bool sleep (const fraction_timespec &relative_time, const bool ignore_irq=true) noexcept
 sleep using high precision monotonic timer, useful for one-shot delays (only). More...
 
bool sleep_for (const fraction_i64 &relative_time, const bool monotonic=true, const bool ignore_irq=true) noexcept
 sleep_for causes the current thread to block until a specific amount of time has passed. More...
 
bool sleep_for (const fraction_timespec &relative_time, const bool monotonic=true, const bool ignore_irq=true) noexcept
 sleep_for causes the current thread to block until a specific amount of time has passed. More...
 
bool sleep_until (const fraction_timespec &absolute_time, const bool monotonic=true, const bool ignore_irq=true) noexcept
 sleep_until causes the current thread to block until the specific time is reached. More...
 
std::vector< std::string > split_string (const std::string &str, const std::string &separator) noexcept
 Split given string str at separator into the resulting std::vector excluding the separator sequence . More...
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
constexpr bool sub_overflow (const T a, const T b, T &res) noexcept
 Integer overflow aware subtraction returning true if overflow occurred, otherwise false having the result stored in res. More...
 
template<typename Value_type , typename Size_type , typename Alloc_type >
void swap (cow_darray< Value_type, Size_type, Alloc_type > &rhs, cow_darray< Value_type, Size_type, Alloc_type > &lhs) noexcept
 
template<typename Value_type , typename Alloc_type >
void swap (cow_vector< Value_type, Alloc_type > &rhs, cow_vector< Value_type, Alloc_type > &lhs) noexcept
 
template<typename Value_type , typename Size_type , typename Alloc_type >
void swap (darray< Value_type, Size_type, Alloc_type > &rhs, darray< Value_type, Size_type, Alloc_type > &lhs) noexcept
 
uint32_t test_bit_uint32 (const uint8_t nr, const uint32_t mask)
 
uint64_t test_bit_uint64 (const uint8_t nr, const uint64_t mask)
 
template<class value_type , std::enable_if_t< std::is_integral_v< value_type >, bool > = true>
std::string to_decstring (const value_type &v, const char separator=',', const nsize_t width=0) noexcept
 Produce a decimal string representation of an integral integer value. More...
 
constexpr endian_t to_endian (const lb_endian_t v) noexcept
 
bool to_fraction_i64 (fraction_i64 &result, const std::string &value, const fraction_i64 &min_allowed, const fraction_i64 &max_allowed) noexcept
 Stores the fraction_i64 value of the given string value in format <num>/<denom>, which may contain whitespace. More...
 
template<class value_type , std::enable_if_t< std::is_pointer_v< value_type >, bool > = true>
std::string to_hexstring (value_type const &v) noexcept
 Produce a lower-case hexadecimal string representation of the given pointer. More...
 
bool to_integer (long long &result, const char *str, size_t str_len, const char limiter='\0', const char *limiter_pos=nullptr)
 
bool to_integer (long long &result, const std::string &str, const char limiter='\0', const char *limiter_pos=nullptr)
 
constexpr lb_endian_t to_lb_endian (const endian_t v) noexcept
 
std::string to_string (const endian_t v) noexcept
 Return std::string representation of the given endian. More...
 
std::string to_string (const EUI48 &a) noexcept
 
std::string to_string (const EUI48Sub &a) noexcept
 
template<typename int_type >
std::string to_string (const fraction< int_type > &v) noexcept
 
std::string to_string (const fraction_timespec &v) noexcept
 
std::string to_string (const func::target_type v) noexcept
 
std::string to_string (const lb_endian_t v) noexcept
 Return std::string representation of the given lb_endian. More...
 
template<typename _Tp , std::memory_order _MO>
std::string to_string (const ordered_atomic< _Tp, _MO > &ref)
 
std::string to_string (const uuid_t::TypeSize v) noexcept
 
template<class value_type , std::enable_if_t< std::is_integral_v< value_type >||std::is_floating_point_v< value_type >, bool > = true>
std::string to_string (const value_type &ref)
 
template<typename T >
std::string to_string (std::vector< T > const &list)
 
template<typename T >
std::string to_string (std::vector< T > const &list, const std::string &delim)
 
std::string toLower (const std::string &s) noexcept
 
std::string & toLowerInPlace (std::string &s) noexcept
 
std::string trim (const std::string &s) noexcept
 trim copy More...
 
void trimInPlace (std::string &s) noexcept
 trim in place More...
 
template<typename T >
const char * type_name () noexcept
 Returns the type name of given type T using template Compile Time Type Information (CTTI) only via RTTI's typeid(T).name() if available or jau::ctti_name<T>() otherwise. More...
 
template<typename R , typename L , typename... A>
const char * type_name () noexcept
 Returns the type name of given function types R(*L)(A...) using template Compile Time Type Information (CTTI) only via RTTI's typeid(L).name() if available or jau::ctti_name<R, L, A...>() otherwise. More...
 
std::string vformat_string (const char *format, va_list ap) noexcept
 Returns a string according to vprintf() formatting rules using va_list instead of a variable number of arguments. More...
 
std::cv_status wait_for (std::condition_variable &cv, std::unique_lock< std::mutex > &lock, const fraction_i64 &relative_time, const bool monotonic=true) noexcept
 wait_for causes the current thread to block until the condition variable is notified, a specific amount of time has passed, or a spurious wakeup occurs. More...
 
std::cv_status wait_for (std::condition_variable &cv, std::unique_lock< std::mutex > &lock, const fraction_timespec &relative_time, const bool monotonic=true) noexcept
 wait_for causes the current thread to block until the condition variable is notified, a specific amount of time has passed, or a spurious wakeup occurs. More...
 
std::cv_status wait_until (std::condition_variable &cv, std::unique_lock< std::mutex > &lock, const fraction_timespec &absolute_time, const bool monotonic=true) noexcept
 wait_until causes the current thread to block until the condition variable is notified, a specific time is reached, or a spurious wakeup occurs. More...
 
void WARN_PRINT_impl (const char *func, const char *file, const int line, const char *format,...) noexcept
 
void WARN_PRINTv (const char *func, const char *file, const int line, const char *format, va_list args) noexcept
 Use for unconditional warning messages, prefix '[elapsed_time] Warning @ file:line func: '. More...
 
void WORDY_PRINT_impl (const char *format,...) noexcept
 

Variables

uuid128_t BT_BASE_UUID
 Bluetooth UUID https://www.bluetooth.com/specifications/assigned-numbers/service-discovery/ More...
 
constexpr uint64_t const double_iec559_exp_mask = 0x7ff0000000000000_u64
 Exponent mask bits 52-62 of IEEE 754 (IEC 559) double double-point bit layout, i.e. More...
 
constexpr uint64_t const double_iec559_mant_mask = 0x000fffffffffffff_u64
 Mantissa mask bits 0-51 of IEEE 754 (IEC 559) double double-point bit layout, i.e. More...
 
constexpr uint64_t const double_iec559_nan_bitval = 0x7ff8000000000000_u64
 NaN bit-value of IEEE 754 (IEC 559) double double-point bit layout, i.e. More...
 
constexpr uint64_t const double_iec559_negative_inf_bitval = 0xfff0000000000000_u64
 Negative infinity bit-value of IEEE 754 (IEC 559) double double-point bit layout, i.e. More...
 
constexpr uint64_t const double_iec559_positive_inf_bitval = 0x7ff0000000000000_u64
 Positive infinity bit-value of IEEE 754 (IEC 559) double double-point bit layout, i.e. More...
 
constexpr uint64_t const double_iec559_sign_bit = 1_u64 << 63
 Signed bit 63 of IEEE 754 (IEC 559) double double-point bit layout, i.e. More...
 
constexpr uint32_t const float_iec559_exp_mask = 0x7f800000_u32
 Exponent mask bits 23-30 of IEEE 754 (IEC 559) single float-point bit layout, i.e. More...
 
constexpr uint32_t const float_iec559_mant_mask = 0x007fffff_u32
 Mantissa mask bits 0-22 of IEEE 754 (IEC 559) single float-point bit layout, i.e. More...
 
constexpr uint32_t const float_iec559_nan_bitval = 0x7fc00000_u32
 NaN bit-value of IEEE 754 (IEC 559) single float-point bit layout, i.e. More...
 
constexpr uint32_t const float_iec559_negative_inf_bitval = 0xff800000_u32
 Negative infinity bit-value of IEEE 754 (IEC 559) single float-point bit layout, i.e. More...
 
constexpr uint32_t const float_iec559_positive_inf_bitval = 0x7f800000_u32
 Positive infinity bit-value of IEEE 754 (IEC 559) single float-point bit layout, i.e. More...
 
constexpr uint32_t const float_iec559_sign_bit = 1_u32 << 31
 Signed bit 31 of IEEE 754 (IEC 559) single float-point bit layout, i.e. More...
 
template<typename Dummy_type >
constexpr bool has_builtin_bit_cast_v = has_builtin_bit_cast<Dummy_type>::value
 Value access of has_builtin_bit_cast type trait for convenience . More...
 
template<typename Dummy_type >
constexpr bool has_endian_big_v = has_endian_big<Dummy_type>::value
 Value access of big-endian type trait for convenience . More...
 
template<typename Dummy_type >
constexpr bool has_endian_little_v = has_endian_little<Dummy_type>::value
 Value access of little-endian type trait for convenience . More...
 
template<typename _Tp >
constexpr bool has_member_of_pointer_v = has_member_of_pointer<_Tp>::value
 
template<typename _Tp >
constexpr bool has_to_string_v = has_to_string<_Tp>::value
 
template<typename _Tp >
constexpr bool has_toString_v = has_toString<_Tp>::value
 
template<typename T >
constexpr bool is_container_memmove_compliant_v = is_container_memmove_compliant<T>::value
 
template<typename T >
constexpr bool is_enforcing_secmem_v = is_enforcing_secmem<T>::value
 
template<typename _Dummy >
constexpr bool is_rtti_available_v = is_rtti_available_t<_Dummy>::value
 Template type trait helper evaluating true if RTTI is available, otherwise false. More...
 
const char * VERSION
 
const char * VERSION_API
 
const char * VERSION_SHORT
 

Detailed Description

__pack(...): Produces MSVC, clang and gcc compatible lead-in and -out macros.

Function Documentation

◆ get_backtrace()

std::string jau::get_backtrace ( const bool  skip_anon_frames,
const jau::snsize_t  max_frames = -1,
const jau::snsize_t  skip_frames = 1 
)
noexcept

Returns a de-mangled backtrace string separated by newline excluding this function.

Returns one line per stack frame, each with

  • stack frame number
  • demangled function name + offset (sp)
  • the instruction pointer (pc)
  • the stack pointer (sp)
Parameters
skip_anon_framesif true, skip all frames w/o proc-name
max_framesnumber of stack frames to be printed or -1 for unlimited, defaults to -1
skip_framesnumber of stack frames to skip, default is one frame for this function.
Returns
the de-mangled backtrace, separated by newline

Definition at line 94 of file debug.cpp.

Here is the caller graph for this function:

◆ print_backtrace()

void jau::print_backtrace ( const bool  skip_anon_frames,
const jau::snsize_t  max_frames = -1,
const jau::snsize_t  skip_frames = 2 
)
noexcept

Prints the de-mangled backtrace string separated by newline excluding this function to stderr, using get_backtrace().

Parameters
skip_anon_framesif true, skip all frames w/o proc-name
max_framesnumber of stack frames to be printed or -1 for unlimited, defaults to -1
skip_framesnumber of stack frames to skip, default is two frames for this function and for get_backtrace().
See also
get_backtrace()

Definition at line 173 of file debug.cpp.

Here is the caller graph for this function:

◆ getCurrentMilliseconds()

uint64_t jau::getCurrentMilliseconds ( )
noexcept

Returns current monotonic time in milliseconds.

Definition at line 64 of file basic_types.cpp.

Here is the caller graph for this function:

◆ getWallClockSeconds()

uint64_t jau::getWallClockSeconds ( )
noexcept

Returns current wall-clock system time of day in seconds since Unix Epoch 00:00:00 UTC on 1 January 1970.

Definition at line 71 of file basic_types.cpp.

◆ milli_sleep()

bool jau::milli_sleep ( uint64_t  td_ms,
const bool  ignore_irq = true 
)
noexcept

millisecond sleep using high precision monotonic timer, useful for one-shot delays (only).

Consider using jau::sleep_until or jau::sleep_for utilizing absolute target time sleep when waiting for an event, overcoming clock re-adjustments.

Parameters
td_msduration to sleep in milliseconds
ignore_irqcontinue sleep when interrupted by a signal if true, defaults to true
Returns
true if completed waiting, otherwise false for interruption or error

Definition at line 105 of file basic_types.cpp.

◆ sleep()

bool jau::sleep ( const fraction_timespec relative_time,
const bool  ignore_irq = true 
)
noexcept

sleep using high precision monotonic timer, useful for one-shot delays (only).

Consider using jau::sleep_until or jau::sleep_for utilizing absolute target time sleep when waiting for an event, overcoming clock re-adjustments.

Parameters
relative_timean object of type fraction_timespec representing the time to sleep
ignore_irqcontinue sleep when interrupted by a signal if true, defaults to true
Returns
true if completed waiting, otherwise false for interruption or error

Definition at line 116 of file basic_types.cpp.

◆ sleep_until()

bool jau::sleep_until ( const fraction_timespec absolute_time,
const bool  monotonic = true,
const bool  ignore_irq = true 
)
noexcept

sleep_until causes the current thread to block until the specific time is reached.

Method works similar to std::this_thread::sleep_until(), but utilizes fraction_timespec instead of int64_t nanoseconds counter for maintaining high-precision and infinite range.

Implementation also uses ::clock_nanosleep(), with absolute time and either monotonic- or wall-clok time depending on given monotonic flag. This instead of ::nanosleep() with undefined clock-type and interruptions.

Parameters
absolute_timean object of type fraction_timespec representing the time when to stop waiting
monotonicif true, implementation uses the fast and steady monotonic clock (default), otherwise the wall-clock
ignore_irqcontinue sleep when interrupted by a signal if true, defaults to true
Returns
true if completed waiting, otherwise false for interruption or error
See also
sleep_until()
sleep_for()
wait_until()
wait_for()

Definition at line 125 of file basic_types.cpp.

Here is the caller graph for this function:

◆ sleep_for() [1/2]

bool jau::sleep_for ( const fraction_timespec relative_time,
const bool  monotonic = true,
const bool  ignore_irq = true 
)
noexcept

sleep_for causes the current thread to block until a specific amount of time has passed.

Implementation calls sleep_until() passing absolute time derived via getMonotonicTime() or getWallClockTime(), see:

  fraction_timespec absolute_time = ( monotonic ? getMonotonicTime() : getWallClockTime() ) + relative_time;

Method works similar to std::this_thread::sleep_until(), but utilizes fraction_timespec instead of int64_t nanoseconds counter for maintaining high-precision and infinite range.

Parameters
relative_timean object of type fraction_timespec representing the the maximum time to spend waiting
monotonicif true, implementation uses the fast and steady monotonic clock (default), otherwise the wall-clock
ignore_irqcontinue sleep when interrupted by a signal if true, defaults to true
Returns
true if completed waiting, otherwise false for interruption or error
See also
sleep_until()
sleep_for()
wait_until()
wait_for()

Definition at line 139 of file basic_types.cpp.

Here is the caller graph for this function:

◆ sleep_for() [2/2]

bool jau::sleep_for ( const fraction_i64 relative_time,
const bool  monotonic = true,
const bool  ignore_irq = true 
)
noexcept

sleep_for causes the current thread to block until a specific amount of time has passed.

Implementation calls sleep_until() passing absolute time derived via getMonotonicTime() or getWallClockTime(), see:

  fraction_timespec absolute_time = ( monotonic ? getMonotonicTime() : getWallClockTime() ) + relative_time;

Method works similar to std::this_thread::sleep_until(), but utilizes fraction_timespec instead of int64_t nanoseconds counter for maintaining high-precision and infinite range.

Parameters
relative_timean object of type fraction_i64 representing the the maximum time to spend waiting, which is limited to 292 years if using nanoseconds fractions.
monotonicif true, implementation uses the fast and steady monotonic clock (default), otherwise the wall-clock
ignore_irqcontinue sleep when interrupted by a signal if true, defaults to true
Returns
true if completed waiting, otherwise false for interruption or error
See also
sleep_until()
sleep_for()
wait_until()
wait_for()

Definition at line 147 of file basic_types.cpp.

◆ wait_until()

std::cv_status jau::wait_until ( std::condition_variable &  cv,
std::unique_lock< std::mutex > &  lock,
const fraction_timespec absolute_time,
const bool  monotonic = true 
)
noexcept

wait_until causes the current thread to block until the condition variable is notified, a specific time is reached, or a spurious wakeup occurs.

Method works similar to std::condition_variable::wait_until(), but utilizes fraction_timespec instead of int64_t nanoseconds counter for maintaining high-precision and infinite range.

Parameters
cvstd::condition_variable instance
lockan object of type std::unique_lock<std::mutex>, which must be locked by the current thread
absolute_timean object of type fraction_timespec representing the time when to stop waiting
monotonicif true, implementation uses the fast and steady monotonic clock (default), otherwise the wall-clock
Returns
std::cv_status::timeout if the relative timeout specified by rel_time expired, std::cv_status::no_timeout otherwise.
See also
sleep_until()
sleep_for()
wait_until()
wait_for()

Definition at line 201 of file basic_types.cpp.

Here is the caller graph for this function:

◆ wait_for() [1/2]

std::cv_status jau::wait_for ( std::condition_variable &  cv,
std::unique_lock< std::mutex > &  lock,
const fraction_timespec relative_time,
const bool  monotonic = true 
)
noexcept

wait_for causes the current thread to block until the condition variable is notified, a specific amount of time has passed, or a spurious wakeup occurs.

Implementation calls wait_until() passing absolute time derived via getMonotonicTime() or getWallClockTime(), see:

  fraction_timespec absolute_time = ( monotonic ? getMonotonicTime() : getWallClockTime() ) + relative_time;

Method works similar to std::condition_variable::wait_for(), but utilizes fraction_timespec instead of int64_t nanoseconds counter for maintaining high-precision and infinite range.

When using a condition predicate loop to ensure no spurious wake-up preemptively ends waiting for the condition variable event or timeout, it is always recommended to use wait_until() using the absolute timeout time computed once before said loop. Example from latch::wait_for():

     std::unique_lock<std::mutex> lock(mtx_cd);
     const fraction_timespec timeout_time = getMonotonicTime() + timeout_duration;
     while( 0 < count ) {
         std::cv_status s = wait_until(cv, lock, timeout_time);
         if( 0 == count ) {
             return true;
         }
         if( std::cv_status::timeout == s ) {
             return false;
         }
     }
Parameters
cvstd::condition_variable instance
lockan object of type std::unique_lock<std::mutex>, which must be locked by the current thread
relative_timean object of type fraction_timespec representing the the maximum time to spend waiting
monotonicif true, implementation uses the fast and steady monotonic clock (default), otherwise the wall-clock
Returns
std::cv_status::timeout if the relative timeout specified by rel_time expired, std::cv_status::no_timeout otherwise.
See also
sleep_until()
sleep_for()
wait_until()
wait_for()

Definition at line 219 of file basic_types.cpp.

◆ wait_for() [2/2]

std::cv_status jau::wait_for ( std::condition_variable &  cv,
std::unique_lock< std::mutex > &  lock,
const fraction_i64 relative_time,
const bool  monotonic = true 
)
noexcept

wait_for causes the current thread to block until the condition variable is notified, a specific amount of time has passed, or a spurious wakeup occurs.

Implementation calls wait_until() passing absolute time derived via getMonotonicTime() or getWallClockTime(), see:

  fraction_timespec absolute_time = ( monotonic ? getMonotonicTime() : getWallClockTime() ) + relative_time;

Method works similar to std::condition_variable::wait_for(), but utilizes fraction_timespec instead of int64_t nanoseconds counter for maintaining high-precision and infinite range.

When using a condition predicate loop to ensure no spurious wake-up preemptively ends waiting for the condition variable event or timeout, it is always recommended to use wait_until() using the absolute timeout time computed once before said loop. Example from latch::wait_for():

     std::unique_lock<std::mutex> lock(mtx_cd);
     const fraction_timespec timeout_time = getMonotonicTime() + timeout_duration;
     while( 0 < count ) {
         std::cv_status s = wait_until(cv, lock, timeout_time);
         if( 0 == count ) {
             return true;
         }
         if( std::cv_status::timeout == s ) {
             return false;
         }
     }
Parameters
cvstd::condition_variable instance
lockan object of type std::unique_lock<std::mutex>, which must be locked by the current thread
relative_timean object of type fraction_i64 representing the the maximum time to spend waiting, which is limited to 292 years if using nanoseconds fractions.
monotonicif true, implementation uses the fast and steady monotonic clock (default), otherwise the wall-clock
Returns
std::cv_status::timeout if the relative timeout specified by rel_time expired, std::cv_status::no_timeout otherwise.
See also
sleep_until()
sleep_for()
wait_until()
wait_for()

Definition at line 227 of file basic_types.cpp.

◆ operator==() [1/4]

template<class T1 , class T2 >
bool jau::operator== ( const callocator< T1 > &  lhs,
const callocator< T2 > &  rhs 
)
noexcept

Definition at line 150 of file callocator.hpp.

Here is the caller graph for this function:

◆ operator!=() [1/4]

template<class T1 , class T2 >
bool jau::operator!= ( const callocator< T1 > &  lhs,
const callocator< T2 > &  rhs 
)
noexcept

Definition at line 163 of file callocator.hpp.

◆ operator==() [2/4]

template<class T1 , class T2 >
bool jau::operator== ( const callocator_sec< T1 > &  lhs,
const callocator_sec< T2 > &  rhs 
)
noexcept

Definition at line 149 of file callocator_sec.hpp.

◆ operator!=() [2/4]

template<class T1 , class T2 >
bool jau::operator!= ( const callocator_sec< T1 > &  lhs,
const callocator_sec< T2 > &  rhs 
)
noexcept

Definition at line 162 of file callocator_sec.hpp.

◆ operator==() [3/4]

template<class T1 , class T2 >
bool jau::operator== ( const counting_allocator< T1 > &  lhs,
const counting_allocator< T2 > &  rhs 
)
noexcept

Definition at line 212 of file counting_allocator.hpp.

◆ operator!=() [3/4]

template<class T1 , class T2 >
bool jau::operator!= ( const counting_allocator< T1 > &  lhs,
const counting_allocator< T2 > &  rhs 
)
noexcept

Definition at line 225 of file counting_allocator.hpp.

◆ operator==() [4/4]

template<class T1 , class T2 >
bool jau::operator== ( const counting_callocator< T1 > &  lhs,
const counting_callocator< T2 > &  rhs 
)
noexcept

Definition at line 227 of file counting_callocator.hpp.

◆ operator!=() [4/4]

template<class T1 , class T2 >
bool jau::operator!= ( const counting_callocator< T1 > &  lhs,
const counting_callocator< T2 > &  rhs 
)
noexcept

Definition at line 240 of file counting_callocator.hpp.

◆ DBG_PRINT_impl()

void jau::DBG_PRINT_impl ( const char *  format,
  ... 
)
noexcept

Definition at line 178 of file debug.cpp.

◆ WORDY_PRINT_impl()

void jau::WORDY_PRINT_impl ( const char *  format,
  ... 
)
noexcept

Definition at line 188 of file debug.cpp.

◆ ABORT_impl()

void jau::ABORT_impl ( const char *  func,
const char *  file,
const int  line,
const char *  format,
  ... 
)
noexcept

Use for unconditional ::abort() call with given messages, prefix '[elapsed_time] ABORT @ file:line func: '.

Function also appends last errno and strerror(errno).

Definition at line 198 of file debug.cpp.

◆ ERR_PRINTv()

void jau::ERR_PRINTv ( const char *  func,
const char *  file,
const int  line,
const char *  format,
va_list  args 
)
noexcept

Use for unconditional error messages, prefix '[elapsed_time] Error @ file:line func: '.

Function also appends last errno and strerror(errno).

Definition at line 210 of file debug.cpp.

◆ ERR_PRINT_impl()

void jau::ERR_PRINT_impl ( const char *  prefix,
const bool  backtrace,
const char *  func,
const char *  file,
const int  line,
const char *  format,
  ... 
)
noexcept

Definition at line 218 of file debug.cpp.

◆ WARN_PRINTv()

void jau::WARN_PRINTv ( const char *  func,
const char *  file,
const int  line,
const char *  format,
va_list  args 
)
noexcept

Use for unconditional warning messages, prefix '[elapsed_time] Warning @ file:line func: '.

Definition at line 231 of file debug.cpp.

◆ WARN_PRINT_impl()

void jau::WARN_PRINT_impl ( const char *  func,
const char *  file,
const int  line,
const char *  format,
  ... 
)
noexcept

Definition at line 238 of file debug.cpp.

◆ INFO_PRINT()

void jau::INFO_PRINT ( const char *  format,
  ... 
)
noexcept

Use for unconditional informal messages, prefix '[elapsed_time] Info: '.

Definition at line 248 of file debug.cpp.

Here is the caller graph for this function:

◆ PLAIN_PRINT()

void jau::PLAIN_PRINT ( const bool  printPrefix,
const char *  format,
  ... 
)
noexcept

Use for unconditional plain messages, prefix '[elapsed_time] ' if printPrefix == true.

Definition at line 258 of file debug.cpp.

Here is the caller graph for this function:

◆ fprintf_td() [1/2]

int jau::fprintf_td ( const uint64_t  elapsed_ms,
FILE *  stream,
const char *  format,
  ... 
)
noexcept

Convenient fprintf() invocation, prepending the given elapsed_ms timestamp.

Parameters
elapsed_msthe given elapsed time in milliseconds
streamthe output stream
formatthe format
argsthe optional arguments

Definition at line 270 of file debug.cpp.

Here is the caller graph for this function:

◆ fprintf_td() [2/2]

int jau::fprintf_td ( FILE *  stream,
const char *  format,
  ... 
)
noexcept

Convenient fprintf() invocation, prepending the environment::getElapsedMillisecond() timestamp.

Parameters
streamthe output stream
formatthe format
argsthe optional arguments

Definition at line 278 of file debug.cpp.

◆ COND_PRINT_impl()

void jau::COND_PRINT_impl ( const char *  format,
  ... 
)
noexcept

Definition at line 287 of file debug.cpp.

◆ printSharedPtrList()

template<class List >
void jau::printSharedPtrList ( const std::string &  prefix,
List &  list 
)
inlinenoexcept

Definition at line 155 of file debug.hpp.

Variable Documentation

◆ VERSION

const char* jau::VERSION
extern

◆ VERSION_SHORT

const char* jau::VERSION_SHORT
extern

◆ VERSION_API

const char* jau::VERSION_API
extern