|
template<typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
constexpr | str_storable (Args &&... args) noexcept(std::is_nothrow_constructible_v< allocator_t, Args... >) |
| Создать пустой объект
|
|
template<typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
constexpr | str_storable (s_str other, Args &&... args) |
| Конструктор из другого строкового объекта
|
|
template<typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
constexpr | str_storable (size_t repeat, s_str pattern, Args &&... args) |
| Конструктор повторения строки
|
|
template<typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
| str_storable (size_t count, K pad, Args &&... args) |
| Конструктор повторения символа
|
|
template<typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
constexpr | str_storable (const StrExprForType< K > auto &expr, Args &&... args) |
| Конструктор из строкового выражения
|
|
template<StrType< K > From, typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
| str_storable (const From &f, s_str pattern, s_str repl, size_t offset=0, size_t maxCount=0, Args &&... args) |
| Конструктор из строкового источника с заменой
|
|
| operator const K * () const noexcept |
| Оператор преобразования в нуль-терминированную C-строку
|
|
s_str_nt | to_nts (size_t from=0) const |
| Получить simple_str_nt, начиная с заданного символа
|
|
| operator s_str_nt () const |
| Преобразовать в simple_str_nt.
|
|
|
template<typename T, typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
static my_type | join (const T &strings, s_str delimeter, bool tail=false, bool skip_empty=false, Args &&... args) |
| Конкатенация строк из контейнера в одну строку
|
|
template<StrType< K > From, typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
static my_type | uppered_only_ascii_from (const From &f, Args &&... args) |
| Создать строку, копию переданной в верхнем регистре символов ASCII.
|
|
template<StrType< K > From, typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
static my_type | lowered_only_ascii_from (const From &f, Args &&... args) |
| Создать копию переданной строки в нижнем регистре символов ASCII.
|
|
template<StrType< K > From, typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
static my_type | uppered_from (const From &f, Args &&... args) |
| Создать копию переданной строки в верхнем регистре символов Unicode первой плоскости (<0xFFFF)
|
|
template<StrType< K > From, typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
static my_type | lowered_from (const From &f, Args &&... args) |
| Создать копию переданной строки в нижнем регистре символов Unicode первой плоскости (<0xFFFF)
|
|
template<StrType< K > From, typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
static my_type | replaced_from (const From &f, s_str pattern, s_str repl, size_t offset=0, size_t maxCount=0, Args &&... args) |
| Создать копию переданной строки с заменой подстрок
|
|
template<typename K, typename Impl, typename Allocator>
class simstr::str_storable< K, Impl, Allocator >
База для объектов, владеющих строкой
- Параметры шаблона
-
K | - тип символов |
Impl | - конечный класс наследник |
Allocator | - тип аллокатора |
По прежнему ничего не знает о том, где наследник хранит строку и её размер. Просто вызывает его методы для получения места, и заполняет его при необходимости. Работает только при создании объекта, не работает с модификацией строки после ее создания и гарантирует, что если вызываются эти методы, объект еще только создается, и какого-либо расшаривания данных еще не было.
Эти методы должен реализовать класс-наследник, вызываются только при создании объекта
K* init(size_t size)
- выделить место для строки указанного размера, вернуть адрес
void create_empty()
- создать пустой объект
K* set_size(size_t size)
- перевыделить место для строки, если при создании не угадали нужный размер и место нужно больше или меньше. Содержимое строки нужно оставить.
Хотя тип аллокатора и задаётся параметром шаблона, делается это только для проброса его типа в конструкторы, методы аллокатора не вызываются. Если наследник не пользуется аллокатором, а сам в init
и set_size
как-то выделяет место, может указать типом аллокатора какой-либо пустой класс.
template<typename K, typename Impl, typename Allocator>
template<typename T, typename... Args>
requires std::is_constructible_v<allocator_t, Args...>
static my_type simstr::str_storable< K, Impl, Allocator >::join |
( |
const T & | strings, |
|
|
s_str | delimeter, |
|
|
bool | tail = false, |
|
|
bool | skip_empty = false, |
|
|
Args &&... | args ) |
|
inlinestatic |
Конкатенация строк из контейнера в одну строку
- Аргументы
-
strings | - контейнер со строками |
delimeter | - разделитель, добавляемый между строками |
tail | - добавить разделитель после последней строки |
skip_empty | - пропускать пустые строки без добавления разделителя |
...args | - параметры для инициализации аллокатора |
Функция служит для слияния контейнера строк в одну строку с разделителем.
std::vector<ssa> strings = get_strings();
ssa delim = get_current_delimeter();
static my_type join(const T &strings, s_str delimeter, bool tail=false, bool skip_empty=false, Args &&... args)
Определения sstring.h:2595
Стоит отметить, что при заранее известном разделителе лучше пользоваться строковым выражением e_join
.
std::vector<ssa> strings = get_strings();
lstringa<200> line{
e_join(strings,
"/")};
constexpr auto e_join(const T &s, L &&d)
Получить строковое выражение, конкатенирующее строки в контейнере в одну строку с заданным разделител...
Определения sstring.h:4796
В этом случае компилятор может лучше оптимизировать код слияния строк.
template<typename K, typename Impl, typename Allocator>
template<StrType< K > From, typename... Args>
requires std::is_constructible_v<allocator_t, Args...>
static my_type simstr::str_storable< K, Impl, Allocator >::lowered_from |
( |
const From & | f, |
|
|
Args &&... | args ) |
|
inlinestatic |
Создать копию переданной строки в нижнем регистре символов Unicode первой плоскости (<0xFFFF)
- Аргументы
-
f | - строка источник |
...args | - параметры для инициализации аллокатора |
Регистр меняется упрощенными таблицами, где один code_point всегда меняется в один code_point (но для UTF-8 возможно, что длина в code unit'ах изменится).
template<typename K, typename Impl, typename Allocator>
template<StrType< K > From, typename... Args>
requires std::is_constructible_v<allocator_t, Args...>
static my_type simstr::str_storable< K, Impl, Allocator >::uppered_from |
( |
const From & | f, |
|
|
Args &&... | args ) |
|
inlinestatic |
Создать копию переданной строки в верхнем регистре символов Unicode первой плоскости (<0xFFFF)
- Аргументы
-
f | - строка источник |
...args | - параметры для инициализации аллокатора |
Регистр меняется упрощенными таблицами, где один code_point всегда меняется в один code_point (но для UTF-8 возможно, что длина в code unit'ах изменится).