aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/kernels/initializable_lookup_table.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/core/kernels/initializable_lookup_table.cc')
-rw-r--r--tensorflow/core/kernels/initializable_lookup_table.cc41
1 files changed, 41 insertions, 0 deletions
diff --git a/tensorflow/core/kernels/initializable_lookup_table.cc b/tensorflow/core/kernels/initializable_lookup_table.cc
new file mode 100644
index 0000000000..7f8b070556
--- /dev/null
+++ b/tensorflow/core/kernels/initializable_lookup_table.cc
@@ -0,0 +1,41 @@
+#include "tensorflow/core/kernels/initializable_lookup_table.h"
+
+#include "tensorflow/core/lib/core/errors.h"
+
+namespace tensorflow {
+namespace lookup {
+
+Status InitializableLookupTable::Find(const Tensor& keys, Tensor* values,
+ const Tensor& default_value) {
+ if (!is_initialized()) {
+ return errors::FailedPrecondition("Table not initialized.");
+ }
+ TF_RETURN_IF_ERROR(CheckFindArguments(keys, *values, default_value));
+ return DoFind(keys, values, default_value);
+}
+
+Status InitializableLookupTable::Initialize(InitTableIterator& iter) {
+ if (!iter.Valid()) {
+ return iter.status();
+ }
+ TF_RETURN_IF_ERROR(CheckKeyAndValueTensors(iter.keys(), iter.values()));
+
+ mutex_lock l(mu_);
+ if (is_initialized()) {
+ return errors::FailedPrecondition("Table already initialized.");
+ }
+
+ TF_RETURN_IF_ERROR(DoPrepare(iter.total_size()));
+ while (iter.Valid()) {
+ TF_RETURN_IF_ERROR(DoInsert(iter.keys(), iter.values()));
+ iter.Next();
+ }
+ if (!errors::IsOutOfRange(iter.status())) {
+ return iter.status();
+ }
+ is_initialized_ = true;
+ return Status::OK();
+}
+
+} // namespace lookup
+} // namespace tensorflow