rcpputils
master
C++ API providing common utilities and data structures.
include
rcpputils
split.hpp
Go to the documentation of this file.
1
// Copyright (c) 2019, Open Source Robotics Foundation, Inc.
2
// All rights reserved.
3
//
4
// Software License Agreement (BSD License 2.0)
5
//
6
// Redistribution and use in source and binary forms, with or without
7
// modification, are permitted provided that the following conditions
8
// are met:
9
//
10
// * Redistributions of source code must retain the above copyright
11
// notice, this list of conditions and the following disclaimer.
12
// * Redistributions in binary form must reproduce the above
13
// copyright notice, this list of conditions and the following
14
// disclaimer in the documentation and/or other materials provided
15
// with the distribution.
16
// * Neither the name of the copyright holders nor the names of its
17
// contributors may be used to endorse or promote products derived
18
// from this software without specific prior written permission.
19
//
20
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
// POSSIBILITY OF SUCH DAMAGE.
32
//
33
// This file is originally from:
34
// https://github.com/ros/pluginlib/blob/1a4de29fa55173e9b897ca8ff57ebc88c047e0b3/pluginlib/include/pluginlib/impl/split.hpp
35
40
#ifndef RCPPUTILS__SPLIT_HPP_
41
#define RCPPUTILS__SPLIT_HPP_
42
43
#include <iterator>
44
#include <sstream>
45
#include <string>
46
#include <vector>
47
48
namespace
rcpputils
49
{
50
52
60
template
<
61
class
InsertIterator,
62
typename
std::enable_if
<
63
std::is_same
<
64
InsertIterator &,
65
decltype(std::declval<InsertIterator>().
operator
=(std::declval<std::string>()))>::value
66
>::type * =
nullptr
>
67
void
68
split
(
const
std::string
& input,
char
delim, InsertIterator & it,
bool
skip_empty =
false
)
69
{
70
std::stringstream
ss;
71
ss.
str
(input);
72
std::string
item;
73
while
(
std::getline
(ss, item, delim)) {
74
if
(skip_empty && item ==
""
) {
75
continue
;
76
}
77
it = item;
78
}
79
}
80
82
90
inline
std::vector<std::string>
91
split
(
const
std::string
& input,
char
delim,
bool
skip_empty =
false
)
92
{
93
std::vector<std::string>
result;
94
auto
it =
std::back_inserter
(result);
95
split
(input, delim, it, skip_empty);
96
return
result;
97
}
98
}
// namespace rcpputils
99
100
#endif // RCPPUTILS__SPLIT_HPP_
std::is_same
std::string
rcpputils
Definition:
asserts.hpp:37
std::vector< std::string >
std::back_inserter
T back_inserter(T... args)
std::stringstream
std::enable_if
rcpputils::split
void split(const std::string &input, char delim, InsertIterator &it, bool skip_empty=false)
Split a specified input into tokens using a delimiter and a type erased insert iterator.
Definition:
split.hpp:68
std::getline
T getline(T... args)
std::stringstream::str
T str(T... args)
Generated by
1.8.17