This namespace holds types and functions, which are very close to the C++ language itself. The availability of most of the entities found here, is not related to the inclusion of a certain ALib Module within the ALib Distribution chosen. Instead, the corresponding header files are always included when compiling ALib.
With the inclusion of ALib BaseCamp in the ALib Distribution, type Camp is found, which is used to organize the library in respect to resource management and bootstrapping. Furthermore, this very special "Camp-Module" adds sub-namespaces
to this namespace, as well as a few other basic language-related types like lang::Exception.
Nested Namespaces: | |
namespace | basecamp |
namespace | detail |
Internal details of namespace alib::lang. | |
namespace | format |
namespace | resources |
namespace | system |
This is the reference documentation of sub-namespace system of module ALib BaseCamp. | |
Type Index: | |
struct | Allocator |
struct | AllocatorInterface |
struct | AllocatorMember |
struct | AllocatorMember< HeapAllocator > |
struct | BidiListHook |
struct | BidiNodeBase |
struct | CallerInfo |
class | Camp |
struct | DbgAlloc |
struct | DbgCriticalSections |
class | DbgTypeDemangler |
struct | ERException |
class | Exception |
struct | HeapAllocator |
struct | Message |
class | Owner |
class | OwnerRecursive |
class | OwnerShared |
class | OwnerSharedTimed |
class | OwnerTimed |
class | OwnerTry |
class | OwnerTryShared |
struct | Placeholder |
class | Plugin |
class | PluginContainer |
class | Report |
class | ReportWriter |
class | ReportWriterStdIO |
struct | RTTRAllocator |
struct | SidiListHook |
struct | SidiNodeBase |
struct | StdContainerAllocator |
struct | StdContainerAllocatorRecycling |
class | TBitSet |
struct | TMPUnknownType |
Type Definition Index: | |
using | integer = platform_specific |
using | intGap_t = platform_specific |
using | uinteger = platform_specific |
using | uintGap_t = platform_specific |
Enumeration Index: | |
enum class | Alignment { Left , Right , Center } |
Denotes Alignments. More... | |
enum class | Bool : bool { False , True } |
enum class | Caching { Disabled , Enabled , Auto } |
Denotes if a cache mechanism is enabled or disabled. More... | |
enum class | Case : bool { Sensitive , Ignore } |
Denotes upper and lower case character treatment. More... | |
enum class | ContainerOp { Insert , Remove , Get , GetCreate , Create } |
Denotes standard container operations. More... | |
enum class | CreateDefaults : bool { No , Yes } |
Denotes whether default entities should be created or not. More... | |
enum class | CreateIfNotExists : bool { No , Yes } |
Denotes whether something should be created if it does not exist. More... | |
enum class | CurrentData : bool { Keep , Clear } |
enum class | Inclusion : bool { Include , Exclude } |
Denotes how members of a set something should be taken into account. More... | |
enum class | Initialization { Suppress , Default , Nulled } |
Used for example with constructors that allow to suppress initialization of members. More... | |
enum class | Phase { Begin = (1 << 0) , End = (1 << 1) } |
Denotes a phase, e.g.,of a transaction. More... | |
enum class | Propagation : bool { Omit , ToDescendants } |
Denotes whether a e.g a setting should be propagated. More... | |
enum class | Reach : bool { Global , Local } |
Denotes the reach of something. More... | |
enum class | Recursive : bool { No , Yes } |
Denotes whether recursion is performed/allowed or not. More... | |
enum class | ReportExceptions { ErrorWritingReport = 1 } |
Exception codes of class Report. More... | |
enum class | Responsibility : bool { KeepWithSender , Transfer } |
enum class | Safeness : bool { Safe , Unsafe } |
Denotes whether something should be performed in a safe or unsafe fashion. More... | |
enum class | Side : bool { Left , Right } |
Denotes if something is left or right. More... | |
enum class | SortOrder : bool { Ascending , Descending } |
Denotes sort order. More... | |
enum class | SourceData : bool { Copy , Move } |
Denotes if the source data should be moved or copied. More... | |
enum class | Switch : bool { Off , On } |
Denotes if sth. is switched on or off. More... | |
enum class | Timezone : bool { Local , UTC } |
Denotes whether a time value represents local time or UTC. More... | |
enum class | Timing { Async , Sync } |
Denotes if asynchronous tasks become synchronized. More... | |
enum class | ValueReference { Absolute , Relative } |
Denotes if a value is interpreted as an absolute or relative number. More... | |
enum class | Whitespaces : bool { Trim , Keep } |
Denotes whether a string is trimmed or not. More... | |
Function Index: | |
template<typename TIntegral > | |
constexpr int | BitCount (TIntegral value) |
template<typename T > | |
constexpr int | bitsofval (const T &val) |
template<typename TIntegral > | |
constexpr int | CLZ (TIntegral value) |
template<typename TIntegral > | |
constexpr int | CLZ0 (TIntegral value) |
template<typename TIntegral > | |
constexpr int | CTZ (TIntegral value) |
template<typename TIntegral > | |
constexpr int | CTZ0 (TIntegral value) |
ALIB_API void | DbgSimpleALibMsg (const CallerInfo &ci, int type, const char *topic, const char *msg, const int intValue) |
ALIB_API void | DbgSimpleALibMsg (const CallerInfo &ci, int type, const char *topic, const char *msg1=nullptr, const char *msg2=nullptr, const char *msg3=nullptr, const char *msg4=nullptr, const char *msg5=nullptr) |
ALIB_WARNINGS_ALLOW_UNSAFE_BUFFER_USAGE void | debugReportPlugin (const CallerInfo &ci, int type, const char *topic, int qtyMsgs, const nchar **msgs) |
template<typename T > | |
static ALIB_FORCE_INLINE void | Destruct (T &object) |
template<typename T > | |
constexpr bool | IsNotNull (const T &t) |
template<typename T > | |
constexpr bool | IsNull (const T &t) |
template<typename TIntegral > | |
constexpr int | Log2OfSize () |
template<typename TIntegral > | |
constexpr TIntegral | LowerBits (ShiftOpRHS width, TIntegral value) |
template<ShiftOpRHS TWidth, typename TIntegral > | |
constexpr TIntegral | LowerBits (TIntegral value) |
template<ShiftOpRHS TWidth, typename TIntegral > | |
constexpr TIntegral | LowerMask () |
template<typename TIntegral > | |
constexpr TIntegral | LowerMask (ShiftOpRHS width) |
template<typename TIntegral > | |
constexpr int | MSB (TIntegral value) |
template<typename TIntegral > | |
constexpr int | MSB0 (TIntegral value) |
template<typename TTo , typename TFrom > | |
TTo * | SafeCast (TFrom *derived) |
template<typename T > | |
constexpr void | SetNull (const T &t) |
template<ShiftOpRHS TWidth, typename TIntegral > | |
constexpr TIntegral | UpperMask () |
template<typename TIntegral > | |
constexpr TIntegral | UpperMask (ShiftOpRHS width) |
Variable Index: | |
unsigned int | DBG_CRITICAL_SECTION_YIELD_OR_SLEEP_TIME_IN_NS |
void(* | DBG_SIMPLE_ALIB_MSG_PLUGIN )(const CallerInfo &ci, int type, const char *topic, int qtyMsgs, const char **msgs) =nullptr |
using integer = platform_specific |
This type specifies platform-independent integral values of the 'natural' bit-size of the underlying platform. In general, on 32-bit systems this will be 32-bit wide, on 64-bit systems, 64-bits. Hence, on standard architectures, it has the same bit-size and signedness as std::ptrdiff_t.
The type can be considered as a signed version of std::size_t
. It is needed because standard type 'int'
is not specified in respect to its size. E.g., GNU C++ and Clang compiler use 32-Bit integers for type int
, even on 64-Bit platforms.
See also alib::uinteger.
int64_t
shown here, is not guaranteed platform-specific. Definition at line 43 of file integers.hpp.
using intGap_t = platform_specific |
This type, together with its counterpart alib::uintGap_t is used to fill a gap that occurs when method overloads or template specialization are needed for integer types. The rationale behind and use of this pair of types is best explained with a sample.
Consider the following code:
When this is run under 64 Bit - Linux, GNU compiler, the following output is produced:
int8_t : Type= int8_t uint8_t : Type= uint8_t int16_t : Type= int16_t uint16_t : Type= uint16_t int32_t : Type= int32_t uint32_t : Type= uint32_t int64_t : Type= int64_t uint64_t : Type= uint64_t long : Type= int64_t unsigned long : Type= uint64_t long long: NOT IMPLEMENTED unsigned long long: NOT IMPLEMENTED sizeof( long )= 8 sizeof(unsigned long )= 8 sizeof( long long)= 8 sizeof(unsigned long long)= 8
This is not what many C++ programmers would expect: Although type long long
is the same 64-bit type as long
, the template method is not seen as specialized by the compiler. Therefore, we have a "gap" in the definition of specializations for types long long
and unsigned long long
.
When compiling and running the same sample code under GNU compiler 32-bit or under MSVC (Microsoft compiler), 32 or 64-bit, then the gap "moves" to be with types long
and unsigned long
instead. Here, this hurts a lot, because code that uses a simple integer constant 1L
is not fetched by the template specializations!
The lesson learned is that two more specializations are needed and that their types are dependent on the compiler and library used. Because it is not allowed to specialize simply with all possible extra variants (this would lead to doubly defined methods), a preprocessor switch that chooses the right types to fill the gap is needed.
This type, together with uintGap_t, does exactly this: using the preprocessor to select the right "missing" type.
To fix the sample above, the following two specializations of the template method need to be added:
When overloading functions with integer types, similar rules apply: To have the complete set of integer types covered, 10 overloads are needed: from type int8_t to type int64_t, type intGap_t and then those five types in two versions, signed and unsigned. Only with all overloads in place, compiler warnings (on high warning levels), compiler errors due to ambiguouties and/or the necessity of explicit type conversions are avoided.
Definition at line 95 of file integers.hpp.
using uinteger = platform_specific |
Unsigned version of alib::integer. This type should be the same as std::size_t
on all platforms.
Definition at line 47 of file integers.hpp.
using uintGap_t = platform_specific |
Used to complete overwriting methods and template specializations.
See signed sibling type alib::intGap_t for more information.
Definition at line 99 of file integers.hpp.
|
strong |
Denotes Alignments.
Enumerator | |
---|---|
Left | Chooses left alignment. |
Right | Chooses right alignment. |
Center | Chooses centered alignment. |
Definition at line 29 of file commonenumdefs.hpp.
|
strong |
Enumeration representing a boolean value. While the use of this enumeration type seems senseless at the first sight (as the C++ has keywords bool
, false
and true
), the reason for its existence is to have write and parse methods in place using the concept of ALib Enum Records.
The default name translation table is equipped with various 'overloaded' element entries like "yes", "no", "on", "off", "1" or "0". Furthermore, if other languages should be supported, this can even be extended at run-time.
Enumerator | |
---|---|
False | False value. |
True | True value. |
Definition at line 46 of file commonenumdefs.hpp.
|
strong |
Denotes if a cache mechanism is enabled or disabled.
Enumerator | |
---|---|
Disabled | Caching is disabled. |
Enabled | Caching is enabled. |
Auto | Auto/default mode. |
Definition at line 55 of file commonenumdefs.hpp.
|
strong |
Denotes upper and lower case character treatment.
Definition at line 66 of file commonenumdefs.hpp.
|
strong |
Denotes standard container operations.
Enumerator | |
---|---|
Insert | Denotes insertions. |
Remove | Denotes removals. |
Get | Denotes to search data. |
GetCreate | Denotes to create data if not found. |
Create | Denotes to create data. |
Definition at line 78 of file commonenumdefs.hpp.
|
strong |
Denotes whether default entities should be created or not.
Enumerator | |
---|---|
No | Do not create. |
Yes | Create default values. |
Definition at line 90 of file commonenumdefs.hpp.
|
strong |
Denotes whether something should be created if it does not exist.
Enumerator | |
---|---|
No | Do not create. |
Yes | Create if something does not exist. |
Definition at line 99 of file commonenumdefs.hpp.
|
strong |
Denotes if current, existing data should be cleared or if new data should be appended or otherwise added.
Enumerator | |
---|---|
Keep | Chooses not no clear existing data. |
Clear | Chooses to clear existing data. |
Definition at line 109 of file commonenumdefs.hpp.
|
strong |
Denotes how members of a set something should be taken into account.
Enumerator | |
---|---|
Include | Chooses inclusion. |
Exclude | Chooses exclusion. |
Definition at line 118 of file commonenumdefs.hpp.
|
strong |
Used for example with constructors that allow to suppress initialization of members.
Definition at line 127 of file commonenumdefs.hpp.
|
strong |
Denotes a phase, e.g.,of a transaction.
Enumerator | |
---|---|
Begin | The start of a transaction. |
End | The end of a transaction. |
Definition at line 140 of file commonenumdefs.hpp.
|
strong |
Denotes whether a e.g a setting should be propagated.
Enumerator | |
---|---|
Omit | Do not propagate changes. |
ToDescendants | Propagate changes to descendants/children/subcomponents. |
Definition at line 149 of file commonenumdefs.hpp.
|
strong |
Denotes the reach of something.
Enumerator | |
---|---|
Global | Denotes global reach. |
Local | Denotes local reach. |
Definition at line 158 of file commonenumdefs.hpp.
|
strong |
Denotes whether recursion is performed/allowed or not.
Enumerator | |
---|---|
No | Denotes non-recursive. |
Yes | Denotes recursion. |
Definition at line 167 of file commonenumdefs.hpp.
|
strong |
Exception codes of class Report.
Enumerator | |
---|---|
ErrorWritingReport | Error when writing a report. This typically indicates an erroneous format string in an ALIB_ASSERT_ERROR or related macro. |
Definition at line 31 of file report.hpp.
|
strong |
Denotes whether the responsibility for something is kept or passed. This is useful, e.g., in situations where objects are shared to determine if the responsibility for the deletion of object is transferred over to the receiver or kept by the sender of the object.
Enumerator | |
---|---|
KeepWithSender | Keeps responsibility, e.g., when passing an object. |
Transfer | Transfers responsibility to the receiving party. |
Definition at line 178 of file commonenumdefs.hpp.
|
strong |
Denotes whether something should be performed in a safe or unsafe fashion.
Enumerator | |
---|---|
Safe | Do it or treat it with safety. |
Unsafe | Omit checks or perform unsafe operations. |
Definition at line 187 of file commonenumdefs.hpp.
|
strong |
Denotes if something is left or right.
Enumerator | |
---|---|
Left | Denotes the left side of something. |
Right | Denotes the right side of something. |
Definition at line 196 of file commonenumdefs.hpp.
|
strong |
Denotes sort order.
Enumerator | |
---|---|
Ascending | Chooses ascending sort oder. |
Descending | Chooses descending sort oder. |
Definition at line 205 of file commonenumdefs.hpp.
|
strong |
Denotes if the source data should be moved or copied.
Enumerator | |
---|---|
Copy | Chooses not to clear existing data. |
Move | Chooses to clear existing data. |
Definition at line 214 of file commonenumdefs.hpp.
|
strong |
Denotes if sth. is switched on or off.
Enumerator | |
---|---|
Off | Switch it off, switched off, etc. |
On | Switch it on, switched on, etc. |
Definition at line 223 of file commonenumdefs.hpp.
|
strong |
Denotes whether a time value represents local time or UTC.
Enumerator | |
---|---|
Local | Denotes local time. |
UTC | Denotes UTC (coordinated universal time). |
Definition at line 232 of file commonenumdefs.hpp.
|
strong |
Denotes if asynchronous tasks become synchronized.
Definition at line 241 of file commonenumdefs.hpp.
|
strong |
Denotes if a value is interpreted as an absolute or relative number.
Enumerator | |
---|---|
Absolute | Referring to an absolute value. |
Relative | Referring to a relative value. |
Definition at line 253 of file commonenumdefs.hpp.
|
strong |
Denotes whether a string is trimmed or not.
Enumerator | |
---|---|
Trim | Trim whitespaces away. |
Keep | Keep whitespaces in string. |
Definition at line 262 of file commonenumdefs.hpp.
|
constexpr |
Returns the number of bits set in an integral value. Internally, this method uses:
__builtin_popcount
(and variations) which translate to a single assembly instruction, and a constexpression in case value
is known at compile-time.popcount
is used.TIntegral | The integral type to operate on. |
value | The value to test. |
|
inlineconstexpr |
Like C++ keyword sizeof
but returns the number of bits of the type of the given value. The return type is int
instead of size_t
, which satisfies ALib code conventions.
sizeof
, as an exception from the rules, this function is spelled in lower case.val | The (sample) value to deduce the type from. Otherwise ignored. |
T | The type to receive the size in bits from. |
|
constexpr |
Returns the number of the leading 0-bits in an integral type. Internally, this method uses:
__builtin_clz
(or variations) which translate to a single assembly instruction, and a constexpression in case value
is known at compile-time._BitScanReverse
or _BitScanReverse64
is used.value
of 0
! In debug-compilations, this method raises an ALib assertion in this case, while in release-compilations, the result is 'undefined'. With function MSB0, an alternative is given which returns 0
if the input is 0
.TIntegral | The integral type to operate on. |
value | The value to test. Must not be 0 . |
value
.
|
constexpr |
Variant of CLZ which tests given parameter value
on 0
and returns sizeof(TIntegral) * 8
in this case. Otherwise, returns the result of CLZ.
TIntegral | The integral type to operate on. |
value | The value to test. May be 0 , which results to the number of bits in TIntegral . |
value
.
|
constexpr |
Returns the number of the trailing 0-bits in an integral type. Internally, this method uses:
__builtin_ctz
(and variations) which translate to a single assembly instruction, and a constexpression in case value
is known at compile-time._BitScanForward
or _BitScanForward64
is used.value
of 0
! In debug-compilations, this method raises an ALib assertion in this case, while in release-compilations, the result is 'undefined'. With function CTZ0, an alternative is given which returns 0
if the input is 0
.TIntegral | The integral type to operate on. |
value | The value to test. Must not be 0 . |
value
.
|
constexpr |
Variant of CTZ which tests given parameter value
on 0
and returns sizeof(TIntegral) * 8
in this case. Otherwise, returns the result of CLZ.
TIntegral | The integral type to operate on. |
value | The value to test. May be 0 , which results to the number of bits in TIntegral . |
value
. In case the given value is 0
, sizeof(Tintegral) * 8
is returned.
|
extern |
Overloaded version of DbgSimpleALibMsg which accepts one integral value and writes msg and intValue in sequence.
ci | Caller information. |
type | The type of the message. The default implementation does not use this, other than invoking assert(0) in the case this parameter equals 0 . |
topic | The topic of the report. |
msg | The message string. |
intValue | An integer parameter (optional due to overload). |
|
extern |
Some ALib modules do not (must not) rely on Report / ReportWriter mechanics. Therefore, this simple method is used for error handling in those portions of ALib that are exposed in such modules.
This method first checks if static function pointer lang::DBG_SIMPLE_ALIB_MSG_PLUGIN is set and if yes, passes the parameters to this method and exits. If the module ALib BaseCamp is included in the ALib Distribution, method BaseCamp::bootstrap sets this plug-in function to a custom one which passes the message(s) to a proper ALib Report.
Otherwise, the method just writes to the standard output stream and then, if type equals 0
, invokes assert(0)
.
ci | Caller information. |
type | The type of the message. The default implementation does not use this, other than invoking assert(0) in the case this parameter equals 0 . |
topic | The topic of the message. |
msg1 | The first message string. |
msg2 | Optional 2nd message string. |
msg3 | Optional 3rd message string. |
msg4 | Optional 4th message string. |
msg5 | Optional 5th message string. |
ALIB_WARNINGS_ALLOW_UNSAFE_BUFFER_USAGE void debugReportPlugin | ( | const CallerInfo & | ci, |
int | type, | ||
const char * | topic, | ||
int | qtyMsgs, | ||
const nchar ** | msgs ) |
This method is installed with lang::DBG_SIMPLE_ALIB_MSG_PLUGIN in method Camp::bootstrap.
The message strings are simply passed to the default Report. This way, the essential assert, error and message macros are using the ALib report system at the moment that the ALib BaseCamp is included in the ALib Distribution.
ci | Information about the scope of invocation. |
type | The type of message. See Message. |
topic | The topic of message. |
qtyMsgs | The number of messages in msgs. |
msgs | A list of strings (this is all that the essential versions of ALib reporting macros provide). |
Definition at line 98 of file basecamp.cpp.
|
static |
This static inline namespace function calls the destructor ~T()of given object. The use of this method is recommended instead of calling the destructor directly, to increase readability of the code.
T | The object type. Deduced by the compiler and not need to be given. |
object | The object to destruct. |
Definition at line 729 of file allocation.hpp.
|
inlineconstexpr |
The negation of alib::lang::IsNull.
t | The instance to test. |
false
if t is default-constructed, true
otherwise.
|
inlineconstexpr |
Checks if a given object equals a default-constructed value of the same type. This function is useful with types that are not otherwise testable, for example, type std::thread::id
.
t | The instance to test. |
true
if t is default-constructed, false
otherwise.
|
inlineconstexpr |
Returns the logarithm base 2 for the size in bits of the template given integral type.
Precisely, this function returns:
TIntegral | The integral type to count bits in. |
TIntegral
.
|
inlineconstexpr |
Inline namespace function that keeps the given number of lower bits and masks the higher ones out of the given integral value. Parameter width
must not be greater or equal to the width of the given TIntegral
type. In debug compilations, an assertion is raised.
width | The number of lower bits to keep. |
value | The value to mask. |
TIntegral | The integral type to operate on (deduced by the compiler). |
|
inlineconstexpr |
Inline namespace function that keeps the given number of lower bits and masks the higher ones out of the given integral value. If parameter TWidth
is greater or equal to the width of the given TIntegral
type, then all bits are returned.
value | The value to mask. |
TWidth | The number of lower bits to keep. |
TIntegral | The integral type to operate on (deduced by the compiler). |
|
inlineconstexpr |
Inline namespace function that returns a mask with bits set to 1
up to the given binary digit, and bits above to 0
. If parameter TWidth
is greater or equal to the width of the given TIntegral
type, then all bits are set in the returned value.
TWidth | The number of lower bits to set to 1 . |
TIntegral | The integral type to operate on. |
|
inlineconstexpr |
Inline namespace function that returns a mask with bits set to 1
up to the given binary digit, and bits above to 0
. Parameter width
must not be greater or equal to the width of the given TIntegral
type. In debug compilations, an assertion is raised in that case.
TIntegral | The integral type to operate on. |
width | The number of lower bits to set in the mask returned. |
|
constexpr |
Returns the number of the most significant bit in an integral type. Internally, this method uses CLZ and returns
int(sizeof(TIntegral)) * 8 - CLZ(value)
value
of 0
! In debug-compilations, this method raises an ALib assertion in this case, while in release-compilations, the result is 'undefined'. With function MSB0, an alternative is given which returns 0
if the input is 0
.CTZ() + 1
.TIntegral | The integral type to operate on. |
value | The value to test. Must not be 0 . |
value
. The numbering starts with 1
and ends with sizeof(Tintegral) * 8
.
|
constexpr |
Variant of MSB which tests given parameter value
on 0
and returns 0
in this case. Otherwise, returns the result of MSB.
TIntegral | The integral type to operate on. |
value | The value to test. May be 0 , which results to 0 . |
value
. The numbering starts with 1
and ends with sizeof(Tintegral)* 8
. If value is 0
, hence no bit is set, 0
is returned. TTo * SafeCast | ( | TFrom * | derived | ) |
Cast function that chooses either static_cast
or dynamic_cast
, dependent on whether type TTo is polymorphic or not.
TTo | The type to cast down to. |
TFrom | The type to cast from. |
derived | A pointer to the derived type. |
|
inlineconstexpr |
Assigns a default-constructed value to the given instance. This function is useful with types that are not otherwise nullable, for example, type std::thread::id
.
t | The instance to test. |
|
inlineconstexpr |
Inline namespace function that returns a mask with bits set to 0
up to the given binary digit, and bits above to 1
. If parameter TWidth
is greater or equal to the width of the given TIntegral
type, then all bits are set in the returned value.
TWidth | The number of lower bits to clear to 1 . |
TIntegral | The integral type to operate on. |
|
inlineconstexpr |
Inline namespace function that returns a mask with bits set to 0
up to the given binary digit, and bits above to 1
. Parameter width
must not be greater or equal to the width of the given TIntegral
type. In debug compilations, an assertion is raised in that case.
TIntegral | The integral type to operate on. |
width | The number of lower bits to clear in the mask returned. |
|
extern |
This external variable is available only if the compiler symbol ALIB_DEBUG_CRITICAL_SECTIONS is set and module ALib Threads is included in the ALib Distribution.
When it is 0
, which is the default, nothing is done.
When it is 1
, then Thread::YieldToSystem is invoked with interface methods of class DbgCriticalSections.
Other values are passed to a call to Thread::SleepNanos.
The purpose of this debug-feature is to be better able to detect non-protected concurrent access to critical sections. With increasing the time slice that a thread remains in a critical section, the probability to be caught by another thread is increased.
void(* DBG_SIMPLE_ALIB_MSG_PLUGIN)(const CallerInfo &ci, int type, const char *topic, int qtyMsgs, const char **msgs) | ( | const CallerInfo & | ci, |
int | type, | ||
const char * | topic, | ||
int | qtyMsgs, | ||
const char ** | msgs ) =nullptr |
This function pointer defaults to nullptr
and may be set to replace function DbgSimpleALibMsg. With the use of ALib BaseCamp, the module's bootstrap code (precisely method BaseCamp::bootstrap) sets this pointer to a small method which creates an Report on the default ReportWriter.