0

Modernize net::HttpVersion

Use constexpr in HttpVersion.

This doesn't change the generated code but looks nicer.

HttpVersion was implicitly copyable and assignable, but make it
explicit. Since it is copyable, make it final.

No functional change.

Change-Id: I044928fc9f4c3026e41b789adf3c3ea548f80a91
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4840367
Reviewed-by: Kenichi Ishibashi <bashi@chromium.org>
Commit-Queue: Adam Rice <ricea@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1203112}
This commit is contained in:
Adam Rice
2023-09-29 07:31:09 +00:00
committed by Chromium LUCI CQ
parent b0ecf92b80
commit e924a80b82

@ -10,39 +10,44 @@
namespace net {
// Wrapper for an HTTP (major,minor) version pair.
class HttpVersion {
// This type is final as the type is copy-constructable and assignable and so
// there is a risk of slicing if it was subclassed.
class HttpVersion final {
public:
// Default constructor (major=0, minor=0).
HttpVersion() : value_(0) { }
constexpr HttpVersion() : value_(0) {}
// Build from unsigned major/minor pair.
HttpVersion(uint16_t major, uint16_t minor)
constexpr HttpVersion(uint16_t major, uint16_t minor)
: value_(static_cast<uint32_t>(major << 16) | minor) {}
constexpr HttpVersion(const HttpVersion& rhs) = default;
constexpr HttpVersion& operator=(const HttpVersion& rhs) = default;
// Major version number.
uint16_t major_value() const { return value_ >> 16; }
constexpr uint16_t major_value() const { return value_ >> 16; }
// Minor version number.
uint16_t minor_value() const { return value_ & 0xffff; }
constexpr uint16_t minor_value() const { return value_ & 0xffff; }
// Overloaded operators:
bool operator==(const HttpVersion& v) const {
constexpr bool operator==(const HttpVersion& v) const {
return value_ == v.value_;
}
bool operator!=(const HttpVersion& v) const {
constexpr bool operator!=(const HttpVersion& v) const {
return value_ != v.value_;
}
bool operator>(const HttpVersion& v) const {
constexpr bool operator>(const HttpVersion& v) const {
return value_ > v.value_;
}
bool operator>=(const HttpVersion& v) const {
constexpr bool operator>=(const HttpVersion& v) const {
return value_ >= v.value_;
}
bool operator<(const HttpVersion& v) const {
constexpr bool operator<(const HttpVersion& v) const {
return value_ < v.value_;
}
bool operator<=(const HttpVersion& v) const {
constexpr bool operator<=(const HttpVersion& v) const {
return value_ <= v.value_;
}