This namespace holds types and functions of the module ALib Lang, which are very close to the C++ language itself. The entities found here are always included in any ALib Build and are accessed by including the header ALib.Lang.H.
Type Index: | |
| struct | Allocator |
| struct | AllocatorInterface |
| struct | AllocatorMember |
| struct | AllocatorMember< HeapAllocator > |
| struct | BidiListHook |
| struct | BidiNodeBase |
| struct | CallerInfo |
| struct | DbgAlloc |
| struct | DbgCriticalSections |
| class | DbgTypeDemangler |
| struct | HeapAllocator |
| class | Owner |
| class | OwnerRecursive |
| class | OwnerShared |
| class | OwnerSharedTimed |
| class | OwnerTimed |
| class | OwnerTry |
| class | OwnerTryShared |
| struct | Placeholder |
| class | Plugin |
| class | PluginContainer |
| struct | RTTRAllocator |
| struct | SidiListHook |
| struct | SidiNodeBase |
| struct | StdAllocator |
| struct | StdRecyclingAllocator |
| class | TBitSet |
| struct | TypeFunctors |
| struct | UnknownTag |
Concepts | |
| concept | IsAllocator |
| concept | IsNullptr |
Type Definition Index: | |
| using | integer = platform_specific |
| using | intGap_t = platform_specific |
| using | ShiftOpRHS = int |
| 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 | LineFeeds { None = 0 , Ignore = 0 , Unix = 1 , WindowsOS = 2 , Platform = Unix } |
Denotes line-feed encoding sequences "\n" and "\r\n". 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 | 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> requires std::integral<TIntegral> | |
| constexpr int | BitCount (TIntegral value) |
| template<typename T> | |
| constexpr int | bitsofval (const T &val) |
| template<typename TIntegral> requires std::integral<TIntegral> | |
| constexpr int | CLZ (TIntegral value) |
| template<typename TIntegral> requires std::integral<TIntegral> | |
| constexpr int | CLZ0 (TIntegral value) |
| template<typename TIntegral> requires std::integral<TIntegral> | |
| constexpr int | CTZ (TIntegral value) |
| template<typename TIntegral> requires std::integral<TIntegral> | |
| constexpr int | CTZ0 (TIntegral value) |
| template<typename T> | |
| void | Destruct (T &object) |
| template<typename T> requires std::default_initializable<T> | |
| constexpr bool | IsNotNull (const T &t) |
| template<typename T> requires std::default_initializable<T> | |
| constexpr bool | IsNull (const T &t) |
| template<typename TIntegral> requires std::integral<TIntegral> | |
| constexpr int | Log2OfSize () |
| template<typename TIntegral> requires std::integral<TIntegral> | |
| constexpr TIntegral | LowerBits (ShiftOpRHS width, TIntegral value) |
| template<ShiftOpRHS TWidth, typename TIntegral> requires std::integral<TIntegral> | |
| constexpr TIntegral | LowerBits (TIntegral value) |
| template<ShiftOpRHS TWidth, typename TIntegral> requires ( std::is_integral<TIntegral>::value && TWidth < bitsof(TIntegral) ) | |
| constexpr TIntegral | LowerMask () |
| template<ShiftOpRHS TWidth, typename TIntegral> requires ( std::is_integral<TIntegral>::value && TWidth >= bitsof(TIntegral) ) | |
| constexpr TIntegral | LowerMask () |
| template<typename TIntegral> requires std::integral<TIntegral> | |
| constexpr TIntegral | LowerMask (ShiftOpRHS width) |
| template<typename TIntegral> requires std::integral<TIntegral> | |
| constexpr int | MSB (TIntegral value) |
| template<typename TIntegral> requires std::integral<TIntegral> | |
| constexpr int | MSB0 (TIntegral value) |
| template<typename TInterface, TInterface TEnd, TInterface TBegin> | |
| ALIB_EXPORT constexpr alib::lang::TBitSet< TInterface, TEnd, TBegin > | operator& (const alib::lang::TBitSet< TInterface, TEnd, TBegin > &lhs, const alib::lang::TBitSet< TInterface, TEnd, TBegin > &rhs) noexcept |
| template<typename TLhs, typename TRhs, typename TAllocator> | |
| constexpr bool | operator== (const StdAllocator< TLhs, TAllocator > &lhs, const StdAllocator< TRhs, TAllocator > &rhs) noexcept |
| template<typename TInterface, TInterface TEnd, TInterface TBegin> | |
| ALIB_EXPORT constexpr alib::lang::TBitSet< TInterface, TEnd, TBegin > | operator^ (const alib::lang::TBitSet< TInterface, TEnd, TBegin > &lhs, const alib::lang::TBitSet< TInterface, TEnd, TBegin > &rhs) noexcept |
| template<typename TInterface, TInterface TEnd, TInterface TBegin> | |
| ALIB_EXPORT constexpr alib::lang::TBitSet< TInterface, TEnd, TBegin > | operator| (const alib::lang::TBitSet< TInterface, TEnd, TBegin > &lhs, const alib::lang::TBitSet< TInterface, TEnd, TBegin > &rhs) noexcept |
| template<typename TTo, typename TFrom> | |
| ALIB_WARNINGS_RESTORE TTo * | SafeCast (TFrom *derived) |
| template<typename T> requires std::default_initializable<T> | |
| constexpr void | SetNull (T &t) |
| template<ShiftOpRHS TWidth, typename TIntegral> requires ( std::is_integral<TIntegral>::value && TWidth < bitsof(TIntegral) ) | |
| constexpr TIntegral | UpperMask () |
| template<ShiftOpRHS TWidth, typename TIntegral> requires ( std::is_integral<TIntegral>::value && TWidth >= bitsof(TIntegral) ) | |
| constexpr TIntegral | UpperMask () |
| template<typename TIntegral> requires std::integral<TIntegral> | |
| constexpr TIntegral | UpperMask (ShiftOpRHS width) |
Variable Index: | |
| unsigned | DBG_CRITICAL_SECTION_YIELD_OR_SLEEP_TIME_IN_NS |
| using alib::lang::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 32 of file integers.inl.
| using alib::lang::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 85 of file integers.inl.
| using alib::lang::ShiftOpRHS = int |
| using alib::lang::uinteger = platform_specific |
Unsigned version of alib::integer. This type should be the same as std::size_t on all platforms.
Definition at line 36 of file integers.inl.
| using alib::lang::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 89 of file integers.inl.
|
strong |
Denotes Alignments.
| Enumerator | |
|---|---|
| Left | Chooses left alignment. |
| Right | Chooses right alignment. |
| Center | Chooses centered alignment. |
Definition at line 13 of file commonenumdefs.inl.
|
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 28 of file commonenumdefs.inl.
|
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 35 of file commonenumdefs.inl.
|
strong |
Denotes upper and lower case character treatment.
Definition at line 44 of file commonenumdefs.inl.
|
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 54 of file commonenumdefs.inl.
|
strong |
Denotes whether default entities should be created or not.
| Enumerator | |
|---|---|
| No | Do not create. |
| Yes | Create default values. |
Definition at line 64 of file commonenumdefs.inl.
|
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 71 of file commonenumdefs.inl.
|
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 79 of file commonenumdefs.inl.
|
strong |
Denotes how members of a set something should be taken into account.
| Enumerator | |
|---|---|
| Include | Chooses inclusion. |
| Exclude | Chooses exclusion. |
Definition at line 86 of file commonenumdefs.inl.
|
strong |
Used, for example, with constructors that allow to suppress initialization of members.
Definition at line 93 of file commonenumdefs.inl.
|
strong |
Denotes line-feed encoding sequences "\n" and "\r\n".
Definition at line 104 of file commonenumdefs.inl.
|
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 118 of file commonenumdefs.inl.
|
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 125 of file commonenumdefs.inl.
|
strong |
Denotes the reach of something.
| Enumerator | |
|---|---|
| Global | Denotes global reach. |
| Local | Denotes local reach. |
Definition at line 132 of file commonenumdefs.inl.
|
strong |
Denotes whether recursion is performed/allowed or not.
| Enumerator | |
|---|---|
| No | Denotes non-recursive. |
| Yes | Denotes recursion. |
Definition at line 139 of file commonenumdefs.inl.
|
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 148 of file commonenumdefs.inl.
|
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 155 of file commonenumdefs.inl.
|
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 162 of file commonenumdefs.inl.
|
strong |
Denotes sort order.
| Enumerator | |
|---|---|
| Ascending | Chooses ascending sort oder. |
| Descending | Chooses descending sort oder. |
Definition at line 169 of file commonenumdefs.inl.
|
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 176 of file commonenumdefs.inl.
|
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 183 of file commonenumdefs.inl.
|
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 190 of file commonenumdefs.inl.
|
strong |
Denotes if asynchronous tasks become synchronized.
Definition at line 197 of file commonenumdefs.inl.
|
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 207 of file commonenumdefs.inl.
|
strong |
Denotes whether a string is trimmed or not.
| Enumerator | |
|---|---|
| Trim | Trim whitespaces away. |
| Keep | Keep whitespaces in string. |
Definition at line 214 of file commonenumdefs.inl.
|
constexpr |
|
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 C++20 library function std::countl_zero.
0! In debug-compilations, this method raises an ALib error 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. |
|
constexpr |
Variant of CLZ which tests the 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. |
Definition at line 251 of file bits.inl.
|
constexpr |
Returns the number of the trailing 0-bits in an integral type. Internally, this method uses C++20 library function std::countr_zero.
0! In debug-compilations, this method raises an ALib error 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. |
|
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. |
0, sizeof(Tintegral) * 8 is returned. Definition at line 288 of file bits.inl.
|
inline |
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. |
|
constexpr |
The negation of alib::lang::IsNull.
| t | The instance to test. |
false if t is default-constructed, true otherwise.
|
constexpr |
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.
|
constexpr |
Returns 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. |
|
constexpr |
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 error 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). |
Definition at line 184 of file bits.inl.
|
constexpr |
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). |
Definition at line 164 of file bits.inl.
|
constexpr |
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. |
|
constexpr |
Overloaded version handling bit-overflow.
| TWidth | The number of lower bits to set to 1. |
| TIntegral | The integral type to operate on. |
|
constexpr |
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 error 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)
0! In debug-compilations, this method raises an ALib error 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. |
1 and ends with sizeof(Tintegral) * 8. Definition at line 314 of file bits.inl.
|
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. |
1 and ends with sizeof(Tintegral)* 8. If value is 0, hence no bit is set, 0 is returned. Definition at line 332 of file bits.inl.
|
constexprnoexcept |
Performs binary AND operation two TBitSet objects (of equal size), lhs and rhs.
| lhs | The left-hand side operand. |
| rhs | The right-hand side operand. |
| TEnd | Template parameter of class TBitSet. Deduced by the compiler. |
| TBegin | Template parameter of class TBitSet. Deduced by the compiler. |
| TInterface | Template parameter of class TBitSet. Deduced by the compiler. |
Definition at line 838 of file bitset.inl.
|
constexprnoexcept |
Comparison operator for type StdAllocator<T, TAllocator>.
| lhs | The left-hand side allocator. |
| rhs | The right-hand side allocator. |
| TLhs | The allocation type of the left-hand side allocator. |
| TRhs | The allocation type of the right-hand side allocator. |
true if both allocators use the same allocator internally, false otherwise. Definition at line 849 of file allocation.inl.
|
constexprnoexcept |
Performs binary XOR operation two TBitSet objects (of equal size), lhs and rhs.
| lhs | The left-hand side operand. |
| rhs | The right-hand side operand. |
| TEnd | Template parameter of class TBitSet. Deduced by the compiler. |
| TBegin | Template parameter of class TBitSet. Deduced by the compiler. |
| TInterface | Template parameter of class TBitSet. Deduced by the compiler. |
Definition at line 888 of file bitset.inl.
|
constexprnoexcept |
Performs binary OR operation two TBitSet objects (of equal size), lhs and rhs.
| lhs | The left-hand side operand. |
| rhs | The right-hand side operand. |
| TEnd | Template parameter of class TBitSet. Deduced by the compiler. |
| TBegin | Template parameter of class TBitSet. Deduced by the compiler. |
| TInterface | Template parameter of class TBitSet. Deduced by the compiler. |
Definition at line 863 of file bitset.inl.
| ALIB_WARNINGS_RESTORE TTo * alib::lang::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. |
|
constexpr |
|
constexpr |
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. |
|
constexpr |
Overloaded version handling bit-overflow.
| TWidth | The number of lower bits to set to 1. |
| TIntegral | The integral type to operate on. |
|
constexpr |
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 error is raised in that case.
| TIntegral | The integral type to operate on. |
| width | The number of lower bits to clear in the mask returned. |
| unsigned alib::lang::DBG_CRITICAL_SECTION_YIELD_OR_SLEEP_TIME_IN_NS |
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 Build.
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.
Definition at line 28 of file dbgcriticalsections.cpp.