/* Copyright 2017 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.
|
==============================================================================*/
|
|
// This file provides general C++ utility functions in TFLite.
|
// For example: Converting between `TfLiteIntArray`, `std::vector` and
|
// Flatbuffer vectors. These functions can't live in `context.h` since it's pure
|
// C.
|
|
#ifndef TENSORFLOW_LITE_UTIL_H_
|
#define TENSORFLOW_LITE_UTIL_H_
|
|
#include <vector>
|
#include "tensorflow/lite/c/c_api_internal.h"
|
|
namespace tflite {
|
|
// The prefix of Flex op custom code.
|
// This will be matched agains the `custom_code` field in `OperatorCode`
|
// Flatbuffer Table.
|
// WARNING: This is an experimental API and subject to change.
|
constexpr char kFlexCustomCodePrefix[] = "Flex";
|
|
// Checks whether the prefix of the custom name indicates the operation is an
|
// Flex operation.
|
bool IsFlexOp(const char* custom_name);
|
|
// Converts a `std::vector` to a `TfLiteIntArray`. The caller takes ownership
|
// of the returned pointer.
|
TfLiteIntArray* ConvertVectorToTfLiteIntArray(const std::vector<int>& input);
|
|
// Converts an array (of the given size) to a `TfLiteIntArray`. The caller
|
// takes ownership of the returned pointer, and must make sure 'dims' has at
|
// least 'rank' elemnts.
|
TfLiteIntArray* ConvertArrayToTfLiteIntArray(const int rank, const int* dims);
|
|
// Checks whether a `TfLiteIntArray` and an int array have matching elements.
|
// The caller must guarantee that 'b' has at least 'b_size' elements.
|
bool EqualArrayAndTfLiteIntArray(const TfLiteIntArray* a, const int b_size,
|
const int* b);
|
|
size_t CombineHashes(std::initializer_list<size_t> hashes);
|
|
struct TfLiteIntArrayDeleter {
|
void operator()(TfLiteIntArray* a) {
|
if (a) TfLiteIntArrayFree(a);
|
}
|
};
|
|
} // namespace tflite
|
|
#endif // TENSORFLOW_LITE_UTIL_H_
|