LiteralId Class Reference

#include <apibaseid.h>

Inheritance diagram for LiteralId:

Detailed Description

LiteralId is used as base class of Id. It may only be used for strings such as string literals which have a longer lifetime than the LiteralId object itself. The benefit is that LiteralId is a literal type and has a trivial destructor.

Public Member Functions

constexpr LiteralId ()
 
 LiteralId (const LiteralId &)=default
 
MAXON_IMPLICIT LiteralId (const Id &)=delete
 
LiteralIdoperator= (const LiteralId &)=default
 
LiteralIdoperator= (const Id &)=delete
 
template<UInt N>
constexpr LiteralId (const Char(&str)[N])
 
Bool operator== (const LiteralId &other) const
 
Bool operator< (const LiteralId &other) const
 
 MAXON_OPERATOR_COMPARISON (LiteralId)
 
COMPARERESULT Compare (const LiteralId &other) const
 
constexpr UInt GetHashCode () const
 
Bool IsEmpty () const
 
Bool IsPopulated () const
 
const CharGetCString () const
 
Int GetCStringLength () const
 
String ToString (const FormatStatement *formatStatement) const
 
CString ToCString () const
 
Block< const CharToBlock () const
 
const IdGet () const
 
 operator const Id & () const
 
Bool UsesRefCountedCString () const
 
template<UInt N>
constexpr LiteralId (bool dummy, const Char(&str)[N])
 
constexpr LiteralId (bool dummy, const LiteralId &src)
 
template<typename T , typename = typename T::DeclarationHelper>
constexpr LiteralId (bool dummy, const T &decl)
 

Static Public Attributes

static const Int MAX_LENGTH_EXPONENT
 
static const UInt LOW_HASH_MASK
 
static const Int MAX_LENGTH
 

Protected Member Functions

constexpr LiteralId (const Char *value, UInt hash)
 
 LiteralId (ENUM_DONT_INITIALIZE)
 

Static Protected Member Functions

static UInt GetHashCode (const Char *str)
 
template<UInt N>
static constexpr UInt GetHashCode (const Char(&str)[N], UInt h=0, UInt i=0)
 

Protected Attributes

const Char_value
 
UInt _hash
 

Static Protected Attributes

static const Int RC_STRING_BIT
 
static const UInt RC_STRING_MASK
 
static const UInt HASH_MASK
 

Friends

class EntityBase
 

Constructor & Destructor Documentation

◆ LiteralId() [1/9]

constexpr LiteralId ( )
constexpr

◆ LiteralId() [2/9]

LiteralId ( const LiteralId )
default

◆ LiteralId() [3/9]

MAXON_IMPLICIT LiteralId ( const Id )
delete

◆ LiteralId() [4/9]

constexpr LiteralId ( const Char(&)  str[N])
explicitconstexpr

◆ LiteralId() [5/9]

constexpr LiteralId ( bool  dummy,
const Char(&)  str[N] 
)
constexpr

◆ LiteralId() [6/9]

constexpr LiteralId ( bool  dummy,
const LiteralId src 
)
constexpr

◆ LiteralId() [7/9]

constexpr LiteralId ( bool  dummy,
const T &  decl 
)
constexpr

◆ LiteralId() [8/9]

constexpr LiteralId ( const Char value,
UInt  hash 
)
constexprprotected

◆ LiteralId() [9/9]

LiteralId ( ENUM_DONT_INITIALIZE  )
explicitprotected

Member Function Documentation

◆ operator=() [1/2]

LiteralId& operator= ( const LiteralId )
default

◆ operator=() [2/2]

LiteralId& operator= ( const Id )
delete

◆ operator==()

Bool operator== ( const LiteralId other) const

◆ operator<()

Bool operator< ( const LiteralId other) const

◆ MAXON_OPERATOR_COMPARISON()

MAXON_OPERATOR_COMPARISON ( LiteralId  )

◆ Compare()

COMPARERESULT Compare ( const LiteralId other) const

Compares two Id objects using the lexicographic order.

Parameters
[in]otherOther Id object.
Returns
See COMPARERESULT.

◆ GetHashCode() [1/3]

constexpr UInt GetHashCode ( ) const
constexpr

◆ IsEmpty()

Bool IsEmpty ( ) const

Checks if the Id is empty.

Returns
True if the Id contains a nullptr as c-string.

◆ IsPopulated()

Bool IsPopulated ( ) const

Checks if this Id contains anything.

Returns
True if the ID contains a c-string.

◆ GetCString()

const Char* GetCString ( ) const

Returns the internal c-string. No copy is made.

Returns
Internal string.

◆ GetCStringLength()

Int GetCStringLength ( ) const

Returns the length of the internal c-string. This function doesn't have to scan the string, because the length is directly available in the Id.

Returns
Length of internal string.

◆ ToString()

String ToString ( const FormatStatement formatStatement) const

Returns a readable string of the content.

Parameters
[in]formatStatementNullptr or additional formatting instruction. Currently no additional formatting instructions are supported.
Returns
The converted result.

◆ ToCString()

CString ToCString ( ) const

◆ Get()

const Id& Get ( ) const

◆ operator const Id &()

operator const Id & ( ) const

◆ UsesRefCountedCString()

Bool UsesRefCountedCString ( ) const

Returns true if this Id uses a RefCountedCString. Otherwise, the Id uses a global c-string which is assumed to persist at least as long as the Id.

Returns
True if the Id uses a RefCountedCString.

◆ GetHashCode() [2/3]

static UInt GetHashCode ( const Char str)
staticprotected

◆ GetHashCode() [3/3]

static constexpr UInt GetHashCode ( const Char(&)  str[N],
UInt  h = 0,
UInt  i = 0 
)
staticconstexprprotected

Friends And Related Function Documentation

◆ EntityBase

friend class EntityBase
friend

Member Data Documentation

◆ MAX_LENGTH_EXPONENT

const Int MAX_LENGTH_EXPONENT
static

◆ LOW_HASH_MASK

const UInt LOW_HASH_MASK
static

Mask for the lower bits of the hash (the part which corresponds to the hash code of the string).

◆ RC_STRING_BIT

const Int RC_STRING_BIT
staticprotected

Bit position in _hash of the bit which is set when the Id uses a RefCountedCString.

◆ RC_STRING_MASK

const UInt RC_STRING_MASK
staticprotected

Mask to get the RC_STRING_BIT from _hash.

◆ HASH_MASK

const UInt HASH_MASK
staticprotected

Mask to get the hash code from _hash.

◆ MAX_LENGTH

const Int MAX_LENGTH
static

◆ _value

const Char* _value
protected

C-string identifier. If the RC_STRING_BIT is set in _hash, this actually points to the _string part of a RefCountedCString.

◆ _hash

UInt _hash
protected

Combination of hash code (lower bits), then a bit at RC_STRING_BIT and finally the string length (MAX_LENGTH_EXPONENT bits). Use HASH_MASK to mask out the RC_STRING_BIT.