|
template<typename T, typename... Args>
requires std::is_constructible_v<allocator_t, Args...> |
| static my_type | join (const T &strings, s_str delimiter, 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 | upperred_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 | upperred_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) |
| | Создать копию переданной строки с заменой подстрок.
|
| |
|
|
constexpr allocator_t & | allocator () |
| | Получить аллокатор.
|
| |
| template<typename... Args> |
| constexpr | str_storable (Args &&... args) |
| | Создать пустой объект.
|
| |
| constexpr void | init_from_str_other (s_str other) |
| | Инициализация из другого строкового объекта.
|
| |
| constexpr void | init_str_repeat (size_t repeat, s_str pattern) |
| | Инициализация повторением строки.
|
| |
| constexpr void | init_symb_repeat (size_t count, K pad) |
| | Инициализация повторением символа.
|
| |
| template<StrExprForType< K > A> |
| constexpr void | init_str_expr (const A &expr) |
| | Инициализация из строкового выражения.
|
| |
| template<StrType< K > From> |
| void | init_replaced (const From &f, s_str pattern, s_str repl, size_t offset=0, size_t maxCount=0) |
| | Инициализация из строкового источника с заменой.
|
| |
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<StrExprForType< K > A>
Инициализация из строкового выражения.
- Аргументы
-
| expr | - строковое выражение. |
Запрашивает у строкового выражения length(), выделяет память нужного размера, и вызывает метод place() для размещения результата в буфере.
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 | delimiter, |
|
|
bool | tail = false, |
|
|
bool | skip_empty = false, |
|
|
Args &&... | args ) |
|
inlinestatic |
Конкатенация строк из контейнера в одну строку.
- Аргументы
-
| strings | - контейнер со строками. |
| delimiter | - разделитель, добавляемый между строками. |
| tail | - добавить разделитель после последней строки. |
| skip_empty | - пропускать пустые строки без добавления разделителя. |
| ...args | - параметры для инициализации аллокатора. |
Функция служит для слияния контейнера строк в одну строку с разделителем.
std::vector<ssa> strings = get_strings();
ssa delim = get_current_delimiter();
static my_type join(const T &strings, s_str delimiter, bool tail=false, bool skip_empty=false, Args &&... args)
Определения sstring.h:1199
Стоит отметить, что при заранее известном разделителе лучше пользоваться строковым выражением e_join.
std::vector<ssa> strings = get_strings();
lstringa<200> line{
e_join(strings,
"/")};
constexpr auto e_join(const T &s, L &&d)
Получить строковое выражение, конкатенирующее строки в контейнере в одну строку с заданным разделител...
Определения strexpr.h:2035
В этом случае компилятор может лучше оптимизировать код слияния строк.
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 >::upperred_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 >::upperred_only_ascii_from |
( |
const From & | f, |
|
|
Args &&... | args ) |
|
inlinestatic |
Создать строку, копию переданной в верхнем регистре символов ASCII.
- Аргументы
-
| f | - строка источник. |
| ...args | - параметры для инициализации аллокатора. |