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 | StdContainerAllocator |
struct | StdContainerAllocatorRecycling |
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 | 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 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 int | 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 15 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 32 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 41 of file commonenumdefs.inl.
|
strong |
Denotes upper and lower case character treatment.
Definition at line 52 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 64 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 76 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 85 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 95 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 104 of file commonenumdefs.inl.
|
strong |
Used for example with constructors that allow to suppress initialization of members.
Definition at line 113 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 126 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 135 of file commonenumdefs.inl.
|
strong |
Denotes the reach of something.
Enumerator | |
---|---|
Global | Denotes global reach. |
Local | Denotes local reach. |
Definition at line 144 of file commonenumdefs.inl.
|
strong |
Denotes whether recursion is performed/allowed or not.
Enumerator | |
---|---|
No | Denotes non-recursive. |
Yes | Denotes recursion. |
Definition at line 153 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 164 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 173 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 182 of file commonenumdefs.inl.
|
strong |
Denotes sort order.
Enumerator | |
---|---|
Ascending | Chooses ascending sort oder. |
Descending | Chooses descending sort oder. |
Definition at line 191 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 200 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 209 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 218 of file commonenumdefs.inl.
|
strong |
Denotes if asynchronous tasks become synchronized.
Definition at line 227 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 239 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 248 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
.
value
of 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 . |
value
.
|
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 . |
value
. Definition at line 259 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
.
value
of 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 . |
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. Definition at line 298 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. |
TIntegral
.
|
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 190 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 169 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)
value
of 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 . |
value
. The numbering starts with 1
and ends with sizeof(Tintegral) * 8
. Definition at line 325 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 . |
value
. The numbering starts with 1
and ends with sizeof(Tintegral)* 8
. If value is 0
, hence no bit is set, 0
is returned. Definition at line 344 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 900 of file bitset.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 952 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 926 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 int 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.