rapidyaml  0.7.0
parse and emit YAML, and do it fast
cat: concatenate arguments to string

Functions

template<class Arg , class... Args>
size_t c4::cat (substr buf, Arg const &a, Args const &...more)
 serialize the arguments, concatenating them to the given fixed-size buffer. More...
 
template<class... Args>
substr c4::cat_sub (substr buf, Args &&...args)
 like c4::cat() but return a substr instead of a size More...
 
template<class CharOwningContainer , class... Args>
void c4::catrs (CharOwningContainer *cont, Args const &...args)
 cat+resize: like c4::cat(), but receives a container, and resizes it as needed to contain the result. More...
 
template<class CharOwningContainer , class... Args>
CharOwningContainer c4::catrs (Args const &...args)
 cat+resize: like c4::cat(), but creates and returns a new container sized as needed to contain the result. More...
 
template<class CharOwningContainer , class... Args>
csubstr c4::catrs_append (CharOwningContainer *cont, Args const &...args)
 cat+resize+append: like c4::cat(), but receives a container, and appends to it instead of overwriting it. More...
 

Detailed Description

Function Documentation

◆ cat()

template<class Arg , class... Args>
size_t c4::cat ( substr  buf,
Arg const &  a,
Args const &...  more 
)

serialize the arguments, concatenating them to the given fixed-size buffer.

The buffer size is strictly respected: no writes will occur beyond its end.

Returns
the number of characters needed to write all the arguments into the buffer.
See also
c4::catrs() if instead of a fixed-size buffer, a resizeable container is desired
c4::uncat() for the inverse function
c4::catsep() if a separator between each argument is to be used
c4::format() if a format string is desired

Definition at line 584 of file format.hpp.

585 {
586  size_t num = to_chars(buf, a);
587  buf = buf.len >= num ? buf.sub(num) : substr{};
588  num += cat(buf, more...);
589  return num;
590 }
size_t cat(substr buf, Arg const &a, Args const &...more)
serialize the arguments, concatenating them to the given fixed-size buffer.
Definition: format.hpp:584
size_t to_chars(substr buf, fmt::right_< T > const &align)
Definition: format.hpp:548

References c4::to_chars().

Referenced by c4::cat_sub(), c4::catrs(), c4::catrs_append(), and sample::sample_formatting().

◆ cat_sub()

template<class... Args>
substr c4::cat_sub ( substr  buf,
Args &&...  args 
)

like c4::cat() but return a substr instead of a size

Definition at line 594 of file format.hpp.

595 {
596  size_t sz = cat(buf, std::forward<Args>(args)...);
597  C4_CHECK(sz <= buf.len);
598  return {buf.str, sz <= buf.len ? sz : buf.len};
599 }

References c4::cat().

Referenced by sample::sample_formatting().

◆ catrs() [1/2]

template<class CharOwningContainer , class... Args>
void c4::catrs ( CharOwningContainer *  cont,
Args const &...  args 
)
inline

cat+resize: like c4::cat(), but receives a container, and resizes it as needed to contain the result.

The container is overwritten. To append to it, use the append overload.

See also
c4::cat()

Definition at line 888 of file format.hpp.

889 {
890 retry:
891  substr buf = to_substr(*cont);
892  size_t ret = cat(buf, args...);
893  cont->resize(ret);
894  if(ret > buf.len)
895  goto retry;
896 }
substr to_substr(substr s) noexcept
neutral version for use in generic code
Definition: substr.hpp:2187

References c4::cat(), and c4::to_substr().

Referenced by c4::catrs(), and sample::sample_formatting().

◆ catrs() [2/2]

template<class CharOwningContainer , class... Args>
CharOwningContainer c4::catrs ( Args const &...  args)
inline

cat+resize: like c4::cat(), but creates and returns a new container sized as needed to contain the result.

See also
c4::cat()

Definition at line 903 of file format.hpp.

904 {
905  CharOwningContainer cont;
906  catrs(&cont, args...);
907  return cont;
908 }
CharOwningContainer catrs(Args const &...args)
cat+resize: like c4::cat(), but creates and returns a new container sized as needed to contain the re...
Definition: format.hpp:903

References c4::catrs().

◆ catrs_append()

template<class CharOwningContainer , class... Args>
csubstr c4::catrs_append ( CharOwningContainer *  cont,
Args const &...  args 
)
inline

cat+resize+append: like c4::cat(), but receives a container, and appends to it instead of overwriting it.

The container is resized as needed to contain the result.

Returns
the region newly appended to the original container
See also
c4::cat()
c4::catrs()

Definition at line 919 of file format.hpp.

920 {
921  const size_t pos = cont->size();
922 retry:
923  substr buf = to_substr(*cont).sub(pos);
924  size_t ret = cat(buf, args...);
925  cont->resize(pos + ret);
926  if(ret > buf.len)
927  goto retry;
928  return to_csubstr(*cont).range(pos, cont->size());
929 }
csubstr to_csubstr(substr s) noexcept
neutral version for use in generic code
Definition: substr.hpp:2189

References c4::cat(), c4::to_csubstr(), and c4::to_substr().

Referenced by sample::sample_formatting().