aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/graph/tensor_id.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/core/graph/tensor_id.cc')
-rw-r--r--tensorflow/core/graph/tensor_id.cc41
1 files changed, 41 insertions, 0 deletions
diff --git a/tensorflow/core/graph/tensor_id.cc b/tensorflow/core/graph/tensor_id.cc
new file mode 100644
index 0000000000..f789110ff3
--- /dev/null
+++ b/tensorflow/core/graph/tensor_id.cc
@@ -0,0 +1,41 @@
+#include "tensorflow/core/graph/tensor_id.h"
+
+#include <string>
+
+#include "tensorflow/core/lib/core/stringpiece.h"
+
+namespace tensorflow {
+
+TensorId ParseTensorName(const string& name) {
+ return ParseTensorName(StringPiece(name.data(), name.size()));
+}
+
+TensorId ParseTensorName(StringPiece name) {
+ // Parse either a name, or a name:digits. To do so, we go backwards
+ // from the end of the string, skipping over a run of digits. If
+ // we hit a ':' character, then we know we are in the 'name:digits'
+ // regime. Otherwise, the output index is implicitly 0, and the whole
+ // name string forms the first part of the tensor name.
+ //
+ // Equivalent to matching with this regexp: ([^:]+):(\\d+)
+ const char* base = name.data();
+ const char* p = base + name.size() - 1;
+ int index = 0;
+ int mul = 1;
+ while (p > base && (*p >= '0' && *p <= '9')) {
+ index += ((*p - '0') * mul);
+ mul *= 10;
+ p--;
+ }
+ TensorId id;
+ if (p > base && *p == ':' && mul > 1) {
+ id.first = StringPiece(base, p - base);
+ id.second = index;
+ } else {
+ id.first = name;
+ id.second = 0;
+ }
+ return id;
+}
+
+} // namespace tensorflow