45 std::vector<Rune> runes_;
92 template<
std::input_iterator It>
93 requires
std::convertible_to<
std::iter_value_t<It>,
Rune>
101 template<
std::ranges::input_range R>
102 requires
std::convertible_to<
std::ranges::range_value_t<R>,
Rune>
132 [[nodiscard]]
bool empty() const noexcept {
return runes_.empty(); }
163 [[nodiscard]] std::span<Rune>
span() noexcept {
return std::span<Rune>(runes_.data(), runes_.size()); }
168 [[nodiscard]] std::span<const Rune>
span() const noexcept {
return std::span<const Rune>(runes_.data(), runes_.size()); }
176 if (start >=
size())
return {};
178 return std::span<const Rune>(
data() + start, actual);
182 if (start >=
size())
return {};
184 return std::span<Rune>(
data() + start, actual);
188 operator std::span<Rune>() noexcept {
return span(); }
189 operator std::span<const Rune>() const noexcept {
return span(); }
193 void clear() noexcept { runes_.clear(); }
196 return runes_.insert(pos, rune);
200 return runes_.insert(pos, std::move(rune));
203 template<
class... Args>
205 return runes_.emplace(pos, std::forward<Args>(args)...);
209 return runes_.erase(pos);
213 return runes_.erase(first, last);
217 runes_.push_back(rune);
221 runes_.push_back(std::move(rune));
224 template<
class... Args>
226 return runes_.emplace_back(std::forward<Args>(args)...);
234 runes_.resize(count);
238 runes_.resize(count, value);
242 runes_.swap(other.runes_);
243 std::swap(primary_language_, other.primary_language_);
253 return primary_language_;
261 primary_language_ = lang;
268 [[nodiscard]] std::string
to_utf8()
const;
274 [[nodiscard]] std::u16string
to_utf16()
const;
280 [[nodiscard]] std::u32string
to_utf32()
const;
331 [[nodiscard]]
bool contains(const
Rune& rune) const noexcept;
373 [[nodiscard]] auto operator<=>(const
RuneString& other) const noexcept = default;
374 [[nodiscard]]
bool operator==(const
RuneString& other) const noexcept = default;
405template<std::input_iterator It>
406requires std::convertible_to<std::iter_value_t<It>, Rune>
408 : runes_(first, last)
409 , primary_language_(
language::Code::Unknown)
413template<std::ranges::input_range R>
414requires std::convertible_to<std::ranges::range_value_t<R>,
Rune>
417 , primary_language_(
language::Code::Unknown)
457 return std::hash<std::string>{}(rs.to_utf8());
A sequence container for Rune objects (API Design Document: RuneString)
reference emplace_back(Args &&... args)
reference operator[](size_type pos) noexcept
std::vector< Rune >::iterator iterator
bool contains(const Rune &rune) const noexcept
Check if the string contains a Rune.
bool empty() const noexcept
reverse_iterator rbegin() noexcept
void swap(RuneString &other) noexcept
std::span< const Rune > span() const noexcept
Get a read-only span view of the underlying runes.
static RuneString from_utf16(std::u16string_view utf16_text)
Create a RuneString from UTF-16 text.
friend RuneString operator+(const RuneString &lhs, const Rune &rhs)
std::vector< Rune >::const_iterator const_iterator
const Rune * const_pointer
iterator emplace(const_iterator pos, Args &&... args)
const_iterator begin() const noexcept
std::ptrdiff_t difference_type
void push_back(Rune &&rune)
friend RuneString operator+(const RuneString &lhs, const RuneString &rhs)
const_reverse_iterator rend() const noexcept
language::Code primary_language() const noexcept
Get the primary language of the sequence.
const_iterator cbegin() const noexcept
iterator erase(const_iterator first, const_iterator last)
RuneString() noexcept=default
Default constructor.
RuneString & operator+=(std::string_view utf8)
const_reference back() const
const_reverse_iterator rbegin() const noexcept
static RuneString from_utf8(std::string_view utf8_text)
Create a RuneString from UTF-8 text.
std::span< Rune > span() noexcept
Get a mutable span view of the underlying runes.
const_iterator cend() const noexcept
const_reverse_iterator crbegin() const noexcept
std::vector< Rune >::reverse_iterator reverse_iterator
void reserve(size_type new_cap)
iterator insert(const_iterator pos, const Rune &rune)
static constexpr size_type npos
std::span< const Rune > slice_view(size_type start, size_type length=npos) const noexcept
Get a sub-view (lazy slice) without copying.
iterator insert(const_iterator pos, Rune &&rune)
iterator erase(const_iterator pos)
const_reference operator[](size_type pos) const noexcept
void push_back(const Rune &rune)
void set_primary_language(language::Code lang) noexcept
Set the primary language of the sequence.
reverse_iterator rend() noexcept
size_type find(const Rune &rune, size_type pos=0) const noexcept
Find first occurrence of a Rune.
const Rune & const_reference
static RuneString from_utf32(std::u32string_view utf32_text)
Create a RuneString from UTF-32 text.
reference at(size_type pos)
friend RuneString operator+(const Rune &lhs, const RuneString &rhs)
RuneString & operator+=(const Rune &rune)
const_reverse_iterator crend() const noexcept
std::vector< Rune >::const_reverse_iterator const_reverse_iterator
std::u16string to_utf16() const
Convert the sequence to UTF-16 string.
size_type size() const noexcept
const_pointer data() const noexcept
RuneString & append(const RuneString &other)
Append another RuneString.
void resize(size_type count, const Rune &value)
size_type max_size() const noexcept
const_reference at(size_type pos) const
std::u32string to_utf32() const
Convert the sequence to UTF-32 string.
const_reference front() const
std::span< Rune > slice_view(size_type start, size_type length=npos) noexcept
const_iterator end() const noexcept
RuneString substr(size_type start, size_type length=npos) const
Create a substring.
std::string to_utf8() const
Convert the sequence to UTF-8 string.
size_type capacity() const noexcept
size_type length() const noexcept
iterator begin() noexcept
void resize(size_type count)
Represents a single textual unit with Unicode and linguistic properties.
Language identification and localization support.
Language detection and identification functionality.
Code
Enumeration of supported language codes.
RuneString RuneSequence
Backward compatibility alias for RuneString.
void swap(RuneString &lhs, RuneString &rhs) noexcept
Swap two RuneString objects.
constexpr bool enable_borrowed_range< rune_caster::RuneString >
size_t operator()(const rune_caster::RuneString &rs) const noexcept