aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/c/c_api.cc
diff options
context:
space:
mode:
authorGravatar Igor Ganichev <iga@google.com>2017-08-30 21:05:14 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2017-08-30 21:08:53 -0700
commit9624d165f1f2c717eda96464fee8bf7229cc14f5 (patch)
tree8024d708b58b0c78f19d4c3cfc9f7c4b0c24b70c /tensorflow/c/c_api.cc
parent424aa9aa9559f6fa29d8ccf3d74ff25528b39209 (diff)
Add function support to Tensorflow C API
This change adds minimal functionality. Support for FunctionOptions, attributes, output name rewriting, function name generation, etc is comming next. PiperOrigin-RevId: 167091238
Diffstat (limited to 'tensorflow/c/c_api.cc')
-rw-r--r--tensorflow/c/c_api.cc37
1 files changed, 21 insertions, 16 deletions
diff --git a/tensorflow/c/c_api.cc b/tensorflow/c/c_api.cc
index 07c8277a6f..c454c94249 100644
--- a/tensorflow/c/c_api.cc
+++ b/tensorflow/c/c_api.cc
@@ -165,22 +165,6 @@ void deallocate_buffer(void* data, size_t len, void* arg) {
tensorflow::cpu_allocator()->DeallocateRaw(data);
}
-Status MessageToBuffer(const tensorflow::protobuf::Message& in,
- TF_Buffer* out) {
- if (out->data != nullptr) {
- return InvalidArgument("Passing non-empty TF_Buffer is invalid.");
- }
- const auto proto_size = in.ByteSizeLong();
- void* buf = tensorflow::port::Malloc(proto_size);
- in.SerializeToArray(buf, proto_size);
- out->data = buf;
- out->length = proto_size;
- out->data_deallocator = [](void* data, size_t length) {
- tensorflow::port::Free(data);
- };
- return Status::OK();
-}
-
} // namespace
TF_Tensor::~TF_Tensor() { buffer->Unref(); }
@@ -559,6 +543,27 @@ TF_Tensor* TF_TensorFromTensor(const tensorflow::Tensor& src,
dimvec.size(), base, size, DeleteArray, base);
}
+Status MessageToBuffer(const tensorflow::protobuf::Message& in,
+ TF_Buffer* out) {
+ if (out->data != nullptr) {
+ return InvalidArgument("Passing non-empty TF_Buffer is invalid.");
+ }
+ const size_t proto_size = in.ByteSizeLong();
+ void* buf = tensorflow::port::Malloc(proto_size);
+ if (buf == nullptr) {
+ return tensorflow::errors::ResourceExhausted(
+ "Failed to allocate memory to serialize message of type '",
+ in.GetTypeName(), "' and size ", proto_size);
+ }
+ in.SerializeToArray(buf, proto_size);
+ out->data = buf;
+ out->length = proto_size;
+ out->data_deallocator = [](void* data, size_t length) {
+ tensorflow::port::Free(data);
+ };
+ return Status::OK();
+}
+
// Helpers for loading a TensorFlow plugin (a .so file).
Status LoadLibrary(const char* library_filename, void** result,
const void** buf, size_t* len);