| Index: net/spdy/hpack_header_table.h
|
| diff --git a/net/spdy/hpack_header_table.h b/net/spdy/hpack_header_table.h
|
| index d9eac73c8f1f4ede707b05e792ffc9ecb319484d..5f70b5bab646a03b5a39abdb601f9a4721ed0a96 100644
|
| --- a/net/spdy/hpack_header_table.h
|
| +++ b/net/spdy/hpack_header_table.h
|
| @@ -36,6 +36,21 @@ class NET_EXPORT_PRIVATE HpackHeaderTable {
|
| // extended to map to list iterators.
|
| typedef std::deque<HpackEntry> EntryTable;
|
|
|
| + // Implements a total ordering of HpackEntry on name(), value(), then index
|
| + // ascending. Note that index may change over the lifetime of an HpackEntry,
|
| + // but the relative index order of two entries will not. This comparator is
|
| + // composed with the 'lookup' HpackEntry constructor to allow for efficient
|
| + // lower-bounding of matching entries.
|
| + struct NET_EXPORT_PRIVATE EntryComparator {
|
| + explicit EntryComparator(HpackHeaderTable* table) : table_(table) {}
|
| +
|
| + bool operator() (const HpackEntry* lhs, const HpackEntry* rhs) const;
|
| +
|
| + private:
|
| + HpackHeaderTable* table_;
|
| + };
|
| + typedef std::set<HpackEntry*, EntryComparator> OrderedEntrySet;
|
| +
|
| HpackHeaderTable();
|
|
|
| ~HpackHeaderTable();
|
| @@ -48,7 +63,7 @@ class NET_EXPORT_PRIVATE HpackHeaderTable {
|
| size_t size() const { return size_; }
|
| size_t max_size() const { return max_size_; }
|
|
|
| - const HpackEntry::OrderedSet& reference_set() {
|
| + const OrderedEntrySet& reference_set() {
|
| return reference_set_;
|
| }
|
|
|
| @@ -62,6 +77,9 @@ class NET_EXPORT_PRIVATE HpackHeaderTable {
|
| HpackEntry* GetByNameAndValue(base::StringPiece name,
|
| base::StringPiece value);
|
|
|
| + // Returns the index of an entry within this header table.
|
| + size_t IndexOf(const HpackEntry* entry) const;
|
| +
|
| // Sets the maximum size of the header table, evicting entries if
|
| // necessary as described in 3.3.2.
|
| void SetMaxSize(size_t max_size);
|
| @@ -109,9 +127,9 @@ class NET_EXPORT_PRIVATE HpackHeaderTable {
|
| EntryTable static_entries_;
|
|
|
| // Full table index, over |dynamic_entries_| and |static_entries_|.
|
| - HpackEntry::OrderedSet index_;
|
| + OrderedEntrySet index_;
|
| // The reference set is strictly a subset of |dynamic_entries_|.
|
| - HpackEntry::OrderedSet reference_set_;
|
| + OrderedEntrySet reference_set_;
|
|
|
| // Last acknowledged value for SETTINGS_HEADER_TABLE_SIZE.
|
| size_t settings_size_bound_;
|
| @@ -122,13 +140,9 @@ class NET_EXPORT_PRIVATE HpackHeaderTable {
|
| size_t max_size_;
|
|
|
| // Total number of table insertions which have occurred. Referenced by
|
| - // dynamic HpackEntry instances for determination of table index.
|
| + // IndexOf() for determination of an HpackEntry's table index.
|
| size_t total_insertions_;
|
|
|
| - // Current number of dynamic entries. Referenced by static HpackEntry
|
| - // instances for determination of table index.
|
| - size_t dynamic_entries_count_;
|
| -
|
| DISALLOW_COPY_AND_ASSIGN(HpackHeaderTable);
|
| };
|
|
|
|
|