// 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 #include "port/port.h" #include "leveldb/status.h" namespace leveldb { Status::Status(Code code, const Slice& msg, const Slice& msg2) { assert(code != kOk); state_ = new State(make_pair(code, std::string(msg.data(), msg.size()))); if (!msg2.empty()) { state_->second.append(": "); state_->second.append(msg2.data(), msg2.size()); } } std::string Status::ToString() const { if (state_ == NULL) { return "OK"; } else { char tmp[30]; const char* type; switch (state_->first) { 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: snprintf(tmp, sizeof(tmp), "Unknown code(%d): ", static_cast(state_->first)); type = tmp; break; } std::string result(type); if (!state_->second.empty()) { result.append(state_->second); } return result; } } }