Changes imported from Abseil "staging" branch:
- c910f1792eae8cfdabb93bc261bf26e72f9a6717 Fix uint128 streaming to work with std::ios::internal. by Alex Strelnikov <strel@google.com> GitOrigin-RevId: c910f1792eae8cfdabb93bc261bf26e72f9a6717 Change-Id: I8ccce2ce6ac91ef7ce16fa8870a718fdfb8fa9a6
This commit is contained in:
		
							parent
							
								
									b05b79538f
								
							
						
					
					
						commit
						4f3edeb1b4
					
				
					 2 changed files with 26 additions and 2 deletions
				
			
		|  | @ -187,8 +187,14 @@ std::ostream& operator<<(std::ostream& o, const uint128& b) { | |||
|   // Add the requisite padding.
 | ||||
|   std::streamsize width = o.width(0); | ||||
|   if (static_cast<size_t>(width) > rep.size()) { | ||||
|     if ((flags & std::ios::adjustfield) == std::ios::left) { | ||||
|     std::ios::fmtflags adjustfield = flags & std::ios::adjustfield; | ||||
|     if (adjustfield == std::ios::left) { | ||||
|       rep.append(width - rep.size(), o.fill()); | ||||
|     } else if (adjustfield == std::ios::internal && | ||||
|                (flags & std::ios::showbase) && | ||||
|                (flags & std::ios::basefield) != std::ios::dec) { | ||||
|       size_t base_size = (flags & std::ios::basefield) == std::ios::hex ? 2 : 1; | ||||
|       rep.insert(base_size, width - rep.size(), o.fill()); | ||||
|     } else { | ||||
|       rep.insert(0, width - rep.size(), o.fill()); | ||||
|     } | ||||
|  |  | |||
|  | @ -475,12 +475,30 @@ TEST(Uint128, OStream) { | |||
|       {absl::uint128(0), std::ios::hex | std::ios::showbase, 0, '_', "0"}, | ||||
|       // showpos does nothing on unsigned types
 | ||||
|       {absl::uint128(1), std::ios::dec | std::ios::showpos, 0, '_', "1"}, | ||||
|       // padding
 | ||||
|       // right adjustment
 | ||||
|       {absl::uint128(9), std::ios::dec, 6, '_', "_____9"}, | ||||
|       {absl::uint128(12345), std::ios::dec, 6, '_', "_12345"}, | ||||
|       {absl::uint128(31), std::ios::hex | std::ios::showbase, 6, '_', "__0x1f"}, | ||||
|       {absl::uint128(7), std::ios::oct | std::ios::showbase, 6, '_', "____07"}, | ||||
|       // left adjustment
 | ||||
|       {absl::uint128(9), std::ios::dec | std::ios::left, 6, '_', "9_____"}, | ||||
|       {absl::uint128(12345), std::ios::dec | std::ios::left, 6, '_', "12345_"}, | ||||
|       {absl::uint128(31), std::ios::hex | std::ios::left | std::ios::showbase, | ||||
|        6, '_', "0x1f__"}, | ||||
|       {absl::uint128(7), std::ios::oct | std::ios::left | std::ios::showbase, 6, | ||||
|        '_', "07____"}, | ||||
|       // internal adjustment
 | ||||
|       {absl::uint128(123), | ||||
|        std::ios::dec | std::ios::internal | std::ios::showbase, 6, '_', | ||||
|        "___123"}, | ||||
|       {absl::uint128(31), | ||||
|        std::ios::hex | std::ios::internal | std::ios::showbase, 6, '_', | ||||
|        "0x__1f"}, | ||||
|       {absl::uint128(7), | ||||
|        std::ios::oct | std::ios::internal | std::ios::showbase, 6, '_', | ||||
|        "0____7"}, | ||||
|       {absl::uint128(34), std::ios::hex | std::ios::internal, 6, '_', "____22"}, | ||||
|       {absl::uint128(9), std::ios::oct | std::ios::internal, 6, '_', "____11"}, | ||||
|   }; | ||||
|   for (const auto& test_case : cases) { | ||||
|     std::ostringstream os; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue