119 FieldLookupTable(quint32 maxTableSize,
bool useIndex);
121 bool prependField(
const QByteArray &name,
const QByteArray &value);
124 quint32 numberOfEntries()
const;
125 quint32 numberOfStaticEntries()
const;
126 quint32 numberOfDynamicEntries()
const;
127 quint32 dynamicDataSize()
const;
128 quint32 dynamicDataCapacity()
const;
129 quint32 maxDynamicDataCapacity()
const;
130 void clearDynamicTable();
132 bool indexIsValid(quint32 index)
const;
133 quint32 indexOf(
const QByteArray &name,
const QByteArray &value)
const;
134 quint32 indexOf(
const QByteArray &name)
const;
135 bool field(quint32 index, QByteArray *name, QByteArray *value)
const;
136 bool fieldName(quint32 index, QByteArray *dst)
const;
137 bool fieldValue(quint32 index, QByteArray *dst)
const;
139 bool updateDynamicTableSize(quint32 size);
140 void setMaxDynamicTableSize(quint32 size);
142 static const std::vector<HeaderField> &staticPart();
147 quint32 maxTableSize;
152 quint32 tableCapacity;
154 using Chunk = std::vector<HeaderField>;
155 using ChunkPtr = std::unique_ptr<Chunk>;
156 std::deque<ChunkPtr> chunks;
157 using size_type = std::deque<ChunkPtr>::size_type;
160 friend struct SearchEntry;
165 SearchEntry(
const HeaderField *f,
const Chunk *c,
166 quint32 o,
const FieldLookupTable *t);
168 const HeaderField *field;
170 const quint32 offset;
171 const FieldLookupTable *table;
173 bool operator < (
const SearchEntry &rhs)
const;
177 std::set<SearchEntry> searchIndex;
179 SearchEntry frontKey()
const;
180 SearchEntry backKey()
const;
182 bool fieldAt(quint32 index, HeaderField *field)
const;
184 const HeaderField &front()
const;
185 HeaderField &front();
186 const HeaderField &back()
const;
193 quint32 indexOfChunk(
const Chunk *chunk)
const;
194 quint32 keyToIndex(
const SearchEntry &key)
const;
196 enum class CompareMode {
201 static std::vector<HeaderField>::const_iterator findInStaticPart(
const HeaderField &field, CompareMode mode);
203 mutable QByteArray dummyDst;
205 Q_DISABLE_COPY_MOVE(FieldLookupTable)