aboutsummaryrefslogtreecommitdiff
path: root/tensorflow/lite/testing/nnapi_tflite_zip_tests/split.h
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/lite/testing/nnapi_tflite_zip_tests/split.h')
-rw-r--r--tensorflow/lite/testing/nnapi_tflite_zip_tests/split.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/tensorflow/lite/testing/nnapi_tflite_zip_tests/split.h b/tensorflow/lite/testing/nnapi_tflite_zip_tests/split.h
new file mode 100644
index 00000000000..cdb53817d43
--- /dev/null
+++ b/tensorflow/lite/testing/nnapi_tflite_zip_tests/split.h
@@ -0,0 +1,99 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+==============================================================================*/
+// NOTE: this is a Android version of the file with the same name in parent folder.
+// The main difference is the removal of absl, re2 and tensorflow core dependencies.
+
+#ifndef TENSORFLOW_LITE_TESTING_ANDROID_SPLIT_H_
+#define TENSORFLOW_LITE_TESTING_ANDROID_SPLIT_H_
+
+#include <cstdlib>
+#include <string>
+#include <utility>
+#include <vector>
+#include "tensorflow/lite/string_tflite.h"
+
+namespace tflite {
+namespace testing {
+
+// Splits a string based on the given delimiter string. Each pair in the
+// returned vector has the start and past-the-end positions for each of the
+// parts of the original string. Empty fields are not represented in the
+// output.
+std::vector<std::pair<size_t, size_t>> SplitToPos(const string& s,
+ const string& delimiter);
+
+// Splits the given string and converts each part to the given T.
+template <typename T>
+std::vector<T> Split(const string& s, const string& delimiter);
+
+template <>
+inline std::vector<string> Split(const string& s, const string& delimiter) {
+ std::vector<string> fields;
+ for (const auto& p : SplitToPos(s, delimiter)) {
+ fields.push_back(s.substr(p.first, p.second - p.first));
+ }
+ return fields;
+}
+
+template <>
+inline std::vector<int> Split(const string& s, const string& delimiter) {
+ std::vector<int> fields;
+ for (const auto& p : SplitToPos(s, delimiter)) {
+ fields.push_back(strtol(s.data() + p.first, nullptr, 10));
+ }
+ return fields;
+}
+
+template <>
+inline std::vector<int64_t> Split(const string& s, const string& delimiter) {
+ std::vector<int64_t> fields;
+ for (const auto& p : SplitToPos(s, delimiter)) {
+ fields.push_back(strtoll(s.data() + p.first, nullptr, 10));
+ }
+ return fields;
+}
+
+template <>
+inline std::vector<float> Split(const string& s, const string& delimiter) {
+ std::vector<float> fields;
+ for (const auto& p : SplitToPos(s, delimiter)) {
+ fields.push_back(strtod(s.data() + p.first, nullptr));
+ }
+ return fields;
+}
+
+template <>
+inline std::vector<uint8_t> Split(const string& s, const string& delimiter) {
+ std::vector<uint8_t> fields;
+ for (const auto& p : SplitToPos(s, delimiter)) {
+ fields.push_back(strtol(s.data() + p.first, nullptr, 10));
+ }
+ return fields;
+}
+
+template <>
+inline std::vector<bool> Split(const string& s, const string& delimiter) {
+ std::vector<bool> fields;
+ for (const auto& p : SplitToPos(s, delimiter)) {
+ fields.push_back(
+ static_cast<bool>(strtol(s.data() + p.first, nullptr, 10)));
+ }
+ return fields;
+}
+
+} // namespace testing
+} // namespace tflite
+
+#endif // TENSORFLOW_LITE_TESTING_ANDROID_SPLIT_H_