carb::RStringU
Defined in carb/RString.h
-
class RStringU : public carb::detail::RStringTraits<true>
Case-insensitive registered string.
The “U” stands for “un-cased”.
See RString for system-level information. This class differs from RString in that it performs case-insensitive operations.
Since the desire is for equality comparisons to be speed-of-light (i.e. O(1) numeric comparisons), the first string registered insensitive to casing is chosen as an “un-cased authority” and if any strings registered through RStringU later match that string (in a case-insensitive manner), that authority string will be chosen instead. This also means that when RStringU is used to register a string and then that string is retrieved with RStringU::c_str(), the casing in the returned string might not match what was registered.
Public Functions
-
constexpr RStringU() noexcept
Default constructor.
isEmpty() will report
true.
-
constexpr RStringU(eRString staticString) noexcept
Initializes this registered string to one of the static pre-defined registered strings.
- Parameters
staticString – The pre-defined registered string to use.
-
explicit RStringU(const char *str, RStringOp op = RStringOp::eRegister)
Finds or registers a new case-insensitive string.
Note
The casing of the string actually used may be different than
strwhen reported by c_str() or toString().- Parameters
str – The string to find or register.
op – The operation to perform. If directed to RStringOp::eFindExisting and the string has not been previously registered,
*thisis initialized as if with the default constructor.
-
explicit RStringU(const char *str, size_t len, RStringOp op = RStringOp::eRegister)
Finds or registers a new counted case-insensitive string.
Note
While generally not recommended, passing
lenallows the given string to contain embedded NUL (‘\0’) characters.Note
The casing of the string actually used may be different than
strwhen reported by c_str() or toString().- Parameters
str – The string to find or register.
len – The number of characters of
strto include.op – The operation to perform. If directed to RStringOp::eFindExisting and the string has not been previously registered,
*thisis initialized as if with the default constructor.
-
explicit RStringU(const std::string &str, RStringOp op = RStringOp::eRegister)
Finds or registers a new case-insensitive
std::string.Note
If
strcontains embedded NUL (‘\0’) characters, the RString will contain the embedded NUL characters as well.Note
The casing of the string actually used may be different than
strwhen reported by c_str() or toString().- Parameters
str – The
std::stringto find or register.op – The operation to perform. If directed to RStringOp::eFindExisting and the string has not been previously registered,
*thisis initialized as if with the default constructor.
-
explicit RStringU(const RString &other)
Converts a registered string into an “un-cased” (i.e.
case-insensitive) registered string.
- Parameters
other – The RString to convert.
-
explicit RStringU(const RStringUKey &other)
Truncates RStringUKey into only the registered string portion.
- Parameters
other – The RStringUKey to truncate.
-
RStringU toUncased() const noexcept
Returns a copy of this registered string.
Note
This function exists for compatibility with the RString interface.
- Returns
*thissince this string is already “un-cased” (i.e. case-insensitive).
-
RStringU truncate() const noexcept
Returns a copy of this registered string.
Note
This function exists for compatibility with the RStringKey interface.
- Returns
*thissince this string already has no number component.
-
RStringUKey toRStringKey(int32_t number = 0) const
Appends a number to the registered string to form a RStringUKey.
- Parameters
number – An optional number to append (default =
0).- Returns
An RStringUKey based on
*thisand the provided number.
-
bool operator==(const RStringU &other) const noexcept
Equality comparison between this registered string and another.
Note
A case-insensitive compare is performed.
- Parameters
other – Another registered string.
- Returns
trueif*thisandotherrepresent the same registered string;falseotherwise.
-
bool operator!=(const RStringU &other) const noexcept
Inequality comparison between this registered string and another.
Note
A case-insensitive compare is performed.
- Parameters
other – Another registered string.
- Returns
falseif*thisandotherrepresent the same registered string;trueotherwise.
-
bool owner_before(const RStringU &other) const noexcept
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
trueif*thisshould be ordered-beforeother;falseotherwise.
-
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
trueif*thisrepresents a valid registered string;falseif*thisis corrupted.
-
constexpr bool isEmpty() const noexcept
Checks to see if this registered string represents the “” (empty) value.
- Returns
trueif*thisis default-initialized or initialized to eRString::Empty;falseotherwise.
-
constexpr bool isUncased() const noexcept
Checks to see if this registered string represents an “un-cased” (i.e.
case-insensitive) registered string.
- Returns
trueif*thisis “un-cased” (i.e. case-insensitive);falseif 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
trueif*thisandotherrepresent the same registered string;falseotherwise.
-
bool operator!=(const RStringTraits &other) const
Inequality comparison between this registered string and another.
- Parameters
other – Another registered string.
- Returns
falseif*thisandotherrepresent the same registered string;trueotherwise.
-
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
trueif*thisshould be ordered-beforeother;falseotherwise.
-
int compare(const RStringTraits<OtherUncased, OtherBase> &other) const
Lexicographically compares this registered string with another.
Note
If either
*thisorotheris “un-cased” (i.e. case-insensitive), a case-insensitive compare is performed.- Template Parameters
OtherUncased –
trueifotheris “un-cased” (i.e. case-insensitive);falseotherwise.- Parameters
other – Another registered string to compare against.
- Returns
0if the strings are equal,>0ifotheris lexicographically ordered before*this, or<0if*thisis 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
*thisis “un-cased” (i.e. case-insensitive), a case-insensitive compare is performed.- Parameters
s – A C-style string to compare against.
- Returns
0if the strings are equal,>0ifsis lexicographically ordered before*this, or<0if*thisis 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
*thisis “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
posto 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
0if the strings are equal,>0ifsis lexicographically ordered before the substring of*this, or<0if the substring of*thisis lexicographically ordered befores. See note above regarding case-sensitivity.
-
int compare(size_t pos, size_t count, const char *s, size_t len) const
Lexicographically compares a substring of this registered string with a C-style string.
Note
If
*thisis “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
posto 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
sto compare against.
- Returns
0if the strings are equal,>0ifsis lexicographically ordered before the substring of*this, or<0if the substring of*thisis 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
*thisis “un-cased” (i.e. case-insensitive), a case-insensitive compare is performed.- Parameters
s – A string to compare against.
- Returns
0if the strings are equal,>0ifsis lexicographically ordered before*this, or<0if*thisis 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
*thisis “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
posto use in the comparison. This value is automatically clamped to the end of the registered string.s – A string to compare against.
- Returns
0if the strings are equal,>0ifsis lexicographically ordered before the substring of*this, or<0if the substring of*thisis lexicographically ordered befores. See note above regarding case-sensitivity.
Public Static Attributes
-
static constexpr bool IsUncased
Constant that indicates whether this is “un-cased” (i.e.
case-insensitive).
-
constexpr RStringU() noexcept