2016-02-09 23:12:00 +00:00
|
|
|
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
2013-10-16 21:59:46 +00:00
|
|
|
// This source code is licensed under the BSD-style license found in the
|
|
|
|
// LICENSE file in the root directory of this source tree. An additional grant
|
|
|
|
// of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
//
|
2015-07-01 23:13:49 +00:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2014-04-10 04:17:14 +00:00
|
|
|
#include <sstream>
|
|
|
|
#include <string>
|
2017-04-06 21:49:13 +00:00
|
|
|
#include <unordered_map>
|
2014-04-10 04:17:14 +00:00
|
|
|
#include <vector>
|
|
|
|
|
2013-10-04 04:49:15 +00:00
|
|
|
namespace rocksdb {
|
2013-05-21 18:37:06 +00:00
|
|
|
|
2017-04-06 21:49:13 +00:00
|
|
|
class Slice;
|
|
|
|
|
2014-11-21 16:05:28 +00:00
|
|
|
extern std::vector<std::string> StringSplit(const std::string& arg, char delim);
|
2013-05-21 18:37:06 +00:00
|
|
|
|
2014-11-25 04:44:49 +00:00
|
|
|
template <typename T>
|
|
|
|
inline std::string ToString(T value) {
|
2016-06-29 14:35:17 +00:00
|
|
|
#if !(defined OS_ANDROID) && !(defined CYGWIN) && !(defined OS_FREEBSD)
|
2014-11-25 04:44:49 +00:00
|
|
|
return std::to_string(value);
|
|
|
|
#else
|
2015-04-24 02:17:57 +00:00
|
|
|
// Andorid or cygwin doesn't support all of C++11, std::to_string() being
|
2014-11-25 04:44:49 +00:00
|
|
|
// one of the not supported features.
|
|
|
|
std::ostringstream os;
|
|
|
|
os << value;
|
|
|
|
return os.str();
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2017-04-06 21:49:13 +00:00
|
|
|
// Append a human-readable printout of "num" to *str
|
|
|
|
extern 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 string printout of "num"
|
|
|
|
extern std::string NumberToString(uint64_t num);
|
|
|
|
|
|
|
|
// Return a human-readable version of num.
|
|
|
|
// for num >= 10.000, prints "xxK"
|
|
|
|
// for num >= 10.000.000, prints "xxM"
|
|
|
|
// for num >= 10.000.000.000, prints "xxG"
|
|
|
|
extern std::string NumberToHumanString(int64_t num);
|
|
|
|
|
|
|
|
// Return a human-readable version of bytes
|
|
|
|
// ex: 1048576 -> 1.00 GB
|
|
|
|
extern std::string BytesToHumanString(uint64_t bytes);
|
|
|
|
|
|
|
|
// Append a human-readable time in micros.
|
|
|
|
int AppendHumanMicros(uint64_t micros, char* output, int len,
|
|
|
|
bool fixed_format);
|
|
|
|
|
|
|
|
// Append a human-readable size in bytes
|
|
|
|
int AppendHumanBytes(uint64_t bytes, char* output, int len);
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
|
|
|
|
// Returns true if the input char "c" is considered as a special character
|
|
|
|
// that will be escaped when EscapeOptionString() is called.
|
|
|
|
//
|
|
|
|
// @param c the input char
|
|
|
|
// @return true if the input char "c" is considered as a special character.
|
|
|
|
// @see EscapeOptionString
|
|
|
|
bool isSpecialChar(const char c);
|
|
|
|
|
|
|
|
// If the input char is an escaped char, it will return the its
|
|
|
|
// associated raw-char. Otherwise, the function will simply return
|
|
|
|
// the original input char.
|
|
|
|
char UnescapeChar(const char c);
|
|
|
|
|
|
|
|
// If the input char is a control char, it will return the its
|
|
|
|
// associated escaped char. Otherwise, the function will simply return
|
|
|
|
// the original input char.
|
|
|
|
char EscapeChar(const char c);
|
|
|
|
|
|
|
|
// Converts a raw string to an escaped string. Escaped-characters are
|
|
|
|
// defined via the isSpecialChar() function. When a char in the input
|
|
|
|
// string "raw_string" is classified as a special characters, then it
|
|
|
|
// will be prefixed by '\' in the output.
|
|
|
|
//
|
|
|
|
// It's inverse function is UnescapeOptionString().
|
|
|
|
// @param raw_string the input string
|
|
|
|
// @return the '\' escaped string of the input "raw_string"
|
|
|
|
// @see isSpecialChar, UnescapeOptionString
|
|
|
|
std::string EscapeOptionString(const std::string& raw_string);
|
|
|
|
|
|
|
|
// The inverse function of EscapeOptionString. It converts
|
|
|
|
// an '\' escaped string back to a raw string.
|
|
|
|
//
|
|
|
|
// @param escaped_string the input '\' escaped string
|
|
|
|
// @return the raw string of the input "escaped_string"
|
|
|
|
std::string UnescapeOptionString(const std::string& escaped_string);
|
|
|
|
|
|
|
|
std::string trim(const std::string& str);
|
|
|
|
|
|
|
|
#ifndef ROCKSDB_LITE
|
|
|
|
bool ParseBoolean(const std::string& type, const std::string& value);
|
|
|
|
|
|
|
|
uint32_t ParseUint32(const std::string& value);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
uint64_t ParseUint64(const std::string& value);
|
|
|
|
|
|
|
|
int ParseInt(const std::string& value);
|
|
|
|
|
|
|
|
double ParseDouble(const std::string& value);
|
|
|
|
|
|
|
|
size_t ParseSizeT(const std::string& value);
|
|
|
|
|
|
|
|
std::vector<int> ParseVectorInt(const std::string& value);
|
|
|
|
|
|
|
|
bool SerializeIntVector(const std::vector<int>& vec, std::string* value);
|
|
|
|
|
|
|
|
extern const std::string kNullptrString;
|
|
|
|
|
2014-04-10 04:17:14 +00:00
|
|
|
} // namespace rocksdb
|