37#if defined(ONIXS_B3_UMDF_MD_HAS_STRING_VIEW)
44#if defined(ONIXS_B3_UMDF_MD_HAS_STRING_VIEW)
46using StrRef = std::basic_string_view<Char>;
53ONIXS_B3_UMDF_MD_COLDPATH
54ONIXS_B3_UMDF_MD_NORETURN
55void throwInvalidIndex(
size_t,
size_t);
96 constexpr size_type maxLen = (std::numeric_limits<UInt16>::max)();
98 size_ = numericCast<size_type>(strnlen(chars, maxLen));
105 : items_(string.c_str())
106 , size_(static_cast<
size_type>(string.length()))
108 assert(
string.length() <= (std::numeric_limits<size_type>::max)());
112 ONIXS_B3_UMDF_MD_NODISCARD
119 ONIXS_B3_UMDF_MD_NODISCARD
127 ONIXS_B3_UMDF_MD_NODISCARD
135 ONIXS_B3_UMDF_MD_NODISCARD
143 ONIXS_B3_UMDF_MD_NODISCARD
151 ONIXS_B3_UMDF_MD_NODISCARD
155 return (items_ + size_);
159 ONIXS_B3_UMDF_MD_NODISCARD
166 ONIXS_B3_UMDF_MD_NODISCARD
173 ONIXS_B3_UMDF_MD_NODISCARD
180 ONIXS_B3_UMDF_MD_NODISCARD
187 ONIXS_B3_UMDF_MD_NODISCARD
194 ONIXS_B3_UMDF_MD_NODISCARD
201 ONIXS_B3_UMDF_MD_NODISCARD
207 return items_[index];
211 ONIXS_B3_UMDF_MD_NODISCARD
217 return items_[index];
219 throwInvalidIndex(index, size_);
233 return (*
this)[size_ - 1];
239 std::swap(items_, other.items_);
241 std::swap(size_, other.size_);
245 operator std::basic_string<Char>()
const
247 return std::basic_string<Char>(data(), size());
259ONIXS_B3_UMDF_MD_NODISCARD
261bool operator ==(
const StrRef& left,
const StrRef& right)
263 if(left.size() != right.size())
268 assert(right.empty());
273 assert(right.data());
276 left.data(), right.data(), left.size()));
280ONIXS_B3_UMDF_MD_NODISCARD
282bool operator !=(
const StrRef& left,
const StrRef& right)
284 return !(left == right);
288ONIXS_B3_UMDF_MD_NODISCARD
290bool operator <(
const StrRef& left,
const StrRef& right)
297 left.size() < right.size()
304 : (left.size() < right.size()));
308ONIXS_B3_UMDF_MD_NODISCARD
310bool operator >(
const StrRef& left,
const StrRef& right)
312 return (right < left);
317std::ostream& operator <<(std::ostream& stream,
const StrRef& text)
319 stream.write(text.data(), text.size());
324ONIXS_B3_UMDF_MD_NODISCARD StrRef toStrRef(
const std::string&);
325ONIXS_B3_UMDF_MD_NODISCARD StrRef toStrRef(
const Char*)
noexcept;
328ONIXS_B3_UMDF_MD_NODISCARD
330bool operator ==(
const StrRef& ref,
const std::string& str)
332 return ref == toStrRef(str);
336ONIXS_B3_UMDF_MD_NODISCARD
338bool operator !=(
const StrRef& ref,
const std::string& str)
340 return ref != toStrRef(str);
344ONIXS_B3_UMDF_MD_NODISCARD
346bool operator ==(
const std::string& str,
const StrRef& ref)
348 return ref == toStrRef(str);
352ONIXS_B3_UMDF_MD_NODISCARD
354bool operator !=(
const std::string& str,
const StrRef& ref)
356 return ref != toStrRef(str);
360ONIXS_B3_UMDF_MD_NODISCARD
362bool operator ==(
const StrRef& ref,
const Char* str)
364 return ref == toStrRef(str);
368ONIXS_B3_UMDF_MD_NODISCARD
370bool operator !=(
const StrRef& ref,
const Char* str)
372 return ref != toStrRef(str);
376ONIXS_B3_UMDF_MD_NODISCARD
378bool operator ==(
const Char* str,
const StrRef& ref)
380 return ref == toStrRef(str);
384ONIXS_B3_UMDF_MD_NODISCARD
386bool operator !=(
const Char* str,
const StrRef& ref)
388 return ref != toStrRef(str);
394ONIXS_B3_UMDF_MD_NODISCARD
395inline StrRef toStrRef(
const std::string& str)
401ONIXS_B3_UMDF_MD_NODISCARD
402inline StrRef toStrRef(
const Char* cStr)
noexcept
411template <
size_t Size>
412ONIXS_B3_UMDF_MD_NODISCARD
415StrRef constructStrRef(
const char (&value)[Size])
418 return StrRef(value, Size - 1);
421template <
size_t Size>
422ONIXS_B3_UMDF_MD_NODISCARD
425StrRef strRefFromCharArray(
const char (&value)[Size])
428 return StrRef(value, Size);
432ONIXS_B3_UMDF_MD_NODISCARD
434std::string
toStr(
const StrRef& ref)
436 return std::string(ref.data(), ref.size());
441void toStr(std::string& str,
const StrRef& ref)
443 str.append(ref.data(), ref.size());
#define ONIXS_B3_UMDF_MD_MESSAGING_NAMESPACE_END
#define ONIXS_B3_UMDF_MD_EXPORTED
#define ONIXS_B3_UMDF_MD_MESSAGING_NAMESPACE_BEGIN
#define ONIXS_B3_UMDF_MD_LTWT_CLASS
#define ONIXS_B3_UMDF_MD_ASSERT(CHECK)
constexpr StrRef()
Initializes the instance referring to nothing.
const Char & back() const noexcept
void swap(StrRef &other) noexcept
Swaps the content with the given instance.
std::reverse_iterator< const_iterator > const_reverse_iterator
StrRef(const Char *chars) noexcept
Explicit initialization.
const_reverse_iterator reverse_iterator
StrRef(const std::string &string)
Explicit initialization.
const Char & front() const noexcept
constexpr StrRef(const Char *chars, size_t size) noexcept
Explicit initialization.
const Char * const_iterator
STL-like iterators.
char Char
Character type alias.
ptrdiff_t distance noexcept
void toStr(std::string &str, TimeSpan timeSpan, TimeSpanFormat::Enum format=TimeSpanFormat::SDHHMMSSnsec)
Appends timespan formatted in specified pattern to given string.