- add sources.
[platform/framework/web/crosswalk.git] / src / net / tools / balsa / split.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/tools/balsa/split.h"
6
7 #include <string.h>
8
9 #include <vector>
10
11 #include "base/strings/string_piece.h"
12
13 namespace net {
14
15 // Yea, this could be done with less code duplication using
16 // template magic, I know.
17 void SplitStringPieceToVector(const base::StringPiece& full,
18                               const char* delim,
19                               std::vector<base::StringPiece>* vec,
20                               bool omit_empty_strings) {
21   vec->clear();
22   if (full.empty() || delim[0] == '\0')
23     return;
24
25   if (delim[1] == '\0') {
26     base::StringPiece::const_iterator s = full.begin();
27     base::StringPiece::const_iterator e = s;
28     for (;e != full.end(); ++e) {
29       if (*e == delim[0]) {
30         if (e != s || !omit_empty_strings) {
31           vec->push_back(base::StringPiece(s, e - s));
32         }
33         s = e;
34         ++s;
35       }
36     }
37     if (s != e) {
38       --e;
39       if (e != s || !omit_empty_strings) {
40         vec->push_back(base::StringPiece(s, e - s));
41       }
42     }
43   } else {
44     base::StringPiece::const_iterator s = full.begin();
45     base::StringPiece::const_iterator e = s;
46     for (;e != full.end(); ++e) {
47       bool one_matched = false;
48       for (const char *d = delim; *d != '\0'; ++d) {
49         if (*d == *e) {
50           one_matched = true;
51           break;
52         }
53       }
54       if (one_matched) {
55         if (e != s || !omit_empty_strings) {
56           vec->push_back(base::StringPiece(s, e - s));
57         }
58         s = e;
59         ++s;
60       }
61     }
62     if (s != e) {
63       --e;
64       if (e != s || !omit_empty_strings) {
65         vec->push_back(base::StringPiece(s, e - s));
66       }
67     }
68   }
69 }
70
71 }  // namespace net
72