39 #include <google/protobuf/port_def.inc>
45 static_cast<uint64>(PROTOBUF_LONGLONG(0xFFFFFFFFFFFFFFFF)),
46 static_cast<uint64>(PROTOBUF_LONGLONG(0xFFFFFFFFFFFFFFFF))
55 #define STEP(T, n, pos, sh) \
57 if ((n) >= (static_cast<T>(1) << (sh))) { \
70 return pos + ((PROTOBUF_ULONGLONG(0x3333333322221100) >> (n32 << 2)) & 0x3);
78 return Fls64(hi) + 64;
87 <<
", lo=" << dividend.
lo_;
88 }
else if (dividend <
divisor) {
90 *remainder_ret = dividend;
93 int dividend_bit_length =
Fls128(dividend);
95 int difference = dividend_bit_length - divisor_bit_length;
97 while (difference >= 0) {
100 if (shifted_divisor <= dividend) {
101 dividend -= shifted_divisor;
107 *quotient_ret = quotient;
108 *remainder_ret = dividend;
129 std::ios_base::fmtflags
flags = o.flags();
133 std::streamsize div_base_log;
134 switch (
flags & std::ios::basefield) {
137 static_cast<uint64>(PROTOBUF_ULONGLONG(0x1000000000000000));
141 div =
static_cast<uint64>(
142 PROTOBUF_ULONGLONG(01000000000000000000000));
146 div =
static_cast<uint64>(
147 PROTOBUF_ULONGLONG(10000000000000000000));
155 std::ostringstream os;
156 std::ios_base::fmtflags copy_mask =
157 std::ios::basefield | std::ios::showbase | std::ios::uppercase;
158 os.setf(
flags & copy_mask, copy_mask);
166 os << std::noshowbase << std::setfill(
'0') << std::setw(div_base_log);
168 os << std::setw(div_base_log);
169 }
else if (mid.
lo_ != 0) {
171 os << std::noshowbase << std::setfill(
'0') << std::setw(div_base_log);
177 std::streamsize
width = o.width(0);
182 rep.insert(
static_cast<std::string::size_type
>(0),