logging

来源:互联网 发布:js级联菜单 编辑:程序博客网 时间:2024/05/19 00:39
// 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.//// Must not be included from any .h files to avoid polluting the namespace// with macros.#ifndef STORAGE_LEVELDB_UTIL_LOGGING_H_#define STORAGE_LEVELDB_UTIL_LOGGING_H_#include <stdio.h>#include <stdint.h>#include <string>#include "port/port.h"namespace leveldb {class Slice;class WritableFile;// Append a human-readable printout of "num" to *strextern void AppendNumberTo(std::string* str, uint64_t num);// Append a human-readable printout of "value" to *str.// Escapes any non-printable characters found in "value".extern void AppendEscapedStringTo(std::string* str, const Slice& value);// Return a human-readable printout of "num"extern std::string NumberToString(uint64_t num);// Return a human-readable version of "value".// Escapes any non-printable characters found in "value".extern std::string EscapeString(const Slice& value);// Parse a human-readable number from "*in" into *value.  On success,// advances "*in" past the consumed number and sets "*val" to the// numeric value.  Otherwise, returns false and leaves *in in an// unspecified state.extern bool ConsumeDecimalNumber(Slice* in, uint64_t* val);}  // namespace leveldb#endif  // STORAGE_LEVELDB_UTIL_LOGGING_H_
// 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 "util/logging.h"#include <errno.h>#include <stdarg.h>#include <stdio.h>#include <stdlib.h>#include "leveldb/env.h"#include "leveldb/slice.h"namespace leveldb{void AppendNumberTo(std::string* str, uint64_t num){char buf[30];snprintf(buf, sizeof(buf), "%llu", (unsigned long long) num);str->append(buf);}void AppendEscapedStringTo(std::string* str, const Slice& value){for ( size_t i = 0; i < value.size(); i++ ) {char c = value[i];if (c >= ' ' && c <= '~') {str->push_back( c );} else {char buf[10];snprintf( buf, sizeof(buf), "\\x%02x",static_cast<unsigned int>(c) & 0xff );str->append( buf );}}}std::string NumberToString(uint64_t num){std::string r;AppendNumberTo(&r, num);return r;}std::string EscapeString(const Slice& value){std::string r;AppendEscapedStringTo(&r, value);return r;}bool ConsumeDecimalNumberSlice* in, uint64_t* val ) {uint64_t v = 0;int digits = 0;while ( !in->empty() ){char c = (*in)[0];if ( c >= '0' && c <= '9' ) {++digits;const int delta = (c - '0');static const uint64_t kMaxUint64 = ~static_cast<uint64_t>(0);if ( v > kMaxUint64 / 10 ||( v == kMaxUint64 / 10 && delta > kMaxUint64 % 10 ) ){// Overflowreturn false;}v = ( v * 10 ) + delta;in->remove_prefix( 1 );}else {break;}}*val = v;return (digits > 0);}}  // namespace leveldb

原创粉丝点击