Fixed build (no include path was specified) #2513

This commit is contained in:
Alexey Milovidov 2018-06-16 05:31:41 +03:00
parent 4e8082a699
commit e4776e8b5d
2 changed files with 29 additions and 11 deletions

View File

@ -1,5 +1,5 @@
#include "StringUtils.h"
#include <boost/algorithm/string.hpp>
namespace detail
{
@ -15,10 +15,3 @@ bool endsWith(const std::string & s, const char * suffix, size_t suffix_size)
}
}
std::string trim(const std::string & str, const std::function<bool(char)> & predicate)
{
std::string trimmed = str;
boost::trim_if(trimmed, predicate);
return trimmed;
}

View File

@ -4,7 +4,6 @@
#include <cstring>
#include <cstddef>
#include <type_traits>
#include <functional>
namespace detail
@ -135,5 +134,31 @@ inline bool equalsCaseInsensitive(char a, char b)
}
/// Inefficient.
std::string trim(const std::string & str, const std::function<bool(char)> & predicate);
template <typename F>
std::string trim(const std::string & str, F && predicate)
{
size_t cut_front = 0;
size_t cut_back = 0;
size_t size = str.size();
for (size_t i = 0; i < size; ++i)
{
if (predicate(str[i]))
++cut_front;
else
break;
}
if (cut_front == size)
return {};
for (auto it = str.rbegin(); it != str.rend(); ++it)
{
if (predicate(*it))
++cut_back;
else
break;
}
return str.substr(cut_front, size - cut_front - cut_back);
}