Export of internal Abseil changes
-- cf6037b985b629c253b8a87e4408c88a61baf89a by Abseil Team <absl-team@google.com>: Adds an example of using ABSL_DEPRECATED on a template. Without this, it's unclear where to add this annotation (e.g. before template <> or after it). PiperOrigin-RevId: 270057224 -- c53bc14dd683cc1e41c940a337001b42a0270eaf by Andy Getzendanner <durandal@google.com>: Parser and unparser for command-line flags of type absl::LogSeverity. PiperOrigin-RevId: 269939999 -- d91174b02f3b213f0b26701d9d97c79f809e6fea by Abseil Team <absl-team@google.com>: Fix a typo. PiperOrigin-RevId: 269738777 GitOrigin-RevId: cf6037b985b629c253b8a87e4408c88a61baf89a Change-Id: I6cec3101014e4c77f4ff2edb4c91740982dbb459
This commit is contained in:
parent
6ec1362810
commit
ddf8e52a29
9 changed files with 234 additions and 38 deletions
|
|
@ -251,7 +251,7 @@ cc_library(
|
|||
)
|
||||
|
||||
############################################################################
|
||||
# Unit tests in alpahabetical order.
|
||||
# Unit tests in alphabetical order.
|
||||
|
||||
cc_test(
|
||||
name = "commandlineflag_test",
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#include "absl/flags/marshalling.h"
|
||||
|
||||
#include <limits>
|
||||
#include <type_traits>
|
||||
|
||||
#include "absl/base/macros.h"
|
||||
#include "absl/strings/match.h"
|
||||
|
|
@ -186,4 +187,43 @@ std::string AbslUnparseFlag(const std::vector<std::string>& v) {
|
|||
}
|
||||
|
||||
} // namespace flags_internal
|
||||
|
||||
bool AbslParseFlag(absl::string_view text, absl::LogSeverity* dst,
|
||||
std::string* err) {
|
||||
text = absl::StripAsciiWhitespace(text);
|
||||
if (text.empty()) {
|
||||
*err = "no value provided";
|
||||
return false;
|
||||
}
|
||||
if (text.front() == 'k' || text.front() == 'K') text.remove_prefix(1);
|
||||
if (absl::EqualsIgnoreCase(text, "info")) {
|
||||
*dst = absl::LogSeverity::kInfo;
|
||||
return true;
|
||||
}
|
||||
if (absl::EqualsIgnoreCase(text, "warning")) {
|
||||
*dst = absl::LogSeverity::kWarning;
|
||||
return true;
|
||||
}
|
||||
if (absl::EqualsIgnoreCase(text, "error")) {
|
||||
*dst = absl::LogSeverity::kError;
|
||||
return true;
|
||||
}
|
||||
if (absl::EqualsIgnoreCase(text, "fatal")) {
|
||||
*dst = absl::LogSeverity::kFatal;
|
||||
return true;
|
||||
}
|
||||
std::underlying_type<absl::LogSeverity>::type numeric_value;
|
||||
if (absl::ParseFlag(text, &numeric_value, err)) {
|
||||
*dst = static_cast<absl::LogSeverity>(numeric_value);
|
||||
return true;
|
||||
}
|
||||
*err = "only integers and absl::LogSeverity enumerators are accepted";
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string AbslUnparseFlag(absl::LogSeverity v) {
|
||||
if (v == absl::NormalizeLogSeverity(v)) return absl::LogSeverityName(v);
|
||||
return absl::UnparseFlag(static_cast<int>(v));
|
||||
}
|
||||
|
||||
} // namespace absl
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@
|
|||
// * `double`
|
||||
// * `std::string`
|
||||
// * `std::vector<std::string>`
|
||||
// * `absl::LogSeverity` (provided here due to dependency ordering)
|
||||
//
|
||||
// Note that support for integral types is implemented using overloads for
|
||||
// variable-width fundamental types (`short`, `int`, `long`, etc.). However,
|
||||
|
|
@ -178,8 +179,8 @@ bool AbslParseFlag(absl::string_view, unsigned int*, std::string*); // NOLINT
|
|||
bool AbslParseFlag(absl::string_view, long*, std::string*); // NOLINT
|
||||
bool AbslParseFlag(absl::string_view, unsigned long*, std::string*); // NOLINT
|
||||
bool AbslParseFlag(absl::string_view, long long*, std::string*); // NOLINT
|
||||
bool AbslParseFlag(absl::string_view, unsigned long long*,
|
||||
std::string*); // NOLINT
|
||||
bool AbslParseFlag(absl::string_view, unsigned long long*, // NOLINT
|
||||
std::string*);
|
||||
bool AbslParseFlag(absl::string_view, float*, std::string*);
|
||||
bool AbslParseFlag(absl::string_view, double*, std::string*);
|
||||
bool AbslParseFlag(absl::string_view, std::string*, std::string*);
|
||||
|
|
@ -248,6 +249,13 @@ inline std::string UnparseFlag(const T& v) {
|
|||
return flags_internal::Unparse(v);
|
||||
}
|
||||
|
||||
// Overloads for `absl::LogSeverity` can't (easily) appear alongside that type's
|
||||
// definition because it is layered below flags. See proper documentation in
|
||||
// base/log_severity.h.
|
||||
enum class LogSeverity : int;
|
||||
bool AbslParseFlag(absl::string_view, absl::LogSeverity*, std::string*);
|
||||
std::string AbslUnparseFlag(absl::LogSeverity);
|
||||
|
||||
} // namespace absl
|
||||
|
||||
#endif // ABSL_FLAGS_MARSHALLING_H_
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue