aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/kernels/lookup_table_op.h
diff options
context:
space:
mode:
authorGravatar A. Unique TensorFlower <gardener@tensorflow.org>2018-04-23 15:56:12 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-04-23 15:59:06 -0700
commitbb4a80c92105426ccf20a98c4291a1a3f8499b54 (patch)
tree4ea1670905182d4bda5109dff1a1053e666fec4b /tensorflow/core/kernels/lookup_table_op.h
parentc8a1eeb98ca394d0330bead37b446bce998bb3d5 (diff)
Implement exporting the keys/values in a hash table.
PiperOrigin-RevId: 193999421
Diffstat (limited to 'tensorflow/core/kernels/lookup_table_op.h')
-rw-r--r--tensorflow/core/kernels/lookup_table_op.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/tensorflow/core/kernels/lookup_table_op.h b/tensorflow/core/kernels/lookup_table_op.h
index 29a0cc91fe..3977f16299 100644
--- a/tensorflow/core/kernels/lookup_table_op.h
+++ b/tensorflow/core/kernels/lookup_table_op.h
@@ -177,6 +177,30 @@ class HashTable : public InitializableLookupTable {
return table_ ? table_->size() : 0;
}
+ Status ExportValues(OpKernelContext* context) override {
+ if (!is_initialized_) {
+ return errors::Aborted("HashTable is not initialized.");
+ }
+
+ const int64 size = table_->size();
+
+ Tensor* keys;
+ Tensor* values;
+ TF_RETURN_IF_ERROR(
+ context->allocate_output("keys", TensorShape({size}), &keys));
+ TF_RETURN_IF_ERROR(
+ context->allocate_output("values", TensorShape({size}), &values));
+
+ auto keys_data = keys->flat<K>();
+ auto values_data = values->flat<V>();
+ int64 i = 0;
+ for (auto it = table_->begin(); it != table_->end(); ++it, ++i) {
+ keys_data(i) = it->first;
+ values_data(i) = it->second;
+ }
+ return Status::OK();
+ }
+
DataType key_dtype() const override { return DataTypeToEnum<K>::v(); }
DataType value_dtype() const override { return DataTypeToEnum<V>::v(); }