Commit 2f11444c authored by Dominik Charousset's avatar Dominik Charousset

Make string algorithms header-only

parent 09b43ffc
......@@ -73,7 +73,6 @@ set (LIBCAF_CORE_SRCS
src/shared_spinlock.cpp
src/shutdown.cpp
src/singletons.cpp
src/string_algorithms.cpp
src/string_serialization.cpp
src/sync_request_bouncer.cpp
src/try_match.cpp
......
......@@ -40,10 +40,24 @@ inline std::string is_any_of(std::string arg) {
constexpr bool token_compress_on = false;
void split(std::vector<std::string>& result,
const std::string& str,
const std::string& delimiters = " ",
bool keep_empties = true);
template <class Container, class Delim>
void split(Container& result, const std::string& str, const Delim& delims,
bool keep_all = true) {
size_t pos = 0;
size_t prev = 0;
while ((pos = str.find_first_of(delims, prev)) != std::string::npos) {
if (pos > prev) {
auto substr = str.substr(prev, pos - prev);
if (! substr.empty() || keep_all) {
result.push_back(std::move(substr));
}
}
prev = pos + 1;
}
if (prev < str.size()) {
result.push_back(str.substr(prev, std::string::npos));
}
}
template <class Iterator>
class iterator_range {
......
/******************************************************************************
* ____ _ _____ *
* / ___| / \ | ___| C++ *
* | | / _ \ | |_ Actor *
* | |___ / ___ \| _| Framework *
* \____/_/ \_|_| *
* *
* Copyright (C) 2011 - 2015 *
* Dominik Charousset <dominik.charousset (at) haw-hamburg.de> *
* *
* Distributed under the terms and conditions of the BSD 3-Clause License or *
* (at your option) under the terms and conditions of the Boost Software *
* License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. *
* *
* If you did not receive a copy of the license files, see *
* http://opensource.org/licenses/BSD-3-Clause and *
* http://www.boost.org/LICENSE_1_0.txt. *
******************************************************************************/
#include <sstream>
#include "caf/string_algorithms.hpp"
using std::string;
using std::vector;
namespace caf {
void split(vector<string>& result, const string& str, const string& delims,
bool keep_all) {
size_t pos = 0;
size_t prev = 0;
while ((pos = str.find_first_of(delims, prev)) != string::npos) {
if (pos > prev) {
auto substr = str.substr(prev, pos - prev);
if (! substr.empty() || keep_all) {
result.push_back(std::move(substr));
}
}
prev = pos + 1;
}
if (prev < str.size()) {
result.push_back(str.substr(prev, string::npos));
}
}
} // namespace caf
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment