simstr 1.6.1
Yet another strings library
 
Загрузка...
Поиск...
Не найдено
Шаблон класса simstr::str_storable< K, Impl, Allocator >

База для объектов, владеющих строкой. Подробнее...

#include <sstring.h>

Граф наследования:simstr::str_storable< K, Impl, Allocator >:
simstr::lstring< K, N, forShared, Allocator > simstr::lstring< u8s, N > simstr::lstring< ubs, N > simstr::lstring< wchar_t, N > simstr::lstring< u16s, N > simstr::lstring< u32s, N > simstr::lstring< u8s, N, true > simstr::lstring< ubs, N, true > simstr::lstring< wchar_t, N, true > simstr::lstring< u16s, N, true > simstr::lstring< u32s, N, true > simstr::sstring< K, Allocator > simstr::sstring< u8s > simstr::sstring< ubs > simstr::sstring< wchar_t > simstr::sstring< u16s > simstr::sstring< u32s >

Открытые члены

constexpr operator const K * () const noexcept
 Оператор преобразования в нуль-терминированную C-строку.
 
constexpr s_str_nt to_nts (size_t from=0) const
 Получить simple_str_nt, начиная с заданного символа.
 
constexpr 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 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 как-то выделяет место, может указать типом аллокатора какой-либо пустой класс.

Конструктор(ы)

◆ str_storable()

template<typename K, typename Impl, typename Allocator>
template<typename... Args>
simstr::str_storable< K, Impl, Allocator >::str_storable ( Args &&... args)
inlineexplicitconstexprprotected

Создать пустой объект.

Аргументы
...args- параметры для инициализации аллокатора.

Методы

◆ init_from_str_other()

template<typename K, typename Impl, typename Allocator>
void simstr::str_storable< K, Impl, Allocator >::init_from_str_other ( s_str other)
inlineconstexprprotected

Инициализация из другого строкового объекта.

Аргументы
other- другой строковый объект, simple_str.

◆ init_replaced()

template<typename K, typename Impl, typename Allocator>
template<StrType< K > From>
void simstr::str_storable< K, Impl, Allocator >::init_replaced ( const From & f,
s_str pattern,
s_str repl,
size_t offset = 0,
size_t maxCount = 0 )
inlineprotected

Инициализация из строкового источника с заменой.

Аргументы
f- строковый объект, из которого берётся исходная строка.
pattern- подстрока, которую надо заменить.
repl- строка, на которую надо заменить.
offset- начальная позиция для поиска подстрок.
maxCount- максимальное количество замен, 0 - без ограничений.

◆ init_str_expr()

template<typename K, typename Impl, typename Allocator>
template<StrExprForType< K > A>
void simstr::str_storable< K, Impl, Allocator >::init_str_expr ( const A & expr)
inlineconstexprprotected

Инициализация из строкового выражения.

Аргументы
expr- строковое выражение.

Запрашивает у строкового выражения length(), выделяет память нужного размера, и вызывает метод place() для размещения результата в буфере.

◆ init_str_repeat()

template<typename K, typename Impl, typename Allocator>
void simstr::str_storable< K, Impl, Allocator >::init_str_repeat ( size_t repeat,
s_str pattern )
inlineconstexprprotected

Инициализация повторением строки.

Аргументы
repeat- количество повторов.
pattern- строка, которую надо повторить.

◆ init_symb_repeat()

template<typename K, typename Impl, typename Allocator>
void simstr::str_storable< K, Impl, Allocator >::init_symb_repeat ( size_t count,
K pad )
inlineconstexprprotected

Инициализация повторением символа.

Аргументы
count- количество повторов.
pad- символ, который надо повторить.

◆ join()

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();
auto line = lstringa<200>::join(strings, 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

В этом случае компилятор может лучше оптимизировать код слияния строк.

◆ lowered_from()

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'ах изменится).

◆ lowered_only_ascii_from()

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_only_ascii_from ( const From & f,
Args &&... args )
inlinestatic

Создать копию переданной строки в нижнем регистре символов ASCII.

Аргументы
f- строка источник.
...args- параметры для инициализации аллокатора.

◆ operator const K *()

template<typename K, typename Impl, typename Allocator>
simstr::str_storable< K, Impl, Allocator >::operator const K * ( ) const
inlineconstexprnoexcept

Оператор преобразования в нуль-терминированную C-строку.

Возвращает
const K* - указатель на начало строки.

◆ operator s_str_nt()

template<typename K, typename Impl, typename Allocator>
simstr::str_storable< K, Impl, Allocator >::operator s_str_nt ( ) const
inlineconstexpr

Преобразовать в simple_str_nt.

Возвращает
simple_str_nt.

◆ replaced_from()

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 >::replaced_from ( const From & f,
s_str pattern,
s_str repl,
size_t offset = 0,
size_t maxCount = 0,
Args &&... args )
inlinestatic

Создать копию переданной строки с заменой подстрок.

Аргументы
f- строка источник.
pattern- подстрока, которую надо заменить.
repl- строка, на которую надо заменить.
offset- начальная позиция для поиска подстрок.
maxCount- максимальное количество замен, 0 - без ограничений.
...args- параметры для инициализации аллокатора.

◆ to_nts()

template<typename K, typename Impl, typename Allocator>
s_str_nt simstr::str_storable< K, Impl, Allocator >::to_nts ( size_t from = 0) const
inlineconstexpr

Получить simple_str_nt, начиная с заданного символа.

Аргументы
from- позиция начального символа, по умолчанию 0.
Возвращает
simple_str_nt,

◆ upperred_from()

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'ах изменится).

◆ upperred_only_ascii_from()

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- параметры для инициализации аллокатора.

Объявления и описания членов класса находятся в файле: