RStringTraits#
Fully qualified name: carb::detail::RStringTraits
Defined in carb/RString.h
-
template<bool Uncased, class Base = RStringBase>
class RStringTraits : protected carb::detail::RStringBase# The base class for all registered string classes: RString, RStringU, RStringKey, and RStringUKey.
- Template Parameters:
Uncased –
true
if representing an “un-cased” (i.e. case-insensitive) registered string;false
otherwise.
Public Functions
-
bool isValid() const noexcept#
Checks to see if this registered string has been corrupted.
Note
It is not possible for this registered string to become corrupted through normal use of the API. It could be caused by bad casts or use-after-free.
- Returns:
true
if*this
represents a valid registered string;false
if*this
is corrupted.
-
constexpr bool isEmpty() const noexcept#
Checks to see if this registered string represents the “” (empty) value.
- Returns:
true
if*this
is default-initialized or initialized to eRString::Empty;false
otherwise.
-
constexpr bool isUncased() const noexcept#
Checks to see if this registered string represents an “un-cased” (i.e.
case-insensitive) registered string.
- Returns:
true
if*this
is “un-cased” (i.e. case-insensitive);false
if case-sensitive.
-
constexpr uint32_t getStringId() const noexcept#
Returns the registered string ID.
This ID is only useful for debugging purposes and should not be used for comparisons.
- Returns:
The string ID for this registered string.
-
size_t getHash() const#
Returns the hash value as by
carb::hashString(this->c_str())
.Note
This value is computed once for a registered string and cached, so this operation is generally very fast.
- Returns:
The hash value as computed by
carb::hashString(this->c_str())
.
-
size_t getUncasedHash() const noexcept#
Returns the hash value as by
carb::hashLowercaseString(this->c_str())
.Note
This value is pre-computed for registered strings and cached, so this operation is always O(1).
- Returns:
The hash value as computed by
carb::hashLowercaseString(this->c_str())
.
-
const char *c_str() const noexcept#
Resolves this registered string to a C-style NUL-terminated string.
Note
This operation is O(1).
- Returns:
The C-style string previously registered.
-
const char *data() const noexcept#
An alias for c_str(); resolves this registered string to a C-style NUL-terminated string.
Note
This operation is O(1).
- Returns:
The C-style string previously registered.
-
size_t length() const noexcept#
Returns the length of the registered string.
If the string contains embedded NUL (‘\0’) characters this may differ from
std::strlen(c_str())
.Note
This operation is O(1).
- Returns:
The length of the registered string not including the NUL terminator.
-
bool operator==(const RStringTraits &other) const#
Equality comparison between this registered string and another.
- Parameters:
other – Another registered string.
- Returns:
true
if*this
andother
represent the same registered string;false
otherwise.
-
bool operator!=(const RStringTraits &other) const#
Inequality comparison between this registered string and another.
- Parameters:
other – Another registered string.
- Returns:
false
if*this
andother
represent the same registered string;true
otherwise.
-
bool owner_before(const RStringTraits &other) const#
Checks whether this registered string is stably (but not lexicographically) ordered before another registered string.
This ordering is to make registered strings usable as keys in ordered associative containers in O(1) time.
Note
This is NOT a lexicographical comparison; for that use one of the compare() functions. To reduce ambiguity between a strict ordering and lexicographical comparison there is no
operator<
function for this string class. While a lexicographical comparison would be O(n), this comparison is O(1).- Parameters:
other – Another registered string.
- Returns:
true
if*this
should be ordered-beforeother
;false
otherwise.
-
template<bool OtherUncased, class OtherBase>
int compare( - const RStringTraits<OtherUncased, OtherBase> &other,
Lexicographically compares this registered string with another.
Note
If either
*this
orother
is “un-cased” (i.e. case-insensitive), a case-insensitive compare is performed.- Template Parameters:
OtherUncased –
true
ifother
is “un-cased” (i.e. case-insensitive);false
otherwise.- Parameters:
other – Another registered string to compare against.
- Returns:
0
if the strings are equal,>0
ifother
is lexicographically ordered before*this
, or<0
if*this
is lexicographically ordered beforeother
. See note above regarding case-sensitivity.
-
int compare(const char *s) const#
Lexicographically compares this registered string with a C-style string.
Note
If
*this
is “un-cased” (i.e. case-insensitive), a case-insensitive compare is performed.- Parameters:
s – A C-style string to compare against.
- Returns:
0
if the strings are equal,>0
ifs
is lexicographically ordered before*this
, or<0
if*this
is lexicographically ordered befores
. See note above regarding case-sensitivity.
-
int compare(size_t pos, size_t count, const char *s) const#
Lexicographically compares a substring of this registered string with a C-style string.
Note
If
*this
is “un-cased” (i.e. case-insensitive), a case-insensitive compare is performed.- Parameters:
pos – The starting offset of the registered string represented by
*this
. Must less-than-or-equal-to the length of the registered string.count – The length from
pos
to use in the comparison. This value is automatically clamped to the end of the registered string.s – A C-style string to compare against.
- Returns:
0
if the strings are equal,>0
ifs
is lexicographically ordered before the substring of*this
, or<0
if the substring of*this
is lexicographically ordered befores
. See note above regarding case-sensitivity.
- int compare(
- size_t pos,
- size_t count,
- const char *s,
- size_t len,
Lexicographically compares a substring of this registered string with a C-style string.
Note
If
*this
is “un-cased” (i.e. case-insensitive), a case-insensitive compare is performed.- Parameters:
pos – The starting offset of the registered string represented by
*this
. Must less-than-or-equal-to the length of the registered string.count – The length from
pos
to use in the comparison. This value is automatically clamped to the end of the registered string.s – A C-style string to compare against.
len – The number of characters of
s
to compare against.
- Returns:
0
if the strings are equal,>0
ifs
is lexicographically ordered before the substring of*this
, or<0
if the substring of*this
is lexicographically ordered befores
. See note above regarding case-sensitivity.
-
int compare(const std::string &s) const#
Lexicographically compares this registered string with a string.
Note
If
*this
is “un-cased” (i.e. case-insensitive), a case-insensitive compare is performed.- Parameters:
s – A string to compare against.
- Returns:
0
if the strings are equal,>0
ifs
is lexicographically ordered before*this
, or<0
if*this
is lexicographically ordered befores
. See note above regarding case-sensitivity.
-
int compare(size_t pos, size_t count, const std::string &s) const#
Lexicographically compares a substring of this registered string with a string.
Note
If
*this
is “un-cased” (i.e. case-insensitive), a case-insensitive compare is performed.- Parameters:
pos – The starting offset of the registered string represented by
*this
. Must less-than-or-equal-to the length of the registered string.count – The length from
pos
to use in the comparison. This value is automatically clamped to the end of the registered string.s – A string to compare against.
- Returns:
0
if the strings are equal,>0
ifs
is lexicographically ordered before the substring of*this
, or<0
if the substring of*this
is lexicographically ordered befores
. See note above regarding case-sensitivity.