Explicitly declare structured header class members and define them in cc file For consistency of the destructors and move and copy constructors and assignment operators, and because the ones for Item in particular are non-trivial. And add a missing ABSL_ATTRIBUTE_LIFETIME_BOUND to Item::GetString. PiperOrigin-RevId: 962791011
diff --git a/quiche/common/structured_headers.cc b/quiche/common/structured_headers.cc index e5b1c94..ac3de1b 100644 --- a/quiche/common/structured_headers.cc +++ b/quiche/common/structured_headers.cc
@@ -832,6 +832,14 @@ Item::Item(double value) : value_(value) {} Item::Item(bool value) : value_(value) {} +Item::Item(const Item&) = default; +Item& Item::operator=(const Item&) = default; + +Item::Item(Item&&) = default; +Item& Item::operator=(Item&&) = default; + +Item::~Item() = default; + const int64_t* Item::GetIfInteger() const { return std::get_if<kIntegerType>(&value_); } @@ -886,6 +894,8 @@ ParameterizedItem::ParameterizedItem(const ParameterizedItem&) = default; ParameterizedItem& ParameterizedItem::operator=(const ParameterizedItem&) = default; +ParameterizedItem::ParameterizedItem(ParameterizedItem&&) = default; +ParameterizedItem& ParameterizedItem::operator=(ParameterizedItem&&) = default; ParameterizedItem::ParameterizedItem(Item id, Parameters ps) : item(std::move(id)), params(std::move(ps)) {} ParameterizedItem::~ParameterizedItem() = default; @@ -894,6 +904,9 @@ ParameterizedMember::ParameterizedMember(const ParameterizedMember&) = default; ParameterizedMember& ParameterizedMember::operator=( const ParameterizedMember&) = default; +ParameterizedMember::ParameterizedMember(ParameterizedMember&&) = default; +ParameterizedMember& ParameterizedMember::operator=(ParameterizedMember&&) = + default; ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> id, bool member_is_inner_list, Parameters ps) @@ -916,13 +929,19 @@ const ParameterisedIdentifier&) = default; ParameterisedIdentifier& ParameterisedIdentifier::operator=( const ParameterisedIdentifier&) = default; +ParameterisedIdentifier::ParameterisedIdentifier(ParameterisedIdentifier&&) = + default; +ParameterisedIdentifier& ParameterisedIdentifier::operator=( + ParameterisedIdentifier&&) = default; ParameterisedIdentifier::ParameterisedIdentifier(Item id, Parameters ps) : identifier(std::move(id)), params(std::move(ps)) {} ParameterisedIdentifier::~ParameterisedIdentifier() = default; Dictionary::Dictionary() = 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) : members_(std::move(members)) {} Dictionary::~Dictionary() = default;
diff --git a/quiche/common/structured_headers.h b/quiche/common/structured_headers.h index d23fe72..a029e9a 100644 --- a/quiche/common/structured_headers.h +++ b/quiche/common/structured_headers.h
@@ -79,6 +79,14 @@ Item(const char* value, Item::ItemType type = kStringType); Item(std::string value, Item::ItemType type = kStringType); + Item(const Item&); + Item& operator=(const Item&); + + Item(Item&&); + Item& operator=(Item&&); + + ~Item(); + QUICHE_EXPORT friend bool operator==(const Item&, const Item&); bool is_null() const { return Type() == kNullType; } @@ -145,7 +153,7 @@ // Deprecated: Prefer `GetStringStrict()`, `GetToken()`, or // `GetByteSequence()`. - const std::string& GetString() const { + const std::string& GetString() const ABSL_ATTRIBUTE_LIFETIME_BOUND { struct Visitor { const std::string* operator()(const std::monostate&) { return nullptr; } const std::string* operator()(const int64_t&) { return nullptr; } @@ -203,6 +211,8 @@ ParameterisedIdentifier(); ParameterisedIdentifier(const ParameterisedIdentifier&); ParameterisedIdentifier& operator=(const ParameterisedIdentifier&); + ParameterisedIdentifier(ParameterisedIdentifier&&); + ParameterisedIdentifier& operator=(ParameterisedIdentifier&&); ParameterisedIdentifier(Item, Parameters); ~ParameterisedIdentifier(); @@ -219,6 +229,8 @@ ParameterizedItem(); ParameterizedItem(const ParameterizedItem&); ParameterizedItem& operator=(const ParameterizedItem&); + ParameterizedItem(ParameterizedItem&&); + ParameterizedItem& operator=(ParameterizedItem&&); ParameterizedItem(Item, Parameters); ~ParameterizedItem(); @@ -239,6 +251,8 @@ ParameterizedMember(); ParameterizedMember(const ParameterizedMember&); ParameterizedMember& operator=(const ParameterizedMember&); + ParameterizedMember(ParameterizedMember&&); + ParameterizedMember& operator=(ParameterizedMember&&); ParameterizedMember(std::vector<ParameterizedItem>, bool member_is_inner_list, Parameters); // Shorthand constructor for a member which is an inner list. @@ -267,8 +281,9 @@ Dictionary(Dictionary&&); explicit Dictionary(std::vector<DictionaryMember> members); ~Dictionary(); - Dictionary& operator=(const Dictionary&) = default; - Dictionary& operator=(Dictionary&&) = default; + Dictionary& operator=(const Dictionary&); + Dictionary& operator=(Dictionary&&); + iterator begin(); const_iterator begin() const; iterator end();