Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marian-nmt/sentencepiece.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTaku Kudo <taku@google.com>2018-04-28 20:50:07 +0300
committerTaku Kudo <taku@google.com>2018-04-28 20:50:07 +0300
commitd16531bfb866e2fca246a36316876b934aa427f7 (patch)
tree0215e1b3555b02363b17d425b3c94200d92cb6fd /src/error.cc
parentbaf5d7a2995018ede996173cdf0febcdf23cba2d (diff)
Uses util::Status to propagate error messages
Diffstat (limited to 'src/error.cc')
-rw-r--r--src/error.cc109
1 files changed, 109 insertions, 0 deletions
diff --git a/src/error.cc b/src/error.cc
index a3e57cb..b9787b3 100644
--- a/src/error.cc
+++ b/src/error.cc
@@ -14,10 +14,119 @@
#include <cstring>
#include "common.h"
+#include "sentencepiece_processor.h"
namespace sentencepiece {
namespace error {
jmp_buf gTestJmp;
bool gTestMode = false;
} // namespace error
+
+namespace util {
+
+Status::Status() {}
+Status::~Status() {}
+
+struct Status::Rep {
+ error::Code code;
+ std::string error_message;
+};
+
+Status::Status(error::Code code, const char* error_message) : rep_(new Rep) {
+ rep_->code = code;
+ rep_->error_message = error_message;
+}
+
+Status::Status(error::Code code, const std::string& error_message)
+ : rep_(new Rep) {
+ rep_->code = code;
+ rep_->error_message = error_message;
+}
+
+Status::Status(const Status& s)
+ : rep_((s.rep_ == nullptr) ? nullptr : new Rep(*s.rep_)) {}
+
+void Status::operator=(const Status& s) {
+ if (rep_ != s.rep_)
+ rep_.reset((s.rep_ == nullptr) ? nullptr : new Rep(*s.rep_));
+}
+
+bool Status::operator==(const Status& s) const { return (rep_ == s.rep_); }
+
+bool Status::operator!=(const Status& s) const { return (rep_ != s.rep_); }
+
+const char* Status::error_message() const {
+ return ok() ? "" : rep_->error_message.c_str();
+}
+
+error::Code Status::code() const { return ok() ? error::OK : rep_->code; }
+
+std::string Status::ToString() const {
+ if (rep_ == nullptr) return "OK";
+
+ std::string result;
+ switch (code()) {
+ case error::CANCELLED:
+ result = "Cancelled";
+ break;
+ case error::UNKNOWN:
+ result = "Unknown";
+ break;
+ case error::INVALID_ARGUMENT:
+ result = "Invalid argument";
+ break;
+ case error::DEADLINE_EXCEEDED:
+ result = "Deadline exceeded";
+ break;
+ case error::NOT_FOUND:
+ result = "Not found";
+ break;
+ case error::ALREADY_EXISTS:
+ result = "Already exists";
+ break;
+ case error::PERMISSION_DENIED:
+ result = "Permission denied";
+ break;
+ case error::UNAUTHENTICATED:
+ result = "Unauthenticated";
+ break;
+ case error::RESOURCE_EXHAUSTED:
+ result = "Resource exhausted";
+ break;
+ case error::FAILED_PRECONDITION:
+ result = "Failed precondition";
+ break;
+ case error::ABORTED:
+ result = "Aborted";
+ break;
+ case error::OUT_OF_RANGE:
+ result = "Out of range";
+ break;
+ case error::UNIMPLEMENTED:
+ result = "Unimplemented";
+ break;
+ case error::INTERNAL:
+ result = "Internal";
+ break;
+ case error::UNAVAILABLE:
+ result = "Unavailable";
+ break;
+ case error::DATA_LOSS:
+ result = "Data loss";
+ break;
+ default:
+ result = "Unkown code:";
+ break;
+ }
+
+ result += ": ";
+ result += rep_->error_message;
+ return result;
+}
+
+void Status::IgnoreError() {}
+
+Status OkStatus() { return Status(); }
+
+} // namespace util
} // namespace sentencepiece