%PDF- %PDF-
| Direktori : /proc/thread-self/root/usr/lib/python3/dist-packages/pythran/pythonic/builtins/str/ |
| Current File : //proc/thread-self/root/usr/lib/python3/dist-packages/pythran/pythonic/builtins/str/split.hpp |
#ifndef PYTHONIC_BUILTIN_STR_SPLIT_HPP
#define PYTHONIC_BUILTIN_STR_SPLIT_HPP
#include "pythonic/include/builtins/str/split.hpp"
#include "pythonic/builtins/str/strip.hpp"
#include "pythonic/types/list.hpp"
#include "pythonic/types/NoneType.hpp"
#include "pythonic/types/str.hpp"
#include "pythonic/utils/functor.hpp"
PYTHONIC_NS_BEGIN
namespace builtins
{
namespace str
{
types::list<types::str> split(types::str const &in, types::str const &sep,
long maxsplit)
{
types::str s = strip(in);
types::list<types::str> res(0);
if (s.empty())
return res;
size_t current = 0;
size_t next = 0;
long numsplit = 0;
while (next != types::str::npos &&
(numsplit++ < maxsplit || maxsplit == -1)) {
next = s.find_first_of(sep, current);
res.push_back(s.substr(current, next - current));
current = next + 1;
}
if (next != types::str::npos) {
current = next + 1;
res.push_back(s.substr(current, s.size() - current));
}
return res;
}
types::list<types::str> split(types::str const &in,
types::none_type const &, long maxsplit)
{
types::str s = strip(in);
types::list<types::str> res(0);
if (s.empty())
return res;
size_t current = 0;
size_t next = 0;
long numsplit = 0;
while (next != types::str::npos &&
(numsplit++ < maxsplit || maxsplit == -1)) {
next = s.find_first_of(" \n\r\t", current);
// from the pydoc, we skip any blank list
size_t end = s.find_first_not_of(" \n\r\t", next);
res.push_back(s.substr(current, next - current));
current = end;
}
if (next != types::str::npos) {
current = next + 1;
res.push_back(s.substr(current, s.size() - current));
}
return res;
}
}
}
PYTHONIC_NS_END
#endif