simstr 1.0
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< wchar_t, N > simstr::lstring< u16s, N > simstr::lstring< u32s, N > simstr::lstring< u8s, 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< wchar_t > simstr::sstring< u16s > simstr::sstring< u32s >

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

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)
 Создать копию переданной строки с заменой подстрок
 

Защищенные члены

allocator_t & allocator ()
 Получить аллокатор
 

Подробное описание

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() [1/6]

template<typename K, typename Impl, typename Allocator>
template<typename... Args>
requires std::is_constructible_v<allocator_t, Args...>
simstr::str_storable< K, Impl, Allocator >::str_storable ( Args &&... args)
inlineconstexprnoexcept

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

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

◆ str_storable() [2/6]

template<typename K, typename Impl, typename Allocator>
template<typename... Args>
requires std::is_constructible_v<allocator_t, Args...>
simstr::str_storable< K, Impl, Allocator >::str_storable ( s_str other,
Args &&... args )
inlineconstexpr

Конструктор из другого строкового объекта

Аргументы
other- другой строковый объект, simple_str
...args- параметры для инициализации аллокатора

◆ str_storable() [3/6]

template<typename K, typename Impl, typename Allocator>
template<typename... Args>
requires std::is_constructible_v<allocator_t, Args...>
simstr::str_storable< K, Impl, Allocator >::str_storable ( size_t repeat,
s_str pattern,
Args &&... args )
inlineconstexpr

Конструктор повторения строки

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

◆ str_storable() [4/6]

template<typename K, typename Impl, typename Allocator>
template<typename... Args>
requires std::is_constructible_v<allocator_t, Args...>
simstr::str_storable< K, Impl, Allocator >::str_storable ( size_t count,
K pad,
Args &&... args )
inline

Конструктор повторения символа

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

◆ str_storable() [5/6]

template<typename K, typename Impl, typename Allocator>
template<typename... Args>
requires std::is_constructible_v<allocator_t, Args...>
simstr::str_storable< K, Impl, Allocator >::str_storable ( const StrExprForType< K > auto & expr,
Args &&... args )
inlineconstexpr

Конструктор из строкового выражения

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

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

◆ str_storable() [6/6]

template<typename K, typename Impl, typename Allocator>
template<StrType< K > From, typename... Args>
requires std::is_constructible_v<allocator_t, Args...>
simstr::str_storable< K, Impl, Allocator >::str_storable ( const From & f,
s_str pattern,
s_str repl,
size_t offset = 0,
size_t maxCount = 0,
Args &&... args )
inline

Конструктор из строкового источника с заменой

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

Методы

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

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

◆ 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
inlinenoexcept

Оператор преобразования в нуль-терминированную 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
inline

Преобразовать в 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
inline

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

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

◆ uppered_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 >::uppered_from ( const From & f,
Args &&... args )
inlinestatic

Создать копию переданной строки в верхнем регистре символов Unicode первой плоскости (<0xFFFF)

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

Регистр меняется упрощенными таблицами, где один code_point всегда меняется в один code_point (но для UTF-8 возможно, что длина в code unit'ах изменится).

◆ uppered_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 >::uppered_only_ascii_from ( const From & f,
Args &&... args )
inlinestatic

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

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

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