// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef QUICHE_COMMON_HTTP_HTTP_HEADER_BLOCK_H_ #define QUICHE_COMMON_HTTP_HTTP_HEADER_BLOCK_H_ #include <stddef.h> #include <functional> #include <list> #include <string> #include <utility> #include "absl/base/attributes.h" #include "absl/container/inlined_vector.h" #include "absl/strings/string_view.h" #include "quiche/common/http/http_header_storage.h" #include "quiche/common/platform/api/quiche_export.h" #include "quiche/common/platform/api/quiche_logging.h" #include "quiche/common/quiche_linked_hash_map.h" #include "quiche/common/quiche_text_utils.h" namespace quiche { namespace test { class HttpHeaderBlockPeer; class ValueProxyPeer; } // namespace test #ifndef SPDY_HEADER_DEBUG #if !defined(NDEBUG) || defined(ADDRESS_SANITIZER) #define SPDY_HEADER_DEBUG … #else // !defined(NDEBUG) || defined(ADDRESS_SANITIZER) #define SPDY_HEADER_DEBUG … #endif // !defined(NDEBUG) || defined(ADDRESS_SANITIZER) #endif // SPDY_HEADER_DEBUG // This class provides a key-value map that can be used to store SPDY header // names and values. This data structure preserves insertion order. // // Under the hood, this data structure uses large, contiguous blocks of memory // to store names and values. Lookups may be performed with absl::string_view // keys, and values are returned as absl::string_views (via ValueProxy, below). // Value absl::string_views are valid as long as the HttpHeaderBlock exists; // allocated memory is never freed until HttpHeaderBlock's destruction. // // This implementation does not make much of an effort to minimize wasted space. // It's expected that keys are rarely deleted from a HttpHeaderBlock. class QUICHE_EXPORT HttpHeaderBlock { … }; inline bool operator==(absl::string_view lhs, const HttpHeaderBlock::ValueProxy& rhs) { … } } // namespace quiche #endif // QUICHE_COMMON_HTTP_HTTP_HEADER_BLOCK_H_