/* Copyright 2024 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. ==============================================================================*/ // Util methods to store a an ordered collection of strings in a char buffer. // The format of the char buffer is: // [0, 3] 4 bytes: N, num of strings in the collection. // [(i+1)*4, (i+1)*4+3] 4 bytes: offset of i-th string in little endian, // for i from 0 to N-1. // [(N+1)*4, (N+1)*4+3] 4 bytes: length of the whole char buffer. // [offset(i), offset(i+1) - 1] : content of i-th string. // // A typical usage: // SimpleDynamicBuffer buf; // char* buffer; // # Add string "AB", string is stored in dynamic buffer. // buf.AddString("AB", 2); // # Write content of SimpleDynamicBuffer to buffer in format described above. // buf.WriteToBuffer(&buffer) #ifndef TENSORFLOW_COMPILER_MLIR_LITE_UTILS_STRING_UTILS_H_ #define TENSORFLOW_COMPILER_MLIR_LITE_UTILS_STRING_UTILS_H_ #include <stdint.h> #include <cstddef> #include <limits> #include <vector> namespace mlir::TFL { constexpr uint64_t kDefaultMaxLength = …; class SimpleDynamicBuffer { … }; // Convenient structure to store string pointer and length. Note that // methods on SimpleDynamicBuffer enforce that the whole buffer (and by // extension every contained string) is of max length (2ul << 30) - 1. See // string_util.cc for more info. StringRef; // Return num of strings in a String tensor. inline int GetStringCount(const void* raw_buffer) { … } // Get String pointer and length of index-th string in tensor. // NOTE: This will not create a copy of string data. inline StringRef GetString(const void* raw_buffer, int string_index) { … } } // namespace mlir::TFL #endif // TENSORFLOW_COMPILER_MLIR_LITE_UTILS_STRING_UTILS_H_