summaryrefslogtreecommitdiff
path: root/chromium/net/tools/balsa/split.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/tools/balsa/split.cc')
-rw-r--r--chromium/net/tools/balsa/split.cc72
1 files changed, 72 insertions, 0 deletions
diff --git a/chromium/net/tools/balsa/split.cc b/chromium/net/tools/balsa/split.cc
new file mode 100644
index 00000000000..20be430d731
--- /dev/null
+++ b/chromium/net/tools/balsa/split.cc
@@ -0,0 +1,72 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/tools/balsa/split.h"
+
+#include <string.h>
+
+#include <vector>
+
+#include "base/strings/string_piece.h"
+
+namespace net {
+
+// Yea, this could be done with less code duplication using
+// template magic, I know.
+void SplitStringPieceToVector(const base::StringPiece& full,
+ const char* delim,
+ std::vector<base::StringPiece>* vec,
+ bool omit_empty_strings) {
+ vec->clear();
+ if (full.empty() || delim[0] == '\0')
+ return;
+
+ if (delim[1] == '\0') {
+ base::StringPiece::const_iterator s = full.begin();
+ base::StringPiece::const_iterator e = s;
+ for (;e != full.end(); ++e) {
+ if (*e == delim[0]) {
+ if (e != s || !omit_empty_strings) {
+ vec->push_back(base::StringPiece(s, e - s));
+ }
+ s = e;
+ ++s;
+ }
+ }
+ if (s != e) {
+ --e;
+ if (e != s || !omit_empty_strings) {
+ vec->push_back(base::StringPiece(s, e - s));
+ }
+ }
+ } else {
+ base::StringPiece::const_iterator s = full.begin();
+ base::StringPiece::const_iterator e = s;
+ for (;e != full.end(); ++e) {
+ bool one_matched = false;
+ for (const char *d = delim; *d != '\0'; ++d) {
+ if (*d == *e) {
+ one_matched = true;
+ break;
+ }
+ }
+ if (one_matched) {
+ if (e != s || !omit_empty_strings) {
+ vec->push_back(base::StringPiece(s, e - s));
+ }
+ s = e;
+ ++s;
+ }
+ }
+ if (s != e) {
+ --e;
+ if (e != s || !omit_empty_strings) {
+ vec->push_back(base::StringPiece(s, e - s));
+ }
+ }
+ }
+}
+
+} // namespace net
+