aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/lib/core/status.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/core/lib/core/status.cc')
-rw-r--r--tensorflow/core/lib/core/status.cc107
1 files changed, 107 insertions, 0 deletions
diff --git a/tensorflow/core/lib/core/status.cc b/tensorflow/core/lib/core/status.cc
new file mode 100644
index 0000000000..24ce842560
--- /dev/null
+++ b/tensorflow/core/lib/core/status.cc
@@ -0,0 +1,107 @@
+#include "tensorflow/core/public/status.h"
+#include <stdio.h>
+
+namespace tensorflow {
+
+Status::Status(tensorflow::error::Code code, StringPiece msg) {
+ assert(code != tensorflow::error::OK);
+ state_ = new State;
+ state_->code = code;
+ state_->msg = msg.ToString();
+}
+Status::~Status() { delete state_; }
+
+void Status::Update(const Status& new_status) {
+ if (ok()) {
+ *this = new_status;
+ }
+}
+
+void Status::SlowCopyFrom(const State* src) {
+ delete state_;
+ if (src == nullptr) {
+ state_ = nullptr;
+ } else {
+ state_ = new State(*src);
+ }
+}
+
+const string& Status::empty_string() {
+ static string* empty = new string;
+ return *empty;
+}
+
+string Status::ToString() const {
+ if (state_ == NULL) {
+ return "OK";
+ } else {
+ char tmp[30];
+ const char* type;
+ switch (code()) {
+ case tensorflow::error::CANCELLED:
+ type = "Cancelled";
+ break;
+ case tensorflow::error::UNKNOWN:
+ type = "Unknown";
+ break;
+ case tensorflow::error::INVALID_ARGUMENT:
+ type = "Invalid argument";
+ break;
+ case tensorflow::error::DEADLINE_EXCEEDED:
+ type = "Deadline exceeded";
+ break;
+ case tensorflow::error::NOT_FOUND:
+ type = "Not found";
+ break;
+ case tensorflow::error::ALREADY_EXISTS:
+ type = "Already exists";
+ break;
+ case tensorflow::error::PERMISSION_DENIED:
+ type = "Permission denied";
+ break;
+ case tensorflow::error::UNAUTHENTICATED:
+ type = "Unauthenticated";
+ break;
+ case tensorflow::error::RESOURCE_EXHAUSTED:
+ type = "Resource exhausted";
+ break;
+ case tensorflow::error::FAILED_PRECONDITION:
+ type = "Failed precondition";
+ break;
+ case tensorflow::error::ABORTED:
+ type = "Aborted";
+ break;
+ case tensorflow::error::OUT_OF_RANGE:
+ type = "Out of range";
+ break;
+ case tensorflow::error::UNIMPLEMENTED:
+ type = "Unimplemented";
+ break;
+ case tensorflow::error::INTERNAL:
+ type = "Internal";
+ break;
+ case tensorflow::error::UNAVAILABLE:
+ type = "Unavailable";
+ break;
+ case tensorflow::error::DATA_LOSS:
+ type = "Data loss";
+ break;
+ default:
+ snprintf(tmp, sizeof(tmp), "Unknown code(%d)",
+ static_cast<int>(code()));
+ type = tmp;
+ break;
+ }
+ string result(type);
+ result += ": ";
+ result += state_->msg;
+ return result;
+ }
+}
+
+std::ostream& operator<<(std::ostream& os, const Status& x) {
+ os << x.ToString();
+ return os;
+}
+
+} // namespace tensorflow