2#ifndef COOLPROP_STRINGS_H
3#define COOLPROP_STRINGS_H
10# ifndef FMT_HEADER_ONLY
11# define FMT_HEADER_ONLY
13# include "fmt/format.h"
14# include "fmt/printf.h"
15# undef FMT_HEADER_ONLY
23#if !defined(__powerpc__)
27 ws = std::wstring(s.begin(), s.end());
33#ifdef HAS_MOVE_SEMANTICS
35inline std::string&
strlstrip(std::string& s) {
36 s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace))));
41 s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](
unsigned char ch) { return !std::isspace(ch); }));
46#ifdef HAS_MOVE_SEMANTICS
48inline std::string&
strrstrip(std::string& s) {
49 s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
54 s.erase(std::find_if(s.rbegin(), s.rend(), [](
unsigned char ch) { return !std::isspace(ch); }).base(), s.end());
63inline bool endswith(
const std::string& s1,
const std::string& s2) {
65 if (s2.size() > s1.size()) {
68 long lhs =
static_cast<long>(s1.rfind(s2));
69 long rhs =
static_cast<long>(s1.size()) -
static_cast<long>(s2.size());
75inline std::string
format(
const char* fmt, ...);
76#elif FMT_VERSION >= 50000
77template <
typename... Args>
78inline std::string
format(
const char* format_str,
const Args&... args) {
79 return fmt::sprintf(format_str, args...);
83 return fmt::sprintf(
format, args);
85FMT_VARIADIC(std::string,
format,
const char*)
89std::vector<std::string>
strsplit(
const std::string& s,
char del);
91inline std::string
upper(std::string str) {
92 std::transform(str.begin(), str.end(), str.begin(), ::toupper);
96inline std::string
lower(std::string str) {
97 std::transform(str.begin(), str.end(), str.begin(), ::tolower);
101std::string
strjoin(
const std::vector<std::string>& strings,
const std::string& delim);
105 return s.find(other) == 0;
117 if (mys.find(
'D') != std::string::npos) {
118 std::size_t pos = mys.find(
'D'), len = 1;
119 mys.replace(pos, len,
"e");
122 if (mys.find(
'd') != std::string::npos) {
123 std::size_t pos = mys.find(
'd'), len = 1;
124 mys.replace(pos, len,
"e");
127 const char* cs = mys.c_str();
129 double val = strtod(cs, &pEnd);
130 if ((pEnd - &(cs[0])) !=
static_cast<int>(s.size())) {