hybstr
Hybrid constexpr string library for compile-time and runtime use
Loading...
Searching...
No Matches
hybstr Namespace Reference

Main interface. More...

Namespaces

namespace  literals
 Contains user defined literal operators for creating 'hybstr::string_impl' objects.

Classes

struct  is_string_impl
 Type trait for detecting hybstr::string_impl. More...
struct  is_string_impl< string_impl< BufferCapacity, DynamicExpandCapacity > >
class  string_impl
 Fixed-capacity string that will expand on demand. More...

Functions

template<std::size_t DynamicExpandCapacity = HYBSTR_DYNAMIC_EXPAND_CAPACITY>
constexpr auto string ()
 Creates an empty hybrid string.
template<std::size_t DynamicExpandCapacity = HYBSTR_DYNAMIC_EXPAND_CAPACITY, std::size_t N>
constexpr auto string (const char(&str)[N])
 Creates a hybrid string from a string literal.
template<std::size_t ViewSize = HYBSTR_DYNAMIC_EXPAND_CAPACITY, std::size_t DynamicExpandCapacity = HYBSTR_DYNAMIC_EXPAND_CAPACITY>
constexpr auto string (std::string_view sv) noexcept
 Creates a hybrid string from a std::string_view.
template<std::size_t RangeSize = HYBSTR_DYNAMIC_EXPAND_CAPACITY, std::size_t DynamicExpandCapacity = HYBSTR_DYNAMIC_EXPAND_CAPACITY, typename _Iter>
constexpr auto string (_Iter start, _Iter end) noexcept
 Creates a hybrid string from an iterator range.
template<std::size_t N>
 string_impl (const char(&)[N]) -> string_impl< N >
template<std::size_t B1, std::size_t DynamicExpandCapacity1, std::size_t B2, std::size_t DynamicExpandCapacity2>
constexpr auto operator+ (const string_impl< B1, DynamicExpandCapacity1 > &s1, const string_impl< B2, DynamicExpandCapacity2 > &s2) noexcept
 Concatenates two hybrid strings.
template<std::size_t BufferCapacity, std::size_t DynamicExpandCapacity, std::size_t N>
constexpr auto operator+ (const string_impl< BufferCapacity, DynamicExpandCapacity > &s, const char(&str)[N]) noexcept
 Concatenates a hybrid string with a C-style string literal.
template<std::size_t BufferCapacity, std::size_t DynamicExpandCapacity, std::size_t N>
constexpr auto operator+ (const char(&str)[N], const string_impl< BufferCapacity, DynamicExpandCapacity > &s) noexcept
 Concatenates a C-style string literal with a hybrid string.
template<std::size_t BufferCapacity, std::size_t DynamicExpandCapacity>
constexpr auto operator+ (const string_impl< BufferCapacity, DynamicExpandCapacity > &s, char c) noexcept
 Concatenates a hybrid string with a char.
template<std::size_t BufferCapacity, std::size_t DynamicExpandCapacity>
constexpr auto operator+ (char c, const string_impl< BufferCapacity, DynamicExpandCapacity > &s) noexcept
 Concatenates a hybrid string with a char.
template<std::size_t BufferCapacity, std::size_t DynamicExpandCapacity>
constexpr auto operator+ (const string_impl< BufferCapacity, DynamicExpandCapacity > &s, std::string_view sv) noexcept
 Concatenates a hybrid string with a std::string_view.
template<std::size_t BufferCapacity, std::size_t DynamicExpandCapacity>
constexpr auto operator+ (std::string_view sv, const string_impl< BufferCapacity, DynamicExpandCapacity > &s) noexcept
 Concatenates a std::string_view with a hybrid string.
template<std::size_t B1, std::size_t D1, std::size_t B2, std::size_t D2>
constexpr bool operator== (const string_impl< B1, D1 > &s1, const string_impl< B2, D2 > &s2) noexcept
 Equality comparison for two hybrid strings.
template<std::size_t B1, std::size_t D1, std::size_t B2, std::size_t D2>
constexpr bool operator!= (const string_impl< B1, D1 > &s1, const string_impl< B2, D2 > &s2) noexcept
 Inequality comparison for two hybrid strings.
template<std::size_t B1, std::size_t D1, std::size_t B2, std::size_t D2>
constexpr auto operator<=> (const string_impl< B1, D1 > &s1, const string_impl< B2, D2 > &s2) noexcept
 Lexicographical three-way comparison for hybrid strings. C++20 or above.
template<std::size_t B1, std::size_t D1, std::size_t B2, std::size_t D2>
constexpr bool operator< (const string_impl< B1, D1 > &s1, const string_impl< B2, D2 > &s2) noexcept
 Less than comparison for two hybrid strings. C++17.
template<std::size_t B1, std::size_t D1, std::size_t B2, std::size_t D2>
constexpr bool operator<= (const string_impl< B1, D1 > &s1, const string_impl< B2, D2 > &s2) noexcept
 Less than or equal to comparison for two hybrid strings.
template<std::size_t B1, std::size_t D1, std::size_t B2, std::size_t D2>
constexpr bool operator> (const string_impl< B1, D1 > &s1, const string_impl< B2, D2 > &s2) noexcept
 Greater than comparison for two hybrid strings.
template<std::size_t B1, std::size_t D1, std::size_t B2, std::size_t D2>
constexpr bool operator>= (const string_impl< B1, D1 > &s1, const string_impl< B2, D2 > &s2) noexcept
 Greater than or equal to comparison for two hybrid strings.
template<auto str>
consteval auto fit_string () noexcept
 Adjusts the compile-time buffer size to exactly fit the string content. C++20 or above.

Variables

template<typename T>
constexpr bool is_string_impl_v = is_string_impl<T>::value
 Shorthand boolean variable for is_string_impl.

Detailed Description

Main interface.

Function Documentation

◆ fit_string()

template<auto str>
auto hybstr::fit_string ( )
nodiscardconstevalnoexcept

Adjusts the compile-time buffer size to exactly fit the string content. C++20 or above.

Template Parameters
strA hybstr::string_impl instance (must be known at compile time).
Returns
A new string_impl whose BufferCapacity equals its current size.

◆ operator+()

template<std::size_t B1, std::size_t DynamicExpandCapacity1, std::size_t B2, std::size_t DynamicExpandCapacity2>
auto hybstr::operator+ ( const string_impl< B1, DynamicExpandCapacity1 > & s1,
const string_impl< B2, DynamicExpandCapacity2 > & s2 )
nodiscardconstexprnoexcept

Concatenates two hybrid strings.

Template Parameters
B1Capacity of the first string's compile-time buffer.
DynamicExpandCapacity1Dynamic capacity of the first string.
B2Capacity of the second string's compile-time buffer.
DynamicExpandCapacity2Dynamic capacity of the second string.
Returns
A new string_impl with combined compile-time and dynamic capacities.

◆ string() [1/2]

template<std::size_t RangeSize = HYBSTR_DYNAMIC_EXPAND_CAPACITY, std::size_t DynamicExpandCapacity = HYBSTR_DYNAMIC_EXPAND_CAPACITY, typename _Iter>
auto hybstr::string ( _Iter start,
_Iter end )
nodiscardconstexprnoexcept

Creates a hybrid string from an iterator range.

Template Parameters
RangeSizeThe known or estimated number of elements in the range.
DynamicExpandCapacityDynamic buffer size for runtime usage.
_IterIterator type.

◆ string() [2/2]

template<std::size_t ViewSize = HYBSTR_DYNAMIC_EXPAND_CAPACITY, std::size_t DynamicExpandCapacity = HYBSTR_DYNAMIC_EXPAND_CAPACITY>
auto hybstr::string ( std::string_view sv)
nodiscardconstexprnoexcept

Creates a hybrid string from a std::string_view.

Template Parameters
ViewSizeThe known or estimated size of the string view.
DynamicExpandCapacityDynamic buffer size for runtime usage.