diff options
Diffstat (limited to 'tensorflow/lite/testing/nnapi_tflite_zip_tests/split.h')
-rw-r--r-- | tensorflow/lite/testing/nnapi_tflite_zip_tests/split.h | 99 |
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_ |