8#ifndef H_ALIB_STRINGS_STDSTRINGS
9#define H_ALIB_STRINGS_STDSTRINGS
18#if __has_include(<format>)
21# include <fmt/format.h>
58template<
typename TChar>
65 static constexpr const TChar* Buffer (std::basic_string_view<TChar>
const & src) {
return src.data () ; }
66 static constexpr integer Length (std::basic_string_view<TChar>
const & src) {
return integer( src.length() ); }
67 constexpr static std::basic_string_view<TChar> Construct(
const TChar* array,
integer length ) {
return std::basic_string_view<TChar>( array,
size_t(length) ); }
81 static const nchar* Buffer (std::basic_string_view<char8_t>
const & src) {
return reinterpret_cast<const nchar*
>(src.data ()) ; }
82 static constexpr integer Length (std::basic_string_view<char8_t>
const & src) {
return integer( src.length() ); }
83 static std::basic_string_view<char8_t> Construct(
const nchar* array,
integer length )
84 {
return std::basic_string_view<char8_t>(
reinterpret_cast<const char8_t*
>(array),
size_t(length) ); }
96template<
typename TChar>
103 static constexpr const TChar* Buffer (std::basic_string_view<TChar>
const & src ) {
return src.data () ; }
104 static constexpr integer Length (std::basic_string_view<TChar>
const & src ) {
return integer( src.length() ); }
105 static constexpr std::basic_string_view<TChar> Construct(
const TChar* array,
integer length ) {
return std::basic_string_view<TChar>( array,
size_t(length) ); }
120 static const nchar* Buffer (std::basic_string_view<char8_t>
const & src ) {
return reinterpret_cast<const nchar*
>(src.data ()) ; }
121 static constexpr integer Length (std::basic_string_view<char8_t>
const & src ) {
return integer( src.length() ); }
122 static std::basic_string_view<char8_t> Construct(
const nchar* array,
integer length )
123 {
return std::basic_string_view<char8_t>(
reinterpret_cast<const char8_t*
>(array),
size_t(length) ); }
138template<
typename TChar>
145 static constexpr const TChar* Buffer ( std::basic_string<TChar>
const & src ) {
return src.data () ; }
146 static constexpr integer Length ( std::basic_string<TChar>
const & src ) {
return integer( src.length() ); }
147 static constexpr std::basic_string<TChar> Construct(
const TChar* array,
integer length ) {
return std::basic_string<TChar>( array,
size_t(length) ); }
163 static const nchar* Buffer ( std::basic_string<char8_t>
const & src ) {
return reinterpret_cast<const nchar*
>(src.data()); }
164 static constexpr integer Length ( std::basic_string<char8_t>
const & src ) {
return integer( src.length() ); }
165 static std::basic_string<char8_t> Construct(
const nchar* array,
integer length )
166 {
return std::basic_string<char8_t>(
reinterpret_cast<const char8_t*
>(array),
size_t(length) ); }
198template<
typename TChar>
205 static constexpr const TChar* Buffer ( std::basic_string<TChar>
const & src ) {
return src.data () ; }
206 static constexpr integer Length ( std::basic_string<TChar>
const & src ) {
return integer( src.length() ); }
207 static constexpr std::basic_string<TChar> Construct(
const TChar* array,
integer length ) {
return std::basic_string<TChar>( array,
size_t(length) ); }
221template<
typename TChar>
228 static constexpr const TChar* Buffer (std::vector<TChar>
const & src) {
return src.data() ; }
229 static constexpr integer Length (std::vector<TChar>
const & src) {
return integer( src.size() ); }
230 static std::vector<TChar> Construct(
const TChar* array,
integer length )
232 std::vector<TChar> result;
233 result.reserve(
size_t(length) );
234 const TChar* end= array + length;
236 result.push_back( *array++ );
254template<
typename TChar>
261 static constexpr const TChar* Buffer (std::vector<TChar>
const & src) {
return src.data() ; }
262 static constexpr integer Length (std::vector<TChar>
const & src) {
return integer( src.size() ); }
263 static constexpr std::vector<TChar> Construct(
const TChar* array,
integer length )
265 std::vector<TChar> result;
266 result.reserve(
size_t(length) );
267 const TChar* end= array + length;
269 result.push_back( *array++ );
283template<
typename TChar,
size_t TLength>
290 static constexpr const TChar* Buffer (std::array<TChar, TLength>
const & src) {
return src.data () ; }
291 static constexpr integer Length (std::array<TChar, TLength>
const & src) {
return integer( src.size() ); }
304template<
typename TChar,
size_t TLength>
311 static constexpr const TChar* Buffer (std::array<TChar, TLength>
const & src ) {
return src.data () ; }
312 static constexpr integer Length (std::array<TChar, TLength>
const & src ) {
return integer( src.size() ); }
324template<
typename TChar>
331 static constexpr const TChar* Buffer (std::span<const TChar>
const & src) {
return src.data () ; }
332 static constexpr integer Length (std::span<const TChar>
const & src) {
return integer( src.size() ); }
333 static std::span<const TChar> Construct(
const TChar* array,
integer length ) {
return std::span<const TChar>( array,
size_t(length) ); }
346template<
typename TChar>
353 static constexpr const TChar* Buffer (std::span<const TChar>
const & src ) {
return src.data () ; }
354 static constexpr integer Length (std::span<const TChar>
const & src ) {
return integer( src.size() ); }
355 static std::span<const TChar> Construct(
const TChar* array,
integer length ) {
return std::span<const TChar>( array,
size_t(length) ); }
372 template<
typename TChar>
struct NoAutoCastTraits<TCString<TChar> ,
characters::Policy::ExplicitOnly, std::basic_string<TChar> > : std::true_type {};
373 template<
typename TChar,
typename TAlloc>
struct NoAutoCastTraits<TAString<TChar,TAlloc>, characters::Policy::ExplicitOnly, std::basic_string<TChar> > : std::true_type {};
386# if __has_include(<format>)
402template<
typename TChar>
404 : formatter<std::basic_string_view<TChar>, TChar> {
413 template<
typename TContext>
416 return formatter<std::basic_string_view<TChar>, TChar>
::format(
417 static_cast<std::basic_string_view<TChar>
>(str), ctx);
429template<
typename TChar>
431 : formatter<std::basic_string_view<TChar>, TChar> {
440 template<
typename TContext>
443 return formatter<std::basic_string_view<TChar>, TChar>
::format(
444 static_cast<std::basic_string_view<TChar>
>(str), ctx);
456template<
typename TChar,
typename TAllocator>
458 : formatter<std::basic_string_view<TChar>, TChar> {
466 template<
typename TContext>
468 return formatter<std::basic_string_view<TChar>, TChar>
::format(
469 static_cast<std::basic_string_view<TChar>
>(str), ctx);
481template<
typename TChar>
483 : formatter<std::basic_string_view<TChar>, TChar> {
492 template<
typename TContext>
495 return formatter<std::basic_string_view<TChar>, TChar>
::format(
496 static_cast<std::basic_string_view<TChar>
>(str), ctx);
508template<
typename TChar, alib::
integer TCapacity,
typename TAllocator>
510 : formatter<std::basic_string_view<TChar>, TChar> {
519 template<
typename TContext>
521 TContext& ctx )
const {
523 return formatter<std::basic_string_view<TChar>, TChar>
::format(
524 static_cast<std::basic_string_view<TChar>
>(str), ctx);
557template<
typename TAppendable>
568template<
typename TAppendable>
577# if __has_include(<format>)
599template <
typename TAppendable,
typename TChar>
601struct formatter<
alib::strings::Appendable<TAppendable>, TChar>
602 : formatter<std::basic_string_view<TChar>, TChar> {
609 template <
typename FormatContext>
610 auto format(
const alib::strings::Appendable<TAppendable>& wrapper,
611 FormatContext& ctx)
const {
613 buf.
Append(wrapper.appendable);
615 return formatter<std::basic_string_view<TChar>, TChar>
::format(
616 static_cast<std::basic_string_view<TChar>
>(buf), ctx);
663template<
typename TChar,
typename... TArgs>
676 ,
arguments(std::make_tuple(std::forward<TArgs>(args)...)) {}
683template<
typename TChar,
typename... TArgs>
688template<
typename TAllocator,
typename... Args>
696 std::back_insert_iterator<TAString<char, TAllocator>> it(target);
698 #if __has_include(<format>)
699 namespace f_temp=std;
701 namespace f_temp=fmt;
705 std::apply( [&](
auto&&... a) {
706 f_temp::vformat_to(it, fmtpackage.
format,
707 f_temp::make_format_args(
static_cast<const decltype(a)&
>(a)...));
715template<
typename TAllocator,
typename... Args>
723 std::back_insert_iterator<TAString<wchar_t, TAllocator>> it(target);
729 vformat_to(it, fmtpackage.
format,
730 make_wformat_args(
static_cast<const decltype(a)&
>(a)...));
742 template<
typename... Args>
746 template<
typename... Args>
750 template<
typename... Args>
754 template<
typename TAppendable>
TAString & Append(const TCharSrc *src, integer srcLength)
integer Length(const TChar *cstring)
lang::integer integer
Type alias in namespace alib.
strings::TStdFormat< wchar_t, Args... > WStdFormat
Type alias in namespace alib.
strings::TStdFormat< character, Args... > StdFormat
Type alias in namespace alib.
strings::TStdFormat< char, Args... > NStdFormat
Type alias in namespace alib.
characters::character character
Type alias in namespace alib.
strings::Appendable< TAppendable > Appendable
Type alias in namespace alib.
Appendable(const TAppendable &pAppendable)
const TAppendable & appendable
A reference to the wrapped appendable.