
2 changed files with 45 additions and 0 deletions
@ -0,0 +1,26 @@ |
|||||
|
#include "crlf.hh" |
||||
|
|
||||
|
namespace pEp |
||||
|
{ |
||||
|
|
||||
|
std::string operator""_CRLF(const char* str, size_t length) |
||||
|
{ |
||||
|
static const std::string CRLF{"\r\n"}; |
||||
|
|
||||
|
std::string ret; |
||||
|
ret.reserve(length + ((length+29)/30) + 2 ); // rough guess for average line length of 30.
|
||||
|
const char* end = str + length; |
||||
|
|
||||
|
// N.B.: Loop could be more optimized, but not necessary because it is only used for string literals.
|
||||
|
for(; str != end; ++str) |
||||
|
{ |
||||
|
if(*str == '\n') |
||||
|
ret += CRLF; |
||||
|
else |
||||
|
ret += *str; |
||||
|
} |
||||
|
|
||||
|
return ret; |
||||
|
} |
||||
|
|
||||
|
} // end of namespace pEp
|
@ -0,0 +1,19 @@ |
|||||
|
// This file is under GNU General Public License 3.0
|
||||
|
// see LICENSE.txt
|
||||
|
|
||||
|
#ifndef LIBPEPDATATYPES_CRLF_HH |
||||
|
#define LIBPEPDATATYPES_CRLF_HH |
||||
|
|
||||
|
#include <string> |
||||
|
|
||||
|
namespace pEp |
||||
|
{ |
||||
|
// creates a string where \n ("linefeed" a.k.a. LF) are replaced
|
||||
|
// by \r\n ("carriage return + linefeed" a.k.a. CRLF).
|
||||
|
// Useful to define strings in NET-ASCII or Net-Unicode (RFC5198) format
|
||||
|
// from string literals.
|
||||
|
std::string operator""_CRLF(const char* str, size_t length); |
||||
|
|
||||
|
} // end of namespace pEp
|
||||
|
|
||||
|
#endif // LIBPEPDATATYPES_CRLF_HH
|
Loading…
Reference in new issue