conststr 0.2.1
Loading...
Searching...
No Matches
Classes | Namespaces | Concepts | Typedefs | Functions | Variables
conststr.hpp File Reference

Main header file for the constant string type. More...

#include <algorithm>
#include <concepts>
#include <cstddef>
#include <iostream>
#include <iterator>
#include <string_view>
#include <tuple>
#include <type_traits>

Go to the source code of this file.

Classes

struct  conststr::sv_selector< T >
 String view type selector. Just an empty struct. More...
 
struct  conststr::cstr< N, T, view >
 String type that can be evaluated in a constant context. More...
 
struct  std::tuple_size< conststr::cstr< N, T, U > >
 Specialize std::tuple_size make cstr tuple-like. More...
 
struct  std::tuple_element< Idx, conststr::cstr< N, T, U > >
 Specialize std::tuple_element make cstr tuple-like. More...
 
struct  std::hash< conststr::cstr< N, T, U > >
 Specialize std::hash for cstr, depend on the view type of cstr. More...
 

Namespaces

namespace  conststr
 The outermost namespace of this library to avoid identifier pollution.
 
namespace  conststr::meta
 Some useful template meta.
 
namespace  conststr::charutils
 Some constexpr character operating functions.
 
namespace  conststr::literal
 Define string literal suffix.
 

Concepts

concept  conststr::meta::all_same
 This concept is satisfied if all types of Ts... the same type.
 
concept  conststr::meta::all_same_of
 This concept is satisfied if all values of Vs... has the same type.
 
concept  conststr::meta::hashable
 This concept is satisfied if std::hash<T> has specialization.
 
concept  conststr::meta::viewer
 This concept is satisfied if T is a view type to a constant contiguous sequence of Elem.
 
concept  conststr::charutils::char_like
 This concept is satisfied if T is a char-like type.
 
concept  conststr::can_construct_cstr_from
 This concept is satisfied if cstr can be constructed from T.
 
concept  conststr::can_construct_cstr_t_from
 This concept is satisfied if cstr can be constructed from T and the value_type of the cstr is CharT.
 
concept  conststr::can_construct_cstr_t_n_from
 This concept is satisfied if cstr can be constructed from T and the value_type of the cstr is CharT and length is Len.
 

Typedefs

template<typename... Ts>
using conststr::meta::first_t = std::tuple_element_t< 0, std::tuple< Ts... > >
 Get the first type of class template parameter pack. More...
 
template<auto... Vs>
using conststr::meta::first_t_of = std::remove_cvref_t< std::tuple_element_t< 0, decltype(std::tuple{Vs...})> >
 Get the type of the first value of variable template parameter pack. More...
 
template<typename... Ts>
using conststr::meta::last_t = std::tuple_element_t< sizeof...(Ts) - 1, std::tuple< Ts... > >
 Get the last type of class template parameter pack. More...
 
template<auto... Vs>
using conststr::meta::last_t_of = std::remove_cvref_t< std::tuple_element_t< sizeof...(Vs) - 1, decltype(std::tuple{Vs...})> >
 Get the type of the last value of variable template parameter pack. More...
 

Functions

template<char_like T>
constexpr bool conststr::charutils::islower (T ch)
 constexpr re-implementation of std::islower.
 
template<char_like T>
constexpr bool conststr::charutils::issuper (T ch)
 constexpr re-implementation of std::issuper.
 
template<char_like T>
constexpr bool conststr::charutils::isdigit (T ch)
 constexpr re-implementation of std::isdigit.
 
template<char_like T>
constexpr bool conststr::charutils::isalpha (T ch)
 constexpr re-implementation of std::isalpha.
 
template<char_like T>
constexpr bool conststr::charutils::isalnum (T ch)
 constexpr re-implementation of std::isalnum.
 
template<char_like T>
constexpr bool conststr::charutils::isxdigit (T ch)
 constexpr re-implementation of std::isxdigit.
 
template<char_like T>
constexpr bool conststr::charutils::iscntrl (T ch)
 constexpr re-implementation of std::iscntrl.
 
template<char_like T>
constexpr bool conststr::charutils::ispunct (T ch)
 constexpr re-implementation of std::ispunct.
 
template<char_like T>
constexpr bool conststr::charutils::isblank (T ch)
 constexpr re-implementation of std::isblank.
 
template<char_like T>
constexpr bool conststr::charutils::isspace (T ch)
 constexpr re-implementation of std::isspace.
 
template<char_like T>
constexpr bool conststr::charutils::isgraph (T ch)
 constexpr re-implementation of std::isgraph.
 
template<char_like T>
constexpr bool conststr::charutils::isprint (T ch)
 constexpr re-implementation of std::isprint.
 
template<char_like T>
constexpr char conststr::charutils::toupper (T ch)
 constexpr re-implementation of std::toupper.
 
template<char_like T>
constexpr char conststr::charutils::tolower (T ch)
 constexpr re-implementation of std::tolower.
 
template<char_like T>
constexpr char conststr::charutils::invert (T ch)
 Invert case of letter.
 
template<char_like auto... Chs>
requires meta::all_same_of<Chs...> && (sizeof...(Chs) > 1)
constexpr bool conststr::charutils::is (meta::first_t_of< Chs... > ch)
 Check if input character the same as one of variable template parameters. More...
 
template<char_like auto Ch>
constexpr decltype(Ch) conststr::charutils::just (decltype(Ch) ignored)
 No matter what the input is, always output Ch. More...
 
template<char_like auto... Chs>
requires meta::all_same_of<Chs...> && (sizeof...(Chs) > 1)
constexpr meta::last_t_of< Chs... > conststr::charutils::replace (meta::last_t_of< Chs... > ch)
 Replace the input character if it is the same as one of variable template parameters. More...
 
template<char_like auto... Chs>
requires meta::all_same_of<Chs...> && (sizeof...(Chs) > 1)
constexpr meta::last_t_of< Chs... > conststr::charutils::remain (meta::last_t_of< Chs... > ch)
 Replace the input character if it is NOT one of variable template parameters. More...
 
template<charutils::char_like T, std::size_t N>
 conststr::cstr (const T(&)[N]) -> cstr< N - 1, T, std::basic_string_view< T > >
 Deduction guide for cstr with default view type.
 
template<charutils::char_like T, std::size_t N, meta::viewer< T > V>
 conststr::cstr (const T(&)[N], const sv_selector< V > &) -> cstr< N - 1, T, V >
 Deduction guide for cstr with string view type selector.
 
template<charutils::char_like T>
 conststr::cstr (const T &ch) -> cstr< 1, T, std::basic_string_view< T > >
 Deduction guide for cstr with default view type.
 
template<charutils::char_like T, meta::viewer< T > V>
 conststr::cstr (const T &ch, const sv_selector< V > &) -> cstr< 1, T, V >
 Deduction guide for cstr with string view type selector.
 
template<std::size_t Idx, charutils::char_like T, typename U , std::size_t N>
cstr< N, T, U >::reference conststr::get (cstr< N, T, U > &str) noexcept
 Tuple-like interface, extracts the Idx-th element from the string. More...
 
template<std::size_t Idx, charutils::char_like T, typename U , std::size_t N>
cstr< N, T, U >::const_reference conststr::get (const cstr< N, T, U > &str) noexcept
 Tuple-like interface, extracts the Idx-th element from the string. More...
 
template<std::size_t Idx, charutils::char_like T, typename U , std::size_t N>
cstr< N, T, U >::rreference conststr::get (cstr< N, T, U > &&str) noexcept
 Tuple-like interface, extracts the Idx-th element from the string. More...
 
template<std::size_t Idx, charutils::char_like T, typename U , std::size_t N>
const cstr< N, T, U >::const_rreference conststr::get (const cstr< N, T, U > &&str) noexcept
 Tuple-like interface, extracts the Idx-th element from the string. More...
 
template<charutils::char_like T, typename V1 , typename V2 , std::size_t N>
constexpr void conststr::swap (cstr< N, T, V1 > &lhs, cstr< N, T, V2 > &rhs)
 Satisfy the named requirement Swappable. More...
 
template<can_construct_cstr_from First, can_construct_cstr_from... Str>
requires meta::all_same< typename decltype(cstr(std::declval<First>()))::value_type, typename decltype(cstr(std::declval<Str>()))::value_type...>
constexpr auto conststr::flatten (const First &first, const Str &...strs)
 Flatten multiple strings of different lengths. More...
 
template<charutils::char_like T, typename U , std::size_t N>
std::ostream & conststr::operator<< (std::ostream &os, const cstr< N, T, U > &str)
 Output string to std::ostream.
 
consteval auto conststr::literal::operator""_cs (char ch)
 User-defined string literal with suffix _cs. More...
 
consteval auto conststr::literal::operator""_cs (char8_t ch)
 User-defined string literal with suffix _cs. More...
 
consteval auto conststr::literal::operator""_cs (char16_t ch)
 User-defined string literal with suffix _cs. More...
 
consteval auto conststr::literal::operator""_cs (char32_t ch)
 User-defined string literal with suffix _cs. More...
 
consteval auto conststr::literal::operator""_cs (wchar_t ch)
 User-defined string literal with suffix _cs. More...
 
template<cstr str>
consteval auto conststr::literal::operator""_cs ()
 User-defined string literal with suffix _cs. More...
 

Variables

template<auto... Vs>
constexpr auto conststr::meta::first_v = [](auto first, auto...) { return first; }(Vs...)
 Get the first value of variable template parameter pack. More...
 
template<auto... Vs>
constexpr auto conststr::meta::last_v = (Vs, ...)
 Get the last value of variable template parameter pack. More...
 
template<char_like To>
constexpr auto conststr::charutils::cast
 Cast input character to the value of another character type. More...
 
template<typename T >
constexpr auto conststr::sv = sv_selector<T>{}
 String view type selector. Assist in type deduction of cstr. More...
 

Detailed Description

Main header file for the constant string type.