Berkeley SfM
tokenize.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 - Erik Nelson
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17  *
18  */
19 
20 #ifndef UTILS_STRINGS_TOKENIZE_H
21 #define UTILS_STRINGS_TOKENIZE_H
22 
23 #include <string>
24 #include <vector>
25 
26 namespace strings {
27 
28 // Tokenize a string. All chars in the delimiters string are considered.
29 inline void Tokenize(const std::string &string, const std::string &delimiters,
30  std::vector<std::string> *tokens) {
31  size_t prev = 0, next = 0;
32  while ((next = string.find_first_of(delimiters, prev)) != std::string::npos) {
33  if (next - prev != 0) {
34  tokens->push_back(string.substr(prev, next - prev));
35  }
36  prev = next + 1;
37  }
38 
39  if (prev < string.size()) {
40  tokens->push_back(string.substr(prev));
41  }
42 }
43 
44 // Tokenize using all elements in a vector of delimiters.
45 inline void Tokenize(const std::string &string,
46  const std::vector<char> &delimiters,
47  std::vector<std::string> *tokens) {
48  std::string delimiters_string;
49  for (const auto &element : delimiters)
50  delimiters_string.push_back(element);
51 
52  Tokenize(string, delimiters_string, tokens);
53 }
54 
55 // Tokenize with a single delimiter.
56 inline void Tokenize(const std::string &string, char delimiter,
57  std::vector<std::string> *tokens) {
58  std::string delimiter_string = { delimiter };
59  Tokenize(string, delimiter_string, tokens);
60 }
61 
62 } //\namespace strings
63 
64 #endif
void Tokenize(const std::string &string, const std::string &delimiters, std::vector< std::string > *tokens)
Definition: tokenize.h:29