Feathercoin  0.5.0
P2P Digital Currency
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
status.h
Go to the documentation of this file.
1 // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. See the AUTHORS file for names of contributors.
4 //
5 // A Status encapsulates the result of an operation. It may indicate success,
6 // or it may indicate an error with an associated error message.
7 //
8 // Multiple threads can invoke const methods on a Status without
9 // external synchronization, but if any of the threads may call a
10 // non-const method, all threads accessing the same Status must use
11 // external synchronization.
12 
13 #ifndef STORAGE_LEVELDB_INCLUDE_STATUS_H_
14 #define STORAGE_LEVELDB_INCLUDE_STATUS_H_
15 
16 #include <string>
17 #include "leveldb/slice.h"
18 
19 namespace leveldb {
20 
21 class Status {
22  public:
23  // Create a success status.
24  Status() : state_(NULL) { }
25  ~Status() { delete[] state_; }
26 
27  // Copy the specified status.
28  Status(const Status& s);
29  void operator=(const Status& s);
30 
31  // Return a success status.
32  static Status OK() { return Status(); }
33 
34  // Return error status of an appropriate type.
35  static Status NotFound(const Slice& msg, const Slice& msg2 = Slice()) {
36  return Status(kNotFound, msg, msg2);
37  }
38  static Status Corruption(const Slice& msg, const Slice& msg2 = Slice()) {
39  return Status(kCorruption, msg, msg2);
40  }
41  static Status NotSupported(const Slice& msg, const Slice& msg2 = Slice()) {
42  return Status(kNotSupported, msg, msg2);
43  }
44  static Status InvalidArgument(const Slice& msg, const Slice& msg2 = Slice()) {
45  return Status(kInvalidArgument, msg, msg2);
46  }
47  static Status IOError(const Slice& msg, const Slice& msg2 = Slice()) {
48  return Status(kIOError, msg, msg2);
49  }
50 
51  // Returns true iff the status indicates success.
52  bool ok() const { return (state_ == NULL); }
53 
54  // Returns true iff the status indicates a NotFound error.
55  bool IsNotFound() const { return code() == kNotFound; }
56 
57  // Returns true iff the status indicates a Corruption error.
58  bool IsCorruption() const { return code() == kCorruption; }
59 
60  // Returns true iff the status indicates an IOError.
61  bool IsIOError() const { return code() == kIOError; }
62 
63  // Return a string representation of this status suitable for printing.
64  // Returns the string "OK" for success.
65  std::string ToString() const;
66 
67  private:
68  // OK status has a NULL state_. Otherwise, state_ is a new[] array
69  // of the following form:
70  // state_[0..3] == length of message
71  // state_[4] == code
72  // state_[5..] == message
73  const char* state_;
74 
75  enum Code {
76  kOk = 0,
77  kNotFound = 1,
82  };
83 
84  Code code() const {
85  return (state_ == NULL) ? kOk : static_cast<Code>(state_[4]);
86  }
87 
88  Status(Code code, const Slice& msg, const Slice& msg2);
89  static const char* CopyState(const char* s);
90 };
91 
92 inline Status::Status(const Status& s) {
93  state_ = (s.state_ == NULL) ? NULL : CopyState(s.state_);
94 }
95 inline void Status::operator=(const Status& s) {
96  // The following condition catches both aliasing (when this == &s),
97  // and the common case where both s and *this are ok.
98  if (state_ != s.state_) {
99  delete[] state_;
100  state_ = (s.state_ == NULL) ? NULL : CopyState(s.state_);
101  }
102 }
103 
104 } // namespace leveldb
105 
106 #endif // STORAGE_LEVELDB_INCLUDE_STATUS_H_
static Status NotSupported(const Slice &msg, const Slice &msg2=Slice())
Definition: status.h:41
static Status Corruption(const Slice &msg, const Slice &msg2=Slice())
Definition: status.h:38
static Status OK()
Definition: status.h:32
static const char * CopyState(const char *s)
Definition: status.cc:11
static Status InvalidArgument(const Slice &msg, const Slice &msg2=Slice())
Definition: status.h:44
void operator=(const Status &s)
Definition: status.h:95
static Status NotFound(const Slice &msg, const Slice &msg2=Slice())
Definition: status.h:35
bool IsIOError() const
Definition: status.h:61
Code code() const
Definition: status.h:84
bool IsCorruption() const
Definition: status.h:58
bool IsNotFound() const
Definition: status.h:55
bool ok() const
Definition: status.h:52
const char * state_
Definition: status.h:73
static Status IOError(const Slice &msg, const Slice &msg2=Slice())
Definition: status.h:47
std::string ToString() const
Definition: status.cc:36