28 #ifndef YB_INC_YSTDEX_STRING_HPP_
29 #define YB_INC_YSTDEX_STRING_HPP_ 1
45 template<
typename _tString>
48 typedef typename std::remove_reference<_tString>::type
string_type;
68 template<
class _tString>
73 return str.erase(0, str.find_first_not_of(t));
81 template<
class _tString>
86 return str.erase(str.find_last_not_of(t) + 1);
94 template<
class _tString>
109 template<
typename _tString>
111 get_mid(
const _tString& str,
typename _tString::size_type l = 1)
113 yassume(!(str.size() < l * 2));
115 return str.substr(l, str.size() - l * 2);
117 template<
typename _tString>
119 get_mid(
const _tString& str,
typename _tString::size_type l,
120 typename _tString::size_type r)
122 yassume(!(str.size() < l + r));
124 return str.substr(l, str.size() - l - r);
133 template<
typename _fPred,
typename _fInsert,
typename _tIn>
135 split(_tIn b, _tIn e, _fPred is_delim, _fInsert insert)
141 if(is_delim(*b) && i != b)
157 template<
typename _fPred,
typename _fInsert,
typename _tRange>
159 split(_tRange&& c, _fPred is_delim, _fInsert insert)
181 template<
typename _type>
184 std::enable_if<std::is_enum<_type>::value,
int>::type = 0)
189 return to_string(
typename std::underlying_type<_type>::type(val));
200 template<
typename _tChar>
201 std::basic_string<_tChar>
208 std::string str(static_cast<size_t>(std::vsnprintf(
nullptr, 0, fmt, args)),
211 std::vsprintf(&str[0], fmt, args);
222 #if defined _WIN32 && !defined __USE_MINGW_ANSI_STDIO
223 YB_ATTR(format (ms_printf, 1, 2))