summaryrefslogtreecommitdiff
path: root/include/leveldb/status.h
diff options
context:
space:
mode:
authorjorlow@chromium.org <jorlow@chromium.org@62dab493-f737-651d-591e-8d6aee1b9529>2011-03-30 18:49:03 +0000
committerjorlow@chromium.org <jorlow@chromium.org@62dab493-f737-651d-591e-8d6aee1b9529>2011-03-30 18:49:03 +0000
commit9e33808a26cbbb38008fcd10b74c4d05d78d0aa1 (patch)
treeaa5b999df95bf5949265ae55e167a82033a959d7 /include/leveldb/status.h
parent4671a695fca3a8fb00cdf4609cd8238cf12ed13d (diff)
downloadleveldb-9e33808a26cbbb38008fcd10b74c4d05d78d0aa1.tar.gz
Fix last commit
git-svn-id: https://leveldb.googlecode.com/svn/trunk@19 62dab493-f737-651d-591e-8d6aee1b9529
Diffstat (limited to 'include/leveldb/status.h')
-rw-r--r--include/leveldb/status.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/include/leveldb/status.h b/include/leveldb/status.h
new file mode 100644
index 0000000..47e3edf
--- /dev/null
+++ b/include/leveldb/status.h
@@ -0,0 +1,86 @@
+// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file. See the AUTHORS file for names of contributors.
+//
+// A Status encapsulates the result of an operation. It may indicate success,
+// or it may indicate an error with an associated error message.
+
+#ifndef STORAGE_LEVELDB_INCLUDE_STATUS_H_
+#define STORAGE_LEVELDB_INCLUDE_STATUS_H_
+
+#include <string>
+#include <utility>
+#include "leveldb/slice.h"
+
+namespace leveldb {
+
+class Status {
+ public:
+ // Create a success status.
+ Status() : state_(NULL) { }
+ ~Status() { delete state_; }
+
+ // Copy the specified status.
+ Status(const Status& s);
+ void operator=(const Status& s);
+
+ // Return a success status.
+ static Status OK() { return Status(); }
+
+ // Return error status of an appropriate type.
+ static Status NotFound(const Slice& msg, const Slice& msg2 = Slice()) {
+ return Status(kNotFound, msg, Slice());
+ }
+ static Status Corruption(const Slice& msg, const Slice& msg2 = Slice()) {
+ return Status(kCorruption, msg, msg2);
+ }
+ static Status NotSupported(const Slice& msg, const Slice& msg2 = Slice()) {
+ return Status(kNotSupported, msg, msg2);
+ }
+ static Status InvalidArgument(const Slice& msg, const Slice& msg2 = Slice()) {
+ return Status(kInvalidArgument, msg, msg2);
+ }
+ static Status IOError(const Slice& msg, const Slice& msg2 = Slice()) {
+ return Status(kIOError, msg, msg2);
+ }
+
+ // Returns true iff the status indicates success.
+ bool ok() const { return (state_ == NULL); }
+
+ // Returns true iff the status indicates a NotFound error.
+ bool IsNotFound() const { return code() == kNotFound; }
+
+ // Return a string representation of this status suitable for printing.
+ // Returns the string "OK" for success.
+ std::string ToString() const;
+
+ private:
+ enum Code {
+ kOk = 0,
+ kNotFound = 1,
+ kCorruption = 2,
+ kNotSupported = 3,
+ kInvalidArgument = 4,
+ kIOError = 5,
+ };
+ Code code() const { return (state_ == NULL) ? kOk : state_->first; }
+
+ Status(Code code, const Slice& msg, const Slice& msg2);
+
+ typedef std::pair<Code, std::string> State;
+ State* state_;
+};
+
+inline Status::Status(const Status& s) {
+ state_ = (s.state_ == NULL) ? NULL : new State(*s.state_);
+}
+inline void Status::operator=(const Status& s) {
+ if (this != &s) {
+ delete state_;
+ state_ = (s.state_ == NULL) ? NULL : new State(*s.state_);
+ }
+}
+
+}
+
+#endif // STORAGE_LEVELDB_INCLUDE_STATUS_H_