Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / net / spdy / hpack_header_table.h
index 7e54333..def42af 100644 (file)
 
 namespace net {
 
+using base::StringPiece;
+
 namespace test {
 class HpackHeaderTablePeer;
 }  // namespace test
 
-// A data structure for both the header table (described in 3.2) and
-// the reference set (3.3).
+// A data structure for the static table (3.3.1) and the header table (3.3.2).
 class NET_EXPORT_PRIVATE HpackHeaderTable {
  public:
   friend class test::HpackHeaderTablePeer;
@@ -32,7 +33,7 @@ class NET_EXPORT_PRIVATE HpackHeaderTable {
   // HpackHeaderTable takes advantage of the deque property that references
   // remain valid, so long as insertions & deletions are at the head & tail.
   // If this changes (eg we start to drop entries from the middle of the table),
-  // this needs to be a std::list, in which case |index_| can be trivially
+  // this needs to be a std::list, in which case |*_index_| can be trivially
   // extended to map to list iterators.
   typedef std::deque<HpackEntry> EntryTable;
 
@@ -42,12 +43,7 @@ class NET_EXPORT_PRIVATE HpackHeaderTable {
   // 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;
 
@@ -63,19 +59,14 @@ class NET_EXPORT_PRIVATE HpackHeaderTable {
   size_t size() const { return size_; }
   size_t max_size() const { return max_size_; }
 
-  const OrderedEntrySet& reference_set() {
-    return reference_set_;
-  }
-
   // Returns the entry matching the index, or NULL.
-  HpackEntry* GetByIndex(size_t index);
+  const HpackEntry* GetByIndex(size_t index);
 
   // Returns the lowest-value entry having |name|, or NULL.
-  HpackEntry* GetByName(base::StringPiece name);
+  const HpackEntry* GetByName(StringPiece name);
 
   // Returns the lowest-index matching entry, or NULL.
-  HpackEntry* GetByNameAndValue(base::StringPiece name,
-                                base::StringPiece value);
+  const HpackEntry* GetByNameAndValue(StringPiece name, StringPiece value);
 
   // Returns the index of an entry within this header table.
   size_t IndexOf(const HpackEntry* entry) const;
@@ -91,7 +82,8 @@ class NET_EXPORT_PRIVATE HpackHeaderTable {
   // Determine the set of entries which would be evicted by the insertion
   // of |name| & |value| into the table, as per section 3.3.3. No eviction
   // actually occurs. The set is returned via range [begin_out, end_out).
-  void EvictionSet(base::StringPiece name, base::StringPiece value,
+  void EvictionSet(StringPiece name,
+                   StringPiece value,
                    EntryTable::iterator* begin_out,
                    EntryTable::iterator* end_out);
 
@@ -99,23 +91,13 @@ class NET_EXPORT_PRIVATE HpackHeaderTable {
   // and |value| must not be owned by an entry which could be evicted. The
   // added HpackEntry is returned, or NULL is returned if all entries were
   // evicted and the empty table is of insufficent size for the representation.
-  HpackEntry* TryAddEntry(base::StringPiece name, base::StringPiece value);
-
-  // Toggles the presence of a dynamic entry in the reference set. Returns
-  // true if the entry was added, or false if removed. It is an error to
-  // Toggle(entry) if |entry->state()| != 0.
-  bool Toggle(HpackEntry* entry);
-
-  // Removes all entries from the reference set. Sets the state of each removed
-  // entry to zero.
-  void ClearReferenceSet();
+  const HpackEntry* TryAddEntry(StringPiece name, StringPiece value);
 
   void DebugLogTableState() const;
 
  private:
   // Returns number of evictions required to enter |name| & |value|.
-  size_t EvictionCountForEntry(base::StringPiece name,
-                               base::StringPiece value) const;
+  size_t EvictionCountForEntry(StringPiece name, StringPiece value) const;
 
   // Returns number of evictions required to reclaim |reclaim_size| table size.
   size_t EvictionCountToReclaim(size_t reclaim_size) const;
@@ -123,13 +105,13 @@ class NET_EXPORT_PRIVATE HpackHeaderTable {
   // Evicts |count| oldest entries from the table.
   void Evict(size_t count);
 
+  // |static_entries_| and |static_index_| are owned by HpackStaticTable
+  // singleton.
+  const EntryTable& static_entries_;
   EntryTable dynamic_entries_;
-  EntryTable static_entries_;
 
-  // Full table index, over |dynamic_entries_| and |static_entries_|.
-  OrderedEntrySet index_;
-  // The reference set is strictly a subset of |dynamic_entries_|.
-  OrderedEntrySet reference_set_;
+  const OrderedEntrySet& static_index_;
+  OrderedEntrySet dynamic_index_;
 
   // Last acknowledged value for SETTINGS_HEADER_TABLE_SIZE.
   size_t settings_size_bound_;