aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/third_party/abseil-cpp/absl/strings/str_cat.cc
diff options
context:
space:
mode:
authorGravatar Marek Gilbert <mcg@google.com>2018-04-15 16:10:47 -0700
committerGravatar Marek Gilbert <mcg@google.com>2018-04-15 16:45:50 -0700
commitdfb5c04cf87fdff3c7fc16f9de3a2e8e1f4df265 (patch)
treed82fcc92ef0ba74169ae7d889a5e17c0541b262f /Firestore/third_party/abseil-cpp/absl/strings/str_cat.cc
parentc1061b7362471ddb7cae26c430f8112b0b94bb83 (diff)
Update abseil-cpp to a new upstream
Actually update to bf7fc9986e20f664958fc227547fd8d2fdcf863e Change #754 didn't completely do this. This makes the rest of the sources match optional, which was imported at this change in #1083. Also add: absl/types/optional_test.cc absl/types/CMakeLists.txt absl/utility/CMakeLists.txt
Diffstat (limited to 'Firestore/third_party/abseil-cpp/absl/strings/str_cat.cc')
-rw-r--r--Firestore/third_party/abseil-cpp/absl/strings/str_cat.cc31
1 files changed, 31 insertions, 0 deletions
diff --git a/Firestore/third_party/abseil-cpp/absl/strings/str_cat.cc b/Firestore/third_party/abseil-cpp/absl/strings/str_cat.cc
index 99eb289..3fe8c95 100644
--- a/Firestore/third_party/abseil-cpp/absl/strings/str_cat.cc
+++ b/Firestore/third_party/abseil-cpp/absl/strings/str_cat.cc
@@ -45,6 +45,37 @@ AlphaNum::AlphaNum(Hex hex) {
piece_ = absl::string_view(beg, end - beg);
}
+AlphaNum::AlphaNum(Dec dec) {
+ assert(dec.width <= numbers_internal::kFastToBufferSize);
+ char* const end = &digits_[numbers_internal::kFastToBufferSize];
+ char* const minfill = end - dec.width;
+ char* writer = end;
+ uint64_t value = dec.value;
+ bool neg = dec.neg;
+ while (value > 9) {
+ *--writer = '0' + (value % 10);
+ value /= 10;
+ }
+ *--writer = '0' + value;
+ if (neg) *--writer = '-';
+
+ ptrdiff_t fillers = writer - minfill;
+ if (fillers > 0) {
+ // Tricky: if the fill character is ' ', then it's <fill><+/-><digits>
+ // But...: if the fill character is '0', then it's <+/-><fill><digits>
+ bool add_sign_again = false;
+ if (neg && dec.fill == '0') { // If filling with '0',
+ ++writer; // ignore the sign we just added
+ add_sign_again = true; // and re-add the sign later.
+ }
+ writer -= fillers;
+ std::fill_n(writer, fillers, dec.fill);
+ if (add_sign_again) *--writer = '-';
+ }
+
+ piece_ = absl::string_view(writer, end - writer);
+}
+
// ----------------------------------------------------------------------
// StrCat()
// This merges the given strings or integers, with no delimiter. This