From 02451914b9ad5320f81f56a89f3eef1f8683227c Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Tue, 11 Sep 2018 11:22:56 -0700 Subject: Export of internal Abseil changes. -- 74c1330e29f1501f2738258faf9ec4564395c90a by Gennadiy Civil : Merging https://github.com/abseil/abseil-cpp/pull/166 PiperOrigin-RevId: 212487256 -- 4ac236574ff8fb3cc1125505292b0bd8c8192da9 by Abseil Team : Allow c_move to take rvalue containers. PiperOrigin-RevId: 212458618 -- ce94e23984870db666d4c91623ae45b3c60b5b61 by Matt Armstrong : Internal change. PiperOrigin-RevId: 212153041 -- 7d88d286821c5839934756dd63a704ed162c49cb by Chris Kennelly : Internal change PiperOrigin-RevId: 211982309 -- ddae814b3f609948c20551ea3d80bf51b973f480 by Abseil Team : Remove unused argument from InlinedVector's AllocatorAndTag This is not part of InlinedVector's public interface. PiperOrigin-RevId: 211973017 -- 051fbfd81648a8da66c62c6603af63038d709c15 by Abseil Team : Minor performance fix PiperOrigin-RevId: 211820453 -- c205cb2add7400bc8caf2131cb700eea560b7dbf by Laramie Leavitt : Make absl::Span a tiny bit more consistent. Add constexper to equivalent absl::Span members as described by http://open-std.org/JTC1/SC22/WG21/docs/papers/2018/p0122r7.pdf * Span constructor use consistently delegate to Span(ptr, length) * Mark more member methods as constexpr. * Use data() and size() consistently in member methods. PiperOrigin-RevId: 211707244 -- 55500c9e941f2f58f4a95c121f32772408866eee by Derek Mauro : Stop catching polymorphic exception types by value. GCC 8 emits a warning for this. PiperOrigin-RevId: 211684466 GitOrigin-RevId: 74c1330e29f1501f2738258faf9ec4564395c90a Change-Id: Iceab4a5b30ee35d82ef494830262ad29c028cb0a --- absl/strings/internal/str_format/bind.cc | 41 +++++++++++++++----------------- 1 file changed, 19 insertions(+), 22 deletions(-) (limited to 'absl/strings/internal/str_format/bind.cc') diff --git a/absl/strings/internal/str_format/bind.cc b/absl/strings/internal/str_format/bind.cc index 33e8641..c4eddd1 100644 --- a/absl/strings/internal/str_format/bind.cc +++ b/absl/strings/internal/str_format/bind.cc @@ -103,15 +103,15 @@ class ConverterConsumer { }; template -bool ConvertAll(const UntypedFormatSpecImpl& format, - absl::Span args, - const Converter& converter) { - const ParsedFormatBase* pc = format.parsed_conversion(); - if (pc) - return pc->ProcessFormat(ConverterConsumer(converter, args)); - - return ParseFormatString(format.str(), - ConverterConsumer(converter, args)); +bool ConvertAll(const UntypedFormatSpecImpl format, + absl::Span args, Converter converter) { + if (format.has_parsed_conversion()) { + return format.parsed_conversion()->ProcessFormat( + ConverterConsumer(converter, args)); + } else { + return ParseFormatString(format.str(), + ConverterConsumer(converter, args)); + } } class DefaultConverter { @@ -158,7 +158,7 @@ bool BindWithPack(const UnboundConversion* props, return ArgContext(pack).Bind(props, bound); } -std::string Summarize(const UntypedFormatSpecImpl& format, +std::string Summarize(const UntypedFormatSpecImpl format, absl::Span args) { typedef SummarizingConverter Converter; std::string out; @@ -167,23 +167,18 @@ std::string Summarize(const UntypedFormatSpecImpl& format, // flush. FormatSinkImpl sink(&out); if (!ConvertAll(format, args, Converter(&sink))) { - sink.Flush(); - out.clear(); + return ""; } } return out; } bool FormatUntyped(FormatRawSinkImpl raw_sink, - const UntypedFormatSpecImpl& format, + const UntypedFormatSpecImpl format, absl::Span args) { FormatSinkImpl sink(raw_sink); using Converter = DefaultConverter; - if (!ConvertAll(format, args, Converter(&sink))) { - sink.Flush(); - return false; - } - return true; + return ConvertAll(format, args, Converter(&sink)); } std::ostream& Streamable::Print(std::ostream& os) const { @@ -191,14 +186,16 @@ std::ostream& Streamable::Print(std::ostream& os) const { return os; } -std::string& AppendPack(std::string* out, const UntypedFormatSpecImpl& format, +std::string& AppendPack(std::string* out, const UntypedFormatSpecImpl format, absl::Span args) { size_t orig = out->size(); - if (!FormatUntyped(out, format, args)) out->resize(orig); + if (ABSL_PREDICT_FALSE(!FormatUntyped(out, format, args))) { + out->erase(orig); + } return *out; } -int FprintF(std::FILE* output, const UntypedFormatSpecImpl& format, +int FprintF(std::FILE* output, const UntypedFormatSpecImpl format, absl::Span args) { FILERawSink sink(output); if (!FormatUntyped(&sink, format, args)) { @@ -216,7 +213,7 @@ int FprintF(std::FILE* output, const UntypedFormatSpecImpl& format, return static_cast(sink.count()); } -int SnprintF(char* output, size_t size, const UntypedFormatSpecImpl& format, +int SnprintF(char* output, size_t size, const UntypedFormatSpecImpl format, absl::Span args) { BufferRawSink sink(output, size ? size - 1 : 0); if (!FormatUntyped(&sink, format, args)) { -- cgit v1.2.3