Changes imported from Abseil "staging" branch:
- a0405e7870a80a9dbc6784b06795e7df5a8c90f5 Internal change by Daniel Katz <katzdm@google.com> - 2888fe17796d7afa45f4b6ca7eb8e88f52739c39 StrCat: Support zero-padding and space-padding for decima... by Jorg Brown <jorg@google.com> - feebc521195241783730df9700394f6585550ff2 Merge GitHub PR #91. by Derek Mauro <dmauro@google.com> - e8164335efefb7335f407c17a16fce2ba4f24e3e This changes the value base_internal::kOnceDone from 32-b... by Abseil Team <absl-team@google.com> - 0f6085f3f0ee1d6baf9a558d07a25c2fcde93273 Remove `compliant` field from some type trait structs. by Matt Armstrong <marmstrong@google.com> GitOrigin-RevId: a0405e7870a80a9dbc6784b06795e7df5a8c90f5 Change-Id: Ic2efd40f6ec35f79a8aa12d4475cbea3150756d7
This commit is contained in:
parent
4791df7d1a
commit
0dc82b9d55
6 changed files with 151 additions and 18 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue