Mark structured-headers constructors and operators noexcept where relevant PiperOrigin-RevId: 989723455
diff --git a/quiche/common/structured_headers.cc b/quiche/common/structured_headers.cc index b209e37..572e8a8 100644 --- a/quiche/common/structured_headers.cc +++ b/quiche/common/structured_headers.cc
@@ -809,31 +809,32 @@ return true; } -Item::Item() = default; -Item::Item(int64_t value) : value_(value) {} -Item::Item(double value) : value_(value) {} -Item::Item(bool value) : value_(value) {} +Item::Item() noexcept = default; +Item::Item(int64_t value) noexcept : value_(value) {} +Item::Item(double value) noexcept : value_(value) {} +Item::Item(bool value) noexcept : value_(value) {} Item::Item(string_t, const char* value) : value_(std::string(value)) {} Item::Item(string_t, absl::string_view value) : value_(std::string(value)) {} -Item::Item(string_t, std::string value) : value_(std::move(value)) {} +Item::Item(string_t, std::string value) noexcept : value_(std::move(value)) {} Item::Item(token_t, const char* value) : value_(Token(value)) {} Item::Item(token_t, absl::string_view value) : value_(Token(std::string(value))) {} -Item::Item(token_t, std::string value) : value_(Token(std::move(value))) {} +Item::Item(token_t, std::string value) noexcept + : value_(Token(std::move(value))) {} Item::Item(byte_sequence_t, const char* value) : value_(ByteSequence(value)) {} Item::Item(byte_sequence_t, absl::string_view value) : value_(ByteSequence(std::string(value))) {} -Item::Item(byte_sequence_t, std::string value) +Item::Item(byte_sequence_t, std::string value) noexcept : value_(ByteSequence(std::move(value))) {} Item::Item(const Item&) = default; Item& Item::operator=(const Item&) = default; -Item::Item(Item&&) = default; -Item& Item::operator=(Item&&) = default; +Item::Item(Item&&) noexcept = default; +Item& Item::operator=(Item&&) noexcept = default; Item::~Item() = default; @@ -881,62 +882,67 @@ bool operator==(const Item&, const Item&) = default; -ParameterizedItem::ParameterizedItem() = default; +ParameterizedItem::ParameterizedItem() noexcept = default; ParameterizedItem::ParameterizedItem(const ParameterizedItem&) = default; ParameterizedItem& ParameterizedItem::operator=(const ParameterizedItem&) = default; -ParameterizedItem::ParameterizedItem(ParameterizedItem&&) = default; -ParameterizedItem& ParameterizedItem::operator=(ParameterizedItem&&) = default; -ParameterizedItem::ParameterizedItem(Item item, Parameters params) +ParameterizedItem::ParameterizedItem(ParameterizedItem&&) noexcept = default; +ParameterizedItem& ParameterizedItem::operator=(ParameterizedItem&&) noexcept = + default; +ParameterizedItem::ParameterizedItem(Item item, Parameters params) noexcept : item(std::move(item)), params(std::move(params)) {} -ParameterizedItem::ParameterizedItem(Item item) : item(std::move(item)) {} +ParameterizedItem::ParameterizedItem(Item item) noexcept + : item(std::move(item)) {} ParameterizedItem::~ParameterizedItem() = default; -InnerList::InnerList() = default; +InnerList::InnerList() noexcept = default; -InnerList::InnerList(std::vector<ParameterizedItem> items) +InnerList::InnerList(std::vector<ParameterizedItem> items) noexcept : items(std::move(items)) {} -InnerList::InnerList(std::vector<ParameterizedItem> items, Parameters params) +InnerList::InnerList(std::vector<ParameterizedItem> items, + Parameters params) noexcept : items(std::move(items)), params(std::move(params)) {} InnerList::InnerList(const InnerList&) = default; InnerList& InnerList::operator=(const InnerList&) = default; -InnerList::InnerList(InnerList&&) = default; +InnerList::InnerList(InnerList&&) noexcept = default; -InnerList& InnerList::operator=(InnerList&&) = default; +InnerList& InnerList::operator=(InnerList&&) noexcept = default; InnerList::~InnerList() = default; -ParameterizedMember::ParameterizedMember() = default; +ParameterizedMember::ParameterizedMember() noexcept = default; ParameterizedMember::ParameterizedMember(const ParameterizedMember&) = default; ParameterizedMember& ParameterizedMember::operator=( const ParameterizedMember&) = default; -ParameterizedMember::ParameterizedMember(ParameterizedMember&&) = default; -ParameterizedMember& ParameterizedMember::operator=(ParameterizedMember&&) = +ParameterizedMember::ParameterizedMember(ParameterizedMember&&) noexcept = default; +ParameterizedMember& ParameterizedMember::operator=( + ParameterizedMember&&) noexcept = default; ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> items, - Parameters params) + Parameters params) noexcept : value_(std::in_place_type<InnerList>, std::move(items), std::move(params)) {} -ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> items) +ParameterizedMember::ParameterizedMember( + std::vector<ParameterizedItem> items) noexcept : value_(std::in_place_type<InnerList>, std::move(items)) {} -ParameterizedMember::ParameterizedMember(Item item, Parameters params) +ParameterizedMember::ParameterizedMember(Item item, Parameters params) noexcept : value_(std::in_place_type<ParameterizedItem>, std::move(item), std::move(params)) {} -ParameterizedMember::ParameterizedMember(Item item) +ParameterizedMember::ParameterizedMember(Item item) noexcept : value_(std::in_place_type<ParameterizedItem>, std::move(item)) {} -ParameterizedMember::ParameterizedMember(ParameterizedItem item) +ParameterizedMember::ParameterizedMember(ParameterizedItem item) noexcept : value_(std::move(item)) {} -ParameterizedMember::ParameterizedMember(InnerList inner_list) +ParameterizedMember::ParameterizedMember(InnerList inner_list) noexcept : value_(std::move(inner_list)) {} ParameterizedMember::~ParameterizedMember() = default; @@ -960,25 +966,26 @@ bool operator==(const ParameterizedMember&, const ParameterizedMember&) = default; -ParameterisedIdentifier::ParameterisedIdentifier() = default; +ParameterisedIdentifier::ParameterisedIdentifier() noexcept = default; ParameterisedIdentifier::ParameterisedIdentifier( const ParameterisedIdentifier&) = default; ParameterisedIdentifier& ParameterisedIdentifier::operator=( const ParameterisedIdentifier&) = default; -ParameterisedIdentifier::ParameterisedIdentifier(ParameterisedIdentifier&&) = - default; +ParameterisedIdentifier::ParameterisedIdentifier( + ParameterisedIdentifier&&) noexcept = default; ParameterisedIdentifier& ParameterisedIdentifier::operator=( - ParameterisedIdentifier&&) = default; -ParameterisedIdentifier::ParameterisedIdentifier(Item id, Parameters ps) + ParameterisedIdentifier&&) noexcept = default; +ParameterisedIdentifier::ParameterisedIdentifier(Item id, + Parameters ps) noexcept : identifier(std::move(id)), params(std::move(ps)) {} ParameterisedIdentifier::~ParameterisedIdentifier() = default; -Dictionary::Dictionary() = default; +Dictionary::Dictionary() noexcept = default; Dictionary::Dictionary(const Dictionary&) = default; Dictionary& Dictionary::operator=(const Dictionary&) = default; -Dictionary::Dictionary(Dictionary&&) = default; -Dictionary& Dictionary::operator=(Dictionary&&) = default; -Dictionary::Dictionary(std::vector<DictionaryMember> members) +Dictionary::Dictionary(Dictionary&&) noexcept = default; +Dictionary& Dictionary::operator=(Dictionary&&) noexcept = default; +Dictionary::Dictionary(std::vector<DictionaryMember> members) noexcept : members_(std::move(members)) {} Dictionary::~Dictionary() = default; Dictionary::iterator Dictionary::begin() { return members_.begin(); } @@ -1095,19 +1102,21 @@ return std::nullopt; } -ItemView::ItemView() = default; -ItemView::ItemView(int64_t value) : value_(value) {} -ItemView::ItemView(double value) : value_(value) {} -ItemView::ItemView(bool value) : value_(value) {} +ItemView::ItemView() noexcept = default; +ItemView::ItemView(int64_t value) noexcept : value_(value) {} +ItemView::ItemView(double value) noexcept : value_(value) {} +ItemView::ItemView(bool value) noexcept : value_(value) {} -ItemView::ItemView(string_t, absl::string_view value) : value_(value) {} +ItemView::ItemView(string_t, absl::string_view value) noexcept + : value_(value) {} -ItemView::ItemView(token_t, absl::string_view value) : value_(Token(value)) {} +ItemView::ItemView(token_t, absl::string_view value) noexcept + : value_(Token(value)) {} -ItemView::ItemView(byte_sequence_t, absl::string_view value) +ItemView::ItemView(byte_sequence_t, absl::string_view value) noexcept : value_(ByteSequence(value)) {} -ItemView::ItemView(const Item& value) +ItemView::ItemView(const Item& value) noexcept : value_(value.Visit([](const auto& value) { return Variant(value); })) {} } // namespace structured_headers
diff --git a/quiche/common/structured_headers.h b/quiche/common/structured_headers.h index 95cf71f..363596f 100644 --- a/quiche/common/structured_headers.h +++ b/quiche/common/structured_headers.h
@@ -98,10 +98,10 @@ friend bool operator==(const ByteSequence&, const ByteSequence&) = default; }; - Item(); - explicit Item(int64_t value); - explicit Item(double value); - explicit Item(bool value); + Item() noexcept; + explicit Item(int64_t value) noexcept; + explicit Item(double value) noexcept; + explicit Item(bool value) noexcept; // Prevent pointers from implicitly converting to bool. template <typename T> @@ -110,21 +110,21 @@ Item(string_t, const char* value); Item(string_t, absl::string_view value); - Item(string_t, std::string value); + Item(string_t, std::string value) noexcept; Item(token_t, const char* value); Item(token_t, absl::string_view value); - Item(token_t, std::string value); + Item(token_t, std::string value) noexcept; Item(byte_sequence_t, const char* value); Item(byte_sequence_t, absl::string_view value); - Item(byte_sequence_t, std::string value); + Item(byte_sequence_t, std::string value) noexcept; Item(const Item&); Item& operator=(const Item&); - Item(Item&&); - Item& operator=(Item&&); + Item(Item&&) noexcept; + Item& operator=(Item&&) noexcept; ~Item(); @@ -220,12 +220,12 @@ Item identifier; Parameters params; - ParameterisedIdentifier(); + ParameterisedIdentifier() noexcept; ParameterisedIdentifier(const ParameterisedIdentifier&); ParameterisedIdentifier& operator=(const ParameterisedIdentifier&); - ParameterisedIdentifier(ParameterisedIdentifier&&); - ParameterisedIdentifier& operator=(ParameterisedIdentifier&&); - ParameterisedIdentifier(Item, Parameters); + ParameterisedIdentifier(ParameterisedIdentifier&&) noexcept; + ParameterisedIdentifier& operator=(ParameterisedIdentifier&&) noexcept; + ParameterisedIdentifier(Item, Parameters) noexcept; ~ParameterisedIdentifier(); friend bool operator==(const ParameterisedIdentifier&, @@ -238,18 +238,18 @@ Item item; Parameters params; - ParameterizedItem(); + ParameterizedItem() noexcept; // Convenience constructor for empty parameters. - explicit ParameterizedItem(Item); + explicit ParameterizedItem(Item) noexcept; - ParameterizedItem(Item, Parameters); + ParameterizedItem(Item, Parameters) noexcept; ParameterizedItem(const ParameterizedItem&); ParameterizedItem& operator=(const ParameterizedItem&); - ParameterizedItem(ParameterizedItem&&); - ParameterizedItem& operator=(ParameterizedItem&&); + ParameterizedItem(ParameterizedItem&&) noexcept; + ParameterizedItem& operator=(ParameterizedItem&&) noexcept; ~ParameterizedItem(); @@ -262,17 +262,17 @@ std::vector<ParameterizedItem> items; Parameters params; - InnerList(); + InnerList() noexcept; - explicit InnerList(std::vector<ParameterizedItem> items); + explicit InnerList(std::vector<ParameterizedItem> items) noexcept; - InnerList(std::vector<ParameterizedItem> items, Parameters params); + InnerList(std::vector<ParameterizedItem> items, Parameters params) noexcept; InnerList(const InnerList&); InnerList& operator=(const InnerList&); - InnerList(InnerList&&); - InnerList& operator=(InnerList&&); + InnerList(InnerList&&) noexcept; + InnerList& operator=(InnerList&&) noexcept; ~InnerList(); @@ -284,28 +284,28 @@ // TODO(apaseltiner): Use `class` instead of `struct`, since some members are // private. struct QUICHE_EXPORT ParameterizedMember { - explicit ParameterizedMember(ParameterizedItem); - explicit ParameterizedMember(InnerList); + explicit ParameterizedMember(ParameterizedItem) noexcept; + explicit ParameterizedMember(InnerList) noexcept; // Constructor for a member that is an inner list. - ParameterizedMember(std::vector<ParameterizedItem>, Parameters); + ParameterizedMember(std::vector<ParameterizedItem>, Parameters) noexcept; // Convenience constructor for a member that is an inner list with empty // parameters. - explicit ParameterizedMember(std::vector<ParameterizedItem>); + explicit ParameterizedMember(std::vector<ParameterizedItem>) noexcept; // Constructor for a member that is a single Item. - ParameterizedMember(Item, Parameters); + ParameterizedMember(Item, Parameters) noexcept; // Convenience constructor for a member that is a single Item with empty // parameters. - explicit ParameterizedMember(Item); + explicit ParameterizedMember(Item) noexcept; ParameterizedMember(const ParameterizedMember&); ParameterizedMember& operator=(const ParameterizedMember&); - ParameterizedMember(ParameterizedMember&&); - ParameterizedMember& operator=(ParameterizedMember&&); + ParameterizedMember(ParameterizedMember&&) noexcept; + ParameterizedMember& operator=(ParameterizedMember&&) noexcept; ~ParameterizedMember(); @@ -334,7 +334,7 @@ // what the default should actually be, but it is convenient for code that // defers assignment. As is, it produces an invalid value where both // `GetIfItem()` and `GetIfInnerList()` return `nullptr`. - ParameterizedMember(); + ParameterizedMember() noexcept; private: std::variant<std::monostate, ParameterizedItem, InnerList> value_; @@ -351,13 +351,13 @@ using mapped_type = ParameterizedMember; using value_type = std::pair<const std::string, ParameterizedMember>; - Dictionary(); + Dictionary() noexcept; Dictionary(const Dictionary&); - Dictionary(Dictionary&&); - explicit Dictionary(std::vector<DictionaryMember> members); + Dictionary(Dictionary&&) noexcept; + explicit Dictionary(std::vector<DictionaryMember> members) noexcept; ~Dictionary(); Dictionary& operator=(const Dictionary&); - Dictionary& operator=(Dictionary&&); + Dictionary& operator=(Dictionary&&) noexcept; iterator begin(); const_iterator begin() const; @@ -463,30 +463,32 @@ static constexpr token_t token{}; static constexpr byte_sequence_t byte_sequence{}; - ItemView(); - ItemView(int64_t value); - ItemView(double value); - ItemView(bool value); + ItemView() noexcept; + ItemView(int64_t value) noexcept; + ItemView(double value) noexcept; + ItemView(bool value) noexcept; // Prevent pointers from implicitly converting to bool. template <typename T> explicit ItemView(const T*) = delete; explicit ItemView(std::nullptr_t) = delete; - ItemView(string_t, absl::string_view value ABSL_ATTRIBUTE_LIFETIME_BOUND); + ItemView(string_t, + absl::string_view value ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept; - ItemView(token_t, absl::string_view value ABSL_ATTRIBUTE_LIFETIME_BOUND); + ItemView(token_t, + absl::string_view value ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept; ItemView(byte_sequence_t, - absl::string_view value ABSL_ATTRIBUTE_LIFETIME_BOUND); + absl::string_view value ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept; - ItemView(const Item& value ABSL_ATTRIBUTE_LIFETIME_BOUND); + ItemView(const Item& value ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept; - ItemView(const ItemView&) = default; - ItemView& operator=(const ItemView&) = default; + ItemView(const ItemView&) noexcept = default; + ItemView& operator=(const ItemView&) noexcept = default; - ItemView(ItemView&&) = default; - ItemView& operator=(ItemView&&) = default; + ItemView(ItemView&&) noexcept = default; + ItemView& operator=(ItemView&&) noexcept = default; ~ItemView() = default; @@ -497,20 +499,23 @@ struct Token { absl::string_view value; - explicit Token(absl::string_view value ABSL_ATTRIBUTE_LIFETIME_BOUND) + explicit Token( + absl::string_view value ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept : value(value) {} - Token(const Item::Token& value ABSL_ATTRIBUTE_LIFETIME_BOUND) + Token(const Item::Token& value ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept : value(value.value) {} }; struct ByteSequence { absl::string_view value; - explicit ByteSequence(absl::string_view value ABSL_ATTRIBUTE_LIFETIME_BOUND) + explicit ByteSequence( + absl::string_view value ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept : value(value) {} - ByteSequence(const Item::ByteSequence& value ABSL_ATTRIBUTE_LIFETIME_BOUND) + ByteSequence( + const Item::ByteSequence& value ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept : value(value.value) {} };