Changes imported from Abseil "staging" branch:
- c01cbbc23470f60e54aa28f88faa49df17d26c9c Add constexpr function for max uint128 to replace global ... by Alex Strelnikov <strel@google.com> - 07491549940e51fb6a0c8aad0ce101cb2830ee8e fix __GNUC__ typo in ABSL_ATTRIBUTE_RETURNS_NONNULL test by Abseil Team <absl-team@google.com> - 1bc29bafa53c387b0e097856cffb2fb9ce56c331 Remove redundant uint128 function cast expressions. by Alex Strelnikov <strel@google.com> - e3dddbd7be9e85e1bac77648af35ddccdba4500e Add ABSL_ATTRIBUTE_RETURNS_NONNULL macro. by Chris Kennelly <ckennelly@google.com> GitOrigin-RevId: c01cbbc23470f60e54aa28f88faa49df17d26c9c Change-Id: I7a5f608f58fb53bf013cdf56018f5b39842427fc
This commit is contained in:
parent
c742b72354
commit
be40fdf1a8
3 changed files with 38 additions and 25 deletions
|
@ -71,8 +71,8 @@ namespace absl {
|
|||
//
|
||||
// Example:
|
||||
//
|
||||
// float y = absl::kuint128max; // Error. uint128 cannot be implicitly
|
||||
// // converted to float.
|
||||
// float y = absl::Uint128Max(); // Error. uint128 cannot be implicitly
|
||||
// // converted to float.
|
||||
//
|
||||
// absl::uint128 v;
|
||||
// absl::uint64_t i = v; // Error
|
||||
|
@ -177,6 +177,11 @@ class alignas(16) uint128 {
|
|||
// absl::uint128 big = absl::MakeUint128(1, 0);
|
||||
friend constexpr uint128 MakeUint128(uint64_t high, uint64_t low);
|
||||
|
||||
// Uint128Max()
|
||||
//
|
||||
// Returns the highest value for a 128-bit unsigned integer.
|
||||
friend constexpr uint128 Uint128Max();
|
||||
|
||||
private:
|
||||
constexpr uint128(uint64_t high, uint64_t low);
|
||||
|
||||
|
@ -195,6 +200,9 @@ class alignas(16) uint128 {
|
|||
#endif // byte order
|
||||
};
|
||||
|
||||
// Prefer to use the constexpr `Uint128Max()`.
|
||||
//
|
||||
// TODO(absl-team) deprecate kuint128max once migration tool is released.
|
||||
extern const uint128 kuint128max;
|
||||
|
||||
// allow uint128 to be logged
|
||||
|
@ -212,6 +220,11 @@ constexpr uint128 MakeUint128(uint64_t high, uint64_t low) {
|
|||
return uint128(high, low);
|
||||
}
|
||||
|
||||
constexpr uint128 Uint128Max() {
|
||||
return uint128(std::numeric_limits<uint64_t>::max(),
|
||||
std::numeric_limits<uint64_t>::max());
|
||||
}
|
||||
|
||||
// Assignment from integer types.
|
||||
|
||||
inline uint128& uint128::operator=(int v) { return *this = uint128(v); }
|
||||
|
@ -251,33 +264,19 @@ inline uint128& uint128::operator=(unsigned __int128 v) {
|
|||
|
||||
// Shift and arithmetic operators.
|
||||
|
||||
inline uint128 operator<<(uint128 lhs, int amount) {
|
||||
return uint128(lhs) <<= amount;
|
||||
}
|
||||
inline uint128 operator<<(uint128 lhs, int amount) { return lhs <<= amount; }
|
||||
|
||||
inline uint128 operator>>(uint128 lhs, int amount) {
|
||||
return uint128(lhs) >>= amount;
|
||||
}
|
||||
inline uint128 operator>>(uint128 lhs, int amount) { return lhs >>= amount; }
|
||||
|
||||
inline uint128 operator+(uint128 lhs, uint128 rhs) {
|
||||
return uint128(lhs) += rhs;
|
||||
}
|
||||
inline uint128 operator+(uint128 lhs, uint128 rhs) { return lhs += rhs; }
|
||||
|
||||
inline uint128 operator-(uint128 lhs, uint128 rhs) {
|
||||
return uint128(lhs) -= rhs;
|
||||
}
|
||||
inline uint128 operator-(uint128 lhs, uint128 rhs) { return lhs -= rhs; }
|
||||
|
||||
inline uint128 operator*(uint128 lhs, uint128 rhs) {
|
||||
return uint128(lhs) *= rhs;
|
||||
}
|
||||
inline uint128 operator*(uint128 lhs, uint128 rhs) { return lhs *= rhs; }
|
||||
|
||||
inline uint128 operator/(uint128 lhs, uint128 rhs) {
|
||||
return uint128(lhs) /= rhs;
|
||||
}
|
||||
inline uint128 operator/(uint128 lhs, uint128 rhs) { return lhs /= rhs; }
|
||||
|
||||
inline uint128 operator%(uint128 lhs, uint128 rhs) {
|
||||
return uint128(lhs) %= rhs;
|
||||
}
|
||||
inline uint128 operator%(uint128 lhs, uint128 rhs) { return lhs %= rhs; }
|
||||
|
||||
constexpr uint64_t Uint128Low64(uint128 v) { return v.lo_; }
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue