namespace int128_internal {
constexpr __int128 BitCastToSigned(unsigned __int128 v) { … }
}
inline int128& int128::operator=(__int128 v) { … }
constexpr uint64_t Int128Low64(int128 v) { … }
constexpr int64_t Int128High64(int128 v) { … }
constexpr int128::int128(int64_t high, uint64_t low)
: … { … }
constexpr int128::int128(int v) : … { … }
constexpr int128::int128(long v) : … { … }
constexpr int128::int128(long long v) : … { … }
constexpr int128::int128(__int128 v) : … { … }
constexpr int128::int128(unsigned int v) : … { … }
constexpr int128::int128(unsigned long v) : … { … }
constexpr int128::int128(unsigned long long v) : … { … }
constexpr int128::int128(unsigned __int128 v) : … { … }
inline int128::int128(float v) { … }
inline int128::int128(double v) { … }
inline int128::int128(long double v) { … }
constexpr int128::int128(uint128 v) : … { … }
operator bool()
operator char()
operator signed char()
operator unsigned char()
operator char16_t()
operator char32_t()
operator wchar_t()
operator short()
operator unsigned short()
operator int()
operator unsigned int()
operator long()
operator unsigned long()
operator long long()
operator unsigned long long()
operator __int128()
operator unsigned __int128()
#if defined(__clang__) && !defined(__ppc64__)
operator float()
operator double()
operator long double()
#else
inline int128::operator float() const {
return v_ < 0 && *this != Int128Min()
? -static_cast<float>(-*this)
: static_cast<float>(Int128Low64(*this)) +
std::ldexp(static_cast<float>(Int128High64(*this)), 64);
}
inline int128::operator double() const {
return v_ < 0 && *this != Int128Min()
? -static_cast<double>(-*this)
: static_cast<double>(Int128Low64(*this)) +
std::ldexp(static_cast<double>(Int128High64(*this)), 64);
}
inline int128::operator long double() const {
return v_ < 0 && *this != Int128Min()
? -static_cast<long double>(-*this)
: static_cast<long double>(Int128Low64(*this)) +
std::ldexp(static_cast<long double>(Int128High64(*this)),
64);
}
#endif
constexpr bool operator==(int128 lhs, int128 rhs) { … }
constexpr bool operator!=(int128 lhs, int128 rhs) { … }
constexpr bool operator<(int128 lhs, int128 rhs) { … }
constexpr bool operator>(int128 lhs, int128 rhs) { … }
constexpr bool operator<=(int128 lhs, int128 rhs) { … }
constexpr bool operator>=(int128 lhs, int128 rhs) { … }
#ifdef __cpp_impl_three_way_comparison
constexpr absl::strong_ordering operator<=>(int128 lhs, int128 rhs) { … }
#endif
constexpr int128 operator-(int128 v) { … }
constexpr bool operator!(int128 v) { … }
constexpr int128 operator~(int128 val) { … }
constexpr int128 operator+(int128 lhs, int128 rhs) { … }
constexpr int128 operator-(int128 lhs, int128 rhs) { … }
inline int128 operator*(int128 lhs, int128 rhs) { … }
inline int128 operator/(int128 lhs, int128 rhs) { … }
inline int128 operator%(int128 lhs, int128 rhs) { … }
inline int128 int128::operator++(int) { … }
inline int128 int128::operator--(int) { … }
inline int128& int128::operator++() { … }
inline int128& int128::operator--() { … }
constexpr int128 operator|(int128 lhs, int128 rhs) { … }
constexpr int128 operator&(int128 lhs, int128 rhs) { … }
constexpr int128 operator^(int128 lhs, int128 rhs) { … }
constexpr int128 operator<<(int128 lhs, int amount) { … }
constexpr int128 operator>>(int128 lhs, int amount) { … }