Take structured header parameters by value in constructors instead of by const ref The former allows moves to work properly; as written, the following instances of `std::move(*parameters)` result in copies rather than moves because they end up invoking the const-ref constructor: 1. http://google3/third_party/quiche/common/structured_headers.cc;l=143;rcl=465934185 2. http://google3/third_party/quiche/common/structured_headers.cc;l=244;rcl=465934185 3. http://google3/third_party/quiche/common/structured_headers.cc;l=306;rcl=465934185 4. http://google3/third_party/quiche/common/structured_headers.cc;l=187;rcl=465934185 5. http://google3/third_party/quiche/common/structured_headers.cc;l=258;rcl=465934185 PiperOrigin-RevId: 466502726
diff --git a/quiche/common/structured_headers.cc b/quiche/common/structured_headers.cc index f19d15c..b348c22 100644 --- a/quiche/common/structured_headers.cc +++ b/quiche/common/structured_headers.cc
@@ -756,8 +756,8 @@ ParameterizedItem::ParameterizedItem(const ParameterizedItem&) = default; ParameterizedItem& ParameterizedItem::operator=(const ParameterizedItem&) = default; -ParameterizedItem::ParameterizedItem(Item id, const Parameters& ps) - : item(std::move(id)), params(ps) {} +ParameterizedItem::ParameterizedItem(Item id, Parameters ps) + : item(std::move(id)), params(std::move(ps)) {} ParameterizedItem::~ParameterizedItem() = default; ParameterizedMember::ParameterizedMember() = default; @@ -766,23 +766,27 @@ const ParameterizedMember&) = default; ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> id, bool member_is_inner_list, - const Parameters& ps) + Parameters ps) : member(std::move(id)), member_is_inner_list(member_is_inner_list), - params(ps) {} + params(std::move(ps)) {} ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> id, - const Parameters& ps) - : member(std::move(id)), member_is_inner_list(true), params(ps) {} -ParameterizedMember::ParameterizedMember(Item id, const Parameters& ps) - : member({{std::move(id), {}}}), member_is_inner_list(false), params(ps) {} + Parameters ps) + : member(std::move(id)), + member_is_inner_list(true), + params(std::move(ps)) {} +ParameterizedMember::ParameterizedMember(Item id, Parameters ps) + : member({{std::move(id), {}}}), + member_is_inner_list(false), + params(std::move(ps)) {} ParameterizedMember::~ParameterizedMember() = default; ParameterisedIdentifier::ParameterisedIdentifier( const ParameterisedIdentifier&) = default; ParameterisedIdentifier& ParameterisedIdentifier::operator=( const ParameterisedIdentifier&) = default; -ParameterisedIdentifier::ParameterisedIdentifier(Item id, const Parameters& ps) - : identifier(std::move(id)), params(ps) {} +ParameterisedIdentifier::ParameterisedIdentifier(Item id, Parameters ps) + : identifier(std::move(id)), params(std::move(ps)) {} ParameterisedIdentifier::~ParameterisedIdentifier() = default; Dictionary::Dictionary() = default;
diff --git a/quiche/common/structured_headers.h b/quiche/common/structured_headers.h index 6b338a7..f0eda84 100644 --- a/quiche/common/structured_headers.h +++ b/quiche/common/structured_headers.h
@@ -132,7 +132,7 @@ ParameterisedIdentifier(const ParameterisedIdentifier&); ParameterisedIdentifier& operator=(const ParameterisedIdentifier&); - ParameterisedIdentifier(Item, const Parameters&); + ParameterisedIdentifier(Item, Parameters); ~ParameterisedIdentifier(); }; @@ -150,7 +150,7 @@ ParameterizedItem(const ParameterizedItem&); ParameterizedItem& operator=(const ParameterizedItem&); - ParameterizedItem(Item, const Parameters&); + ParameterizedItem(Item, Parameters); ~ParameterizedItem(); }; @@ -178,11 +178,11 @@ ParameterizedMember(const ParameterizedMember&); ParameterizedMember& operator=(const ParameterizedMember&); ParameterizedMember(std::vector<ParameterizedItem>, bool member_is_inner_list, - const Parameters&); + Parameters); // Shorthand constructor for a member which is an inner list. - ParameterizedMember(std::vector<ParameterizedItem>, const Parameters&); + ParameterizedMember(std::vector<ParameterizedItem>, Parameters); // Shorthand constructor for a member which is a single Item. - ParameterizedMember(Item, const Parameters&); + ParameterizedMember(Item, Parameters); ~ParameterizedMember(); };