* These are definitions of all of the inline header access functions described inside header_map.h
const HeaderEntry* name() const override { return getInline(HeaderHandles::get().name); } \
void set##name(absl::string_view value) override { setInline(HeaderHandles::get().name, value); }
* method access. Most high performance paths use O(1) direct method access. In general, we try to
template <class It> static void initFromInitList(HeaderMap& new_header_map, It begin, It end) {
StatefulHeaderKeyFormatterOptRef formatter() { return makeOptRefFromPtr(formatter_.get()); }
input.emplace_back(header.first.get(), [&header](HeaderMapImpl& h) -> StaticLookupResponse {
* https://en.cppreference.com/w/cpp/container/list/list). The NonCopyable will suppress both copy
HeaderNode i = headers_.emplace(is_pseudo_header ? pseudo_headers_end_ : headers_.end(),
std::list<HeaderEntryImpl>::const_reverse_iterator rbegin() const { return headers_.rbegin(); }
* interface and for the majority of methods just passes through to the HeaderMapImpl mix-in. Per
bool operator==(const HeaderMap& rhs) const override { return HeaderMapImpl::operator==(rhs); }
bool operator!=(const HeaderMap& rhs) const override { return HeaderMapImpl::operator!=(rhs); }
void iterate(HeaderMap::ConstIterateCb cb) const override { HeaderMapImpl::iterate(cb); }
StatefulHeaderKeyFormatterOptRef formatter() override { return HeaderMapImpl::formatter(); }
void appendInline(Handle handle, absl::string_view data, absl::string_view delimiter) override {
HeaderEntry& entry = maybeCreateInline(&inlineHeaders()[handle.it_->second], handle.it_->first);
HeaderEntry& entry = maybeCreateInline(&inlineHeaders()[handle.it_->second], handle.it_->first);
HeaderEntry& entry = maybeCreateInline(&inlineHeaders()[handle.it_->second], handle.it_->first);
HeaderEntry& entry = maybeCreateInline(&inlineHeaders()[handle.it_->second], handle.it_->first);
* Concrete implementation of RequestHeaderMap which allows for variable custom registered inline
// in the most derived class and thus duplicated. There may be a way to consolidate thus but it's
const HeaderEntryImpl* const* constInlineHeaders() const override { return inline_headers_; }
* Concrete implementation of RequestTrailerMap which allows for variable custom registered inline
* Concrete implementation of ResponseHeaderMap which allows for variable custom registered inline
const HeaderEntryImpl* const* constInlineHeaders() const override { return inline_headers_; }
const HeaderEntryImpl* const* constInlineHeaders() const override { return inline_headers_; }
createHeaderMap(const std::initializer_list<std::pair<LowerCaseString, std::string>>& values) {
// a few places when dealing with gRPC headers/trailers conversions so it's not trivial to remove.
// We should revisit this to figure how to make this a bit safer as a non-intentional conversion