diff options
| author | KunoiSayami <[email protected]> | 2021-11-09 22:00:01 +0800 |
|---|---|---|
| committer | KunoiSayami <[email protected]> | 2021-11-09 22:00:01 +0800 |
| commit | 9907b61c574baf0747747f1c512f7cdd88ebed25 (patch) | |
| tree | 358acb09ff8d7b0589a63b8a810e6082046877fe /util/status.cc | |
init
Diffstat (limited to 'util/status.cc')
| -rw-r--r-- | util/status.cc | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/util/status.cc b/util/status.cc new file mode 100644 index 0000000..0559f5b --- /dev/null +++ b/util/status.cc @@ -0,0 +1,77 @@ +// 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. + +#include "leveldb/status.h" + +#include <cstdio> + +#include "port/port.h" + +namespace leveldb { + +const char* Status::CopyState(const char* state) { + uint32_t size; + std::memcpy(&size, state, sizeof(size)); + char* result = new char[size + 5]; + std::memcpy(result, state, size + 5); + return result; +} + +Status::Status(Code code, const Slice& msg, const Slice& msg2) { + assert(code != kOk); + const uint32_t len1 = static_cast<uint32_t>(msg.size()); + const uint32_t len2 = static_cast<uint32_t>(msg2.size()); + const uint32_t size = len1 + (len2 ? (2 + len2) : 0); + char* result = new char[size + 5]; + std::memcpy(result, &size, sizeof(size)); + result[4] = static_cast<char>(code); + std::memcpy(result + 5, msg.data(), len1); + if (len2) { + result[5 + len1] = ':'; + result[6 + len1] = ' '; + std::memcpy(result + 7 + len1, msg2.data(), len2); + } + state_ = result; +} + +std::string Status::ToString() const { + if (state_ == nullptr) { + return "OK"; + } else { + char tmp[30]; + const char* type; + switch (code()) { + case kOk: + type = "OK"; + break; + case kNotFound: + type = "NotFound: "; + break; + case kCorruption: + type = "Corruption: "; + break; + case kNotSupported: + type = "Not implemented: "; + break; + case kInvalidArgument: + type = "Invalid argument: "; + break; + case kIOError: + type = "IO error: "; + break; + default: + std::snprintf(tmp, sizeof(tmp), + "Unknown code(%d): ", static_cast<int>(code())); + type = tmp; + break; + } + std::string result(type); + uint32_t length; + std::memcpy(&length, state_, sizeof(length)); + result.append(state_ + 5, length); + return result; + } +} + +} // namespace leveldb |
