src/io/i128/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../util/traits/math/lib.hpp" | ||
| 4 | #include "../../util/traits/others/lib.hpp" | ||
| 5 | |||
| 6 | namespace tifa_libs { | ||
| 7 | namespace ios128_impl_ { | ||
| 8 | 17411460 | auto& read(tifa_libs::istream_c auto& is, tifa_libs::u128_c auto& n) { | |
| 9 |
9/12auto& tifa_libs::ios128_impl_::read<std::istream, unsigned __int128>(std::istream&, unsigned __int128&):
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8705718 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
auto& tifa_libs::ios128_impl_::read<tifa_libs::fastin<15u>, unsigned __int128>(tifa_libs::fastin<15u>&, unsigned __int128&):
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8705718 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
auto& tifa_libs::ios128_impl_::read<tifa_libs::fastin<63u>, unsigned __int128>(tifa_libs::fastin<63u>&, unsigned __int128&):
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 3 times.
✓ Branch 3 taken 1 time.
✗ Branch 4 not taken.
|
17411460 | static strn int_buf; |
| 10 | 17411460 | int_buf.reserve(43), n = 0, is >> int_buf; | |
| 11 |
6/6auto& tifa_libs::ios128_impl_::read<std::istream, unsigned __int128>(std::istream&, unsigned __int128&):
✓ Branch 3 taken 120028189 times.
✓ Branch 4 taken 8705728 times.
auto& tifa_libs::ios128_impl_::read<tifa_libs::fastin<15u>, unsigned __int128>(tifa_libs::fastin<15u>&, unsigned __int128&):
✓ Branch 3 taken 120028189 times.
✓ Branch 4 taken 8705728 times.
auto& tifa_libs::ios128_impl_::read<tifa_libs::fastin<63u>, unsigned __int128>(tifa_libs::fastin<63u>&, unsigned __int128&):
✓ Branch 3 taken 57 times.
✓ Branch 4 taken 4 times.
|
257467895 | for (u32 i = 0; i + 1 < int_buf.size(); i += 2) (n *= 100) += STR2U16[*(u16*)(int_buf.data() + i)]; |
| 12 |
5/6auto& tifa_libs::ios128_impl_::read<std::istream, unsigned __int128>(std::istream&, unsigned __int128&):
✓ Branch 1 taken 6269273 times.
✓ Branch 2 taken 2436455 times.
auto& tifa_libs::ios128_impl_::read<tifa_libs::fastin<15u>, unsigned __int128>(tifa_libs::fastin<15u>&, unsigned __int128&):
✓ Branch 1 taken 6269273 times.
✓ Branch 2 taken 2436455 times.
auto& tifa_libs::ios128_impl_::read<tifa_libs::fastin<63u>, unsigned __int128>(tifa_libs::fastin<63u>&, unsigned __int128&):
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
17411460 | if (int_buf.size() & 1) (n *= 10) += int_buf.back() & 15; |
| 13 | 17411460 | return is; | |
| 14 | } | ||
| 15 | } // namespace ios128_impl_ | ||
| 16 | |||
| 17 | 17411458 | auto& operator>>(tifa_libs::istream_c auto& is, tifa_libs::s128_c auto& n) NE { | |
| 18 | 17411458 | bool neg = false; | |
| 19 |
6/8auto& tifa_libs::operator>><tifa_libs::fastin<15u>, __int128>(tifa_libs::fastin<15u>&, __int128&):
✓ Branch 2 taken 3852726 times.
✓ Branch 3 taken 4853002 times.
✓ Branch 5 taken 3852726 times.
✗ Branch 6 not taken.
auto& tifa_libs::operator>><tifa_libs::fastin<63u>, __int128>(tifa_libs::fastin<63u>&, __int128&):
✓ Branch 2 taken 1 time.
✓ Branch 3 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 6 not taken.
|
8705730 | if CEXP (requires { is.skip_nnegdigit(); }) neg = (is.skip_nnegdigit().peek() == '-' && is.get_unchk()); |
| 20 | else | ||
| 21 |
6/6✓ Branch 0 taken 17411456 times.
✓ Branch 1 taken 3852726 times.
✓ Branch 3 taken 12558454 times.
✓ Branch 4 taken 4853002 times.
✓ Branch 5 taken 12558454 times.
✓ Branch 6 taken 8705728 times.
|
21264182 | while (!neg && !isdigit(is.peek())) { |
| 22 |
2/2✓ Branch 1 taken 3852726 times.
✓ Branch 2 taken 8705728 times.
|
12558454 | if (is.peek() == '-') neg = true; |
| 23 | 12558454 | is.get(); | |
| 24 | } | ||
| 25 | 17411458 | u128 n_ = 0; | |
| 26 |
6/6auto& tifa_libs::operator>><std::istream, __int128>(std::istream&, __int128&):
✓ Branch 1 taken 3852726 times.
✓ Branch 2 taken 4853002 times.
auto& tifa_libs::operator>><tifa_libs::fastin<15u>, __int128>(tifa_libs::fastin<15u>&, __int128&):
✓ Branch 1 taken 3852726 times.
✓ Branch 2 taken 4853002 times.
auto& tifa_libs::operator>><tifa_libs::fastin<63u>, __int128>(tifa_libs::fastin<63u>&, __int128&):
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 1 time.
|
17411458 | if (ios128_impl_::read(is, n_); neg) n_ = -n_; |
| 27 | 17411458 | n = (i128)n_; | |
| 28 | 17411458 | return is; | |
| 29 | } | ||
| 30 | 2 | auto& operator>>(tifa_libs::istream_c auto& is, tifa_libs::u128_c auto& n) NE { | |
| 31 | 2 | if CEXP (requires { is.skip_ndigit(); }) is.skip_ndigit(); | |
| 32 | else | ||
| 33 | while (!isdigit(is.peek())) is.get(); | ||
| 34 | 2 | return ios128_impl_::read(is, n); | |
| 35 | } | ||
| 36 | 9273872 | auto& operator<<(tifa_libs::ostream_c auto& os, tifa_libs::u128_c auto n) NE { | |
| 37 |
6/8auto& tifa_libs::operator<< <std::ostream, unsigned __int128>(std::ostream&, unsigned __int128):
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 4352854 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
auto& tifa_libs::operator<< <tifa_libs::fastout, unsigned __int128>(tifa_libs::fastout&, unsigned __int128):
✓ Branch 0 taken 44 times.
✓ Branch 1 taken 4920964 times.
✓ Branch 3 taken 44 times.
✗ Branch 4 not taken.
|
9273980 | static strn int_buf(40, '\0'); |
| 38 | 9273872 | auto it = end(int_buf); | |
| 39 | 254123395 | do *(--(it)) = chr(n % 10) | '0'; | |
| 40 |
4/4auto& tifa_libs::operator<< <std::ostream, unsigned __int128>(std::ostream&, unsigned __int128):
✓ Branch 0 taken 118887288 times.
✓ Branch 1 taken 4352864 times.
auto& tifa_libs::operator<< <tifa_libs::fastout, unsigned __int128>(tifa_libs::fastout&, unsigned __int128):
✓ Branch 0 taken 125962235 times.
✓ Branch 1 taken 4921008 times.
|
254123395 | while (n /= 10); |
| 41 | 9273872 | return os << int_buf.substr(usz(it - begin(int_buf))); | |
| 42 | } | ||
| 43 | 9273870 | auto& operator<<(tifa_libs::ostream_c auto& os, tifa_libs::s128_c auto n) NE { | |
| 44 |
4/4auto& tifa_libs::operator<< <std::ostream, __int128>(std::ostream&, __int128):
✓ Branch 0 taken 1802691 times.
✓ Branch 1 taken 2550173 times.
auto& tifa_libs::operator<< <tifa_libs::fastout, __int128>(tifa_libs::fastout&, __int128):
✓ Branch 0 taken 2052304 times.
✓ Branch 1 taken 2868700 times.
|
9273870 | if (n < 0) return os << '-' << -(u128)n; |
| 45 | 5418874 | return os << (u128)n; | |
| 46 | } | ||
| 47 | |||
| 48 | } // namespace tifa_libs | ||
| 49 |