ALib C++ Library
Library Version: 2510 R0
Documentation generated by doxygen
Loading...
Searching...
No Matches
alib.inl File Reference

Description:

This header-file is part of the ALib C++ Library.

© 2013-2025 A-Worx GmbH, Germany. Published under Boost Software License.

This header does not belong to a module of ALib, but is included in any ALib Build. Its purposes are:

  • To identify given ALib Compiler Symbols related to module selection and enable corresponding symbols (that may be not given) of mandatory dependent modules.
  • Detect and assert C++ language version.
  • Define preprocessor utilities as needed throughout ALib.

Definition in file alib.inl.

#include <concepts>
#include <type_traits>
#include <thread>
#include <assert.h>
Include dependency graph for alib.inl:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define ALIB_DOCUMENTATION_URL   "https://alib.dev/"
 DOXYGEN.
 
ALib Version And Feature Verification

Macros used to verify that the ALib binary used has the right version is compiled with the same feature set as the current compilation unit. For this, version and feature flags are compiled statically into the library. The macros are used internally, respectively 'automatically'. Hence, they need not to be used directly clients of the library.

#define ALIB_ASSERT_MODULE(modulename)
 
#define ALIB_REVISION   0
 
#define ALIB_VERSION   2510
 
ALib Module Selection

This group of symbols determine the availability of different ALib Modules of the ALib Build used. The symbols are defined in the internal header alib.inl, which always is and has to be the first ALib header-file included (directly or indirectly). If none of the symbols is passed to the compiler, this header-file will define all to 1, hence will include all modules an ALib Build.

If a symbol is given as 1, all corresponding symbols of dependent modules are also defined to 1, even if one had explicitly given as 0, which is considered a contradicting input.

#define ALIB_ALOX   1
 
#define ALIB_BITBUFFER   1
 
#define ALIB_BOXING   1
 
#define ALIB_CAMP   1
 
#define ALIB_CLI   1
 
#define ALIB_CONTAINERS   1
 
#define ALIB_ENUMRECORDS   1
 
#define ALIB_EXCEPTIONS   1
 
#define ALIB_EXPRESSIONS   1
 
#define ALIB_FILES   1
 
#define ALIB_FORMAT   1
 
#define ALIB_MONOMEM   1
 
#define ALIB_RESOURCES   1
 
#define ALIB_SINGLETONS   1
 
#define ALIB_STRINGS   1
 
#define ALIB_SYSTEM   1
 
#define ALIB_THREADMODEL   1
 
#define ALIB_VARIABLES   1
 
Code Selection

The macros listed here include or prune code, dependent on different preprocessor symbols. They are mainly given to avoid #if/#else/#endif statements for small code pieces.

#define ALIB_CPP_23(...)
 
#define ALIB_CPP_BEFORE_23(...)
 
#define ALIB_DBG(...)
 
#define ALIB_REL(...)
 
#define ALIB_REL_DBG(releaseCode, ...)
 
#define IF_ALIB_ALOX(...)
 
#define IF_ALIB_BITBUFFER(...)
 
#define IF_ALIB_BOXING(...)
 
#define IF_ALIB_CAMP(...)
 
#define IF_ALIB_CLI(...)
 
#define IF_ALIB_CONTAINERS(...)
 
#define IF_ALIB_ENUMRECORDS(...)
 
#define IF_ALIB_EXCEPTIONS(...)
 
#define IF_ALIB_EXPRESSIONS(...)
 
#define IF_ALIB_FILES(...)
 
#define IF_ALIB_FORMAT(...)
 
#define IF_ALIB_MONOMEM(...)
 
#define IF_ALIB_RESOURCES(...)
 
#define IF_ALIB_SINGLETONS(...)
 
#define IF_ALIB_STRINGS(...)
 
#define IF_ALIB_SYSTEM(...)
 
#define IF_ALIB_THREADMODEL(...)
 
#define IF_ALIB_THREADS(...)
 
#define IF_ALIB_VARIABLES(...)
 
#define IFNOT_ALIB_ALOX(...)
 
#define IFNOT_ALIB_BITBUFFER(...)
 
#define IFNOT_ALIB_BOXING(...)
 
#define IFNOT_ALIB_CAMP(...)
 
#define IFNOT_ALIB_CLI(...)
 
#define IFNOT_ALIB_CONTAINERS(...)
 
#define IFNOT_ALIB_ENUMRECORDS(...)
 
#define IFNOT_ALIB_EXCEPTIONS(...)
 
#define IFNOT_ALIB_EXPRESSIONS(...)
 
#define IFNOT_ALIB_FILES(...)
 
#define IFNOT_ALIB_FORMAT(...)
 
#define IFNOT_ALIB_MONOMEM(...)
 
#define IFNOT_ALIB_RESOURCES(...)
 
#define IFNOT_ALIB_SINGLETONS(...)
 
#define IFNOT_ALIB_STRINGS(...)
 
#define IFNOT_ALIB_SYSTEM(...)
 
#define IFNOT_ALIB_THREADMODEL(...)
 
#define IFNOT_ALIB_THREADS(...)
 
#define IFNOT_ALIB_VARIABLES(...)
 
C/C++ Language And Linkage Macros

The macros listed here are supporting C++ compilation and linking control and language specific utilities.

#define ALIB_ASSERT_GLOBAL_NAMESPACE
 
#define ALIB_CALLER   {__FILE__,__LINE__,ALIB_CALLER_FUNC,::std::this_thread::get_id(),&typeid(*this)}
 
#define ALIB_CALLER_FUNC   __FUNCTION__
 
#define ALIB_CALLER_NULLED   ALIB_CALLER
 
#define ALIB_CALLER_NULLED_COMMA   ALIB_CALLER ,
 
#define ALIB_CALLER_PRUNED   ALIB_CALLER
 
#define ALIB_CALLER_PRUNED_COMMA   ALIB_CALLER ,
 
#define ALIB_COMMA_CALLER_NULLED   , ALIB_CALLER
 
#define ALIB_COMMA_CALLER_PRUNED   , ALIB_CALLER
 
#define ALIB_DBG_TAKE_CI   const CallerInfo& ci
 
#define ALIB_DLL   __declspec(dllexport)
 
#define ALIB_EXPORT   export
 
#define ALIB_SIZEOF_WCHAR_T   4
 
#define ALIB_STACK_ALLOCATED_TYPE(T)
 
#define bitsof(type)
 
C/C++ Compiler Warning Control

ALib sources are designed to be compiled on different compilers using the highest possible compiler warning levels available. In some situations, some warnings need to be temporarily disabled. The following macros do this in a compiler agnostic way.

#define ALIB_FALLTHROUGH   [[clang::fallthrough]];
 
#define ALIB_WARNINGS_ALLOW_BITWISE_SWITCH
 
#define ALIB_WARNINGS_ALLOW_MACRO_REDEFINITION
 
#define ALIB_WARNINGS_ALLOW_NULL_POINTER_PASSING    _Pragma("clang diagnostic push") \
 
#define ALIB_WARNINGS_ALLOW_SHIFT_COUNT_OVERFLOW
 
#define ALIB_WARNINGS_ALLOW_SPARSE_ENUM_SWITCH
 
#define ALIB_WARNINGS_ALLOW_UNREACHABLE_CODE
 
#define ALIB_WARNINGS_ALLOW_UNSAFE_FUNCTION_OR_VARIABLE
 
#define ALIB_WARNINGS_IGNORE_DEPRECATED
 
#define ALIB_WARNINGS_IGNORE_DOCS
 
#define ALIB_WARNINGS_IGNORE_FUNCTION_TEMPLATE
 
#define ALIB_WARNINGS_IGNORE_INTEGER_OVERFLOW
 
#define ALIB_WARNINGS_IGNORE_INTEGRAL_CONSTANT_OVERFLOW    _Pragma("clang diagnostic push") \
 
#define ALIB_WARNINGS_IGNORE_NOTHING_RETURNED
 
#define ALIB_WARNINGS_IGNORE_RESERVED_IDENTIFIER
 
#define ALIB_WARNINGS_IGNORE_SIGN_CONVERSION
 
#define ALIB_WARNINGS_IGNORE_UNUSED_FUNCTION
 
#define ALIB_WARNINGS_IGNORE_UNUSED_LAMBDA_CAPTURE
 
#define ALIB_WARNINGS_IGNORE_UNUSED_MACRO
 
#define ALIB_WARNINGS_IGNORE_UNUSED_PARAMETER
 
#define ALIB_WARNINGS_IGNORE_UNUSED_VARIABLE
 
#define ALIB_WARNINGS_MACRO_NOT_USED_OFF
 
#define ALIB_WARNINGS_OVERLOAD_VIRTUAL_OFF
 
#define ALIB_WARNINGS_RESERVED_MACRO_NAME_OFF
 
#define ALIB_WARNINGS_RESTORE    _Pragma("clang diagnostic pop") \
 
#define ALIB_WARNINGS_UNINITIALIZED_OFF
 
ALib Module Characters Feature Selection

#define ALIB_CHARACTERS_SIZEOF_WCHAR   ALIB_SIZEOF_WCHAR_T
 
#define ALIB_CHARACTERS_WIDE   1
 
C/C++ Preprocessor Helper Macros

The following macros are fundamental and building blocks for other macros.

#define ALIB_COMMA   ,
 
#define ALIB_COMMA_DBG   ,
 
#define ALIB_CONCAT(a, b)
 
#define ALIB_EMPTY
 
#define ALIB_IDENTIFIER(prefix)
 
#define ALIB_NSTRINGIFY(a)
 
#define ALIB_STATIC_ASSERT(CondVariable, Cond, Message)
 
#define ALIB_STATIC_DENY(CondVariable, Cond, Message)
 
#define ALIB_STRINGIFY(a)
 
C++ Template Programming Tools

Macros for handling template types.

#define ALIB_HAS_METHOD(T, Method, ...)
 
#define ALIB_TVALUE(T)
 
Debug Assertions, Warnings and Errors

These macros are used with debug-builds of ALib, respectively when symbol ALIB_DEBUG is given. They provide shortcuts into functions of the small foundational module ALib Module Assert - Programmer's Manual.

If also module ALox is compiled into the library, then a plug-in that uses ALox for the message output is used. See class ALoxAssertionPlugin for more information.

#define ALIB_ASSERT(cond, domain)
 
#define ALIB_ASSERT_ERROR(cond, domain, ...)
 
#define ALIB_ASSERT_MESSAGE(cond, domain, ...)
 
#define ALIB_ASSERT_RESULT_EQUALS( func, value)
 
#define ALIB_ASSERT_RESULT_GREATER_THAN(func, value)
 
#define ALIB_ASSERT_RESULT_LESS_THAN( func, value)
 
#define ALIB_ASSERT_RESULT_NOT_EQUALS( func, value)
 
#define ALIB_ASSERT_WARNING(cond, domain, ...)
 
#define ALIB_ERROR(domain, ...)
 
#define ALIB_MESSAGE(domain, ...)
 
#define ALIB_WARNING(domain, ...)
 
ALib Module Characters

The macros in this section are introduced by module ALib Characters.

#define ALIB_CHAR_TYPE_ID_N   1
 
#define ALIB_CHAR_TYPE_ID_W   2
 
#define ALIB_CHAR_TYPE_ID_X   3
 
#define ALIB_CHARACTER_ARRAY( T, TChar, Access, Construction)
 
#define ALIB_CHARACTER_ARRAY_IMPL_BUFFER( T, TChar, ...)
 
#define ALIB_CHARACTER_ARRAY_IMPL_BUFFER_MUTABLE( T, TChar, ...)
 
#define ALIB_CHARACTER_ARRAY_IMPL_CONSTRUCT( T, TChar, ...)
 
#define ALIB_CHARACTER_ARRAY_IMPL_LENGTH( T, TChar, ...)
 
#define ALIB_CHARACTER_ARRAY_IMPL_LENGTH_MUTABLE( T, TChar, ...)
 
#define ALIB_CHARACTER_ARRAY_MUTABLE( T, TChar, Construction)
 
#define ALIB_CHARACTER_ZT_ARRAY( T, TChar, Access, Construction)
 
#define ALIB_CHARACTER_ZT_ARRAY_IMPL_BUFFER( T, TChar, ...)
 
#define ALIB_CHARACTER_ZT_ARRAY_IMPL_BUFFER_MUTABLE(T, TChar, ...)
 
#define ALIB_CHARACTER_ZT_ARRAY_IMPL_CONSTRUCT( T, TChar, ...)
 
#define ALIB_CHARACTER_ZT_ARRAY_IMPL_LENGTH( T, TChar, ...)
 
#define ALIB_CHARACTER_ZT_ARRAY_IMPL_LENGTH_MUTABLE(T, TChar, ...)
 
#define ALIB_CHARACTER_ZT_ARRAY_MUTABLE(T, TChar, Construction)
 
Macros for Resource Locking and Recursive Programming

The macros listed here have a direct relationship with classes defined in ALib and with their use.

#define ALIB_DBG_PREVENT_RECURSIVE_METHOD_CALLS
 
#define ALIB_DBG_PREVENT_RECURSIVE_METHOD_CALLS_MEMBER_DECL   bool dbgRecursionDetectionFlag = false;
 
#define ALIB_OWN( ownable)
 
#define ALIB_OWN_RECURSIVE(ownable)
 
#define ALIB_OWN_SHARED( ownable)
 
ALib Module Threads

While macros in this section logically belong to module ALib Threads, they are available (but empty) also when this module is not included in the ALib Build. An explanation to this is given with chapter 1.2 Threading-Agnostic Software of this module's Programmer's Manual.

Their definition depends on the setting of ALIB_DEBUG_CRITICAL_SECTIONS, which defaults to 1, in case module ALib Threads is included in the ALib Build.

If the symbol is not set, all the symbols in this section are empty.

#define ALIB_DCS   ALIB_OWN(*this)
 
#define ALIB_DCS_ACQUIRE   Acquire(ALIB_CALLER);
 
#define ALIB_DCS_ACQUIRE_SHARED   AcquireShared(ALIB_CALLER);
 
#define ALIB_DCS_ACQUIRE_SHARED_WITH(CS)
 
#define ALIB_DCS_ACQUIRE_WITH(CS)
 
#define ALIB_DCS_RELEASE   Release(ALIB_CALLER);
 
#define ALIB_DCS_RELEASE_SHARED   ReleaseShared(ALIB_CALLER);
 
#define ALIB_DCS_RELEASE_SHARED_WITH(CS)
 
#define ALIB_DCS_RELEASE_WITH(CS)
 
#define ALIB_DCS_SHARED   ALIB_OWN_SHARED(*this)
 
#define ALIB_DCS_SHARED_WITH(CS)
 
#define ALIB_DCS_WITH(CS)
 
#define ALIB_LOCK   ALIB_OWN(*this)
 
#define ALIB_LOCK_RECURSIVE   ALIB_OWN_RECURSIVE(*this)
 
#define ALIB_LOCK_RECURSIVE_WITH(lock)
 
#define ALIB_LOCK_SHARED   ALIB_OWN_SHARED(*this)
 
#define ALIB_LOCK_SHARED_WITH(lock)
 
#define ALIB_LOCK_WITH(lock)
 

Macro Definition Documentation

◆ ALIB_DOCUMENTATION_URL

#define ALIB_DOCUMENTATION_URL   "https://alib.dev/"

DOXYGEN.

Definition at line 246 of file alib.inl.