proxygen
proxygen::compress::QMINScheme Class Reference

#include <QMINScheme.h>

Inheritance diagram for proxygen::compress::QMINScheme:
proxygen::compress::CompressionScheme folly::EventBase::LoopCallback

Classes

struct  QMINAck
 

Public Member Functions

 QMINScheme (CompressionSimulator *sim, uint32_t)
 
 ~QMINScheme ()
 
std::unique_ptr< AckgetAck (uint16_t) override
 
void recvAck (std::unique_ptr< Ack > generic_ack) override
 
std::pair< FrameFlags, std::unique_ptr< folly::IOBuf > > encode (bool, std::vector< compress::Header > allHeaders, SimStats &stats) override
 
void decode (FrameFlags, std::unique_ptr< folly::IOBuf > encodedReq, SimStats &, SimStreamingCallback &callback) override
 
uint32_t getHolBlockCount () const override
 
void runLoopCallback () noexceptoverride
 
void write_ctl_msg (const void *buf, size_t sz, unsigned idx)
 
- Public Member Functions inherited from proxygen::compress::CompressionScheme
 CompressionScheme (CompressionSimulator *sim)
 
virtual ~CompressionScheme ()
 
- Public Member Functions inherited from folly::EventBase::LoopCallback
virtual ~LoopCallback ()=default
 
void cancelLoopCallback ()
 
bool isLoopCallbackScheduled () const
 

Static Public Member Functions

static struct stream_chunkstream_chunk_new (size_t off, const void *buf, size_t bufsz)
 
static void insert_chunk (struct stream *stream, struct stream_chunk *new_chunk)
 
static struct stream_chunkmaybe_pop_chunk (struct stream *stream)
 
static void write_enc2dec (void *ctx, const void *buf, size_t sz)
 
static void write_dec2enc (void *ctx, const void *buf, size_t sz)
 

Public Attributes

char * qms_idstr
 
struct qmin_enc * qms_enc
 
struct qmin_dec * qms_dec
 
unsigned qms_next_stream_id_to_encode
 
struct streamqms_streams
 
struct {
   struct qmin_ctl_out   out
 
   size_t   write_off
 
   size_t   sz
 
   unsigned char   buf [0x1000]
 
qms_ctl [2]
 
- Public Attributes inherited from proxygen::compress::CompressionScheme
std::list< BlockInfoencodedBlocks
 
std::list< BlockInfopacketBlocks
 
size_t index {0}
 
std::chrono::milliseconds prev
 
size_t packetBytes {0}
 
std::chrono::milliseconds decodeDelay
 
std::list< uint16_tpacketIndices
 

Additional Inherited Members

- Public Types inherited from proxygen::compress::CompressionScheme
using BlockInfo = std::tuple< FrameFlags, bool, std::unique_ptr< folly::IOBuf >, SimStreamingCallback * >
 

Detailed Description

Definition at line 124 of file QMINScheme.h.

Constructor & Destructor Documentation

proxygen::compress::QMINScheme::QMINScheme ( CompressionSimulator sim,
uint32_t   
)
inlineexplicit

Definition at line 159 of file QMINScheme.h.

References qmin_dec_new(), qmin_enc_new(), QSIDE_CLIENT, QSIDE_SERVER, s_seq, and stream::sm_chunks.

160  : CompressionScheme(sim) {
161  // TODO: set table size?
162  qms_ctl[0].out.qco_write = write_enc2dec;
163  qms_ctl[0].write_off = 0;
164  qms_ctl[0].sz = 0;
165  qms_ctl[1].out.qco_write = write_dec2enc;
166  qms_ctl[1].write_off = 0;
167  qms_ctl[1].sz = 0;
168 
169  qms_idstr = (char *)malloc(8);
170  sprintf(qms_idstr, "%u", s_seq++);
171 
174 
175  qms_streams = (struct stream *)calloc(2, sizeof(qms_streams[0]));
176  TAILQ_INIT(&qms_streams[0].sm_chunks);
177  TAILQ_INIT(&qms_streams[1].sm_chunks);
178 
180  }
static unsigned s_seq
Definition: QMINScheme.h:107
struct stream_chunks_head sm_chunks
Definition: QMINScheme.h:119
struct proxygen::compress::QMINScheme::@102 qms_ctl[2]
struct qmin_dec * qms_dec
Definition: QMINScheme.h:452
struct qmin_enc * qms_enc
Definition: QMINScheme.h:451
static void write_enc2dec(void *ctx, const void *buf, size_t sz)
Definition: QMINScheme.h:439
CompressionScheme(CompressionSimulator *sim)
static struct qmin_enc * qmin_enc_new(int, unsigned, const struct qmin_ctl_out *, const char *)
Definition: QMINScheme.h:46
struct qmin_ctl_out out
Definition: QMINScheme.h:463
static void write_dec2enc(void *ctx, const void *buf, size_t sz)
Definition: QMINScheme.h:444
static struct qmin_dec * qmin_dec_new(int, unsigned, const struct qmin_ctl_out *, const char *)
Definition: QMINScheme.h:78
proxygen::compress::QMINScheme::~QMINScheme ( )
inline

Definition at line 182 of file QMINScheme.h.

References bm::free(), qmin_dec_destroy(), and qmin_enc_destroy().

182  {
183  free(qms_streams);
186  free(qms_idstr);
187  }
static void qmin_dec_destroy(struct qmin_dec *)
Definition: QMINScheme.h:102
static void qmin_enc_destroy(struct qmin_enc *)
Definition: QMINScheme.h:75
struct qmin_dec * qms_dec
Definition: QMINScheme.h:452
struct qmin_enc * qms_enc
Definition: QMINScheme.h:451
void free()

Member Function Documentation

void proxygen::compress::QMINScheme::decode ( FrameFlags  ,
std::unique_ptr< folly::IOBuf encodedReq,
SimStats ,
SimStreamingCallback callback 
)
inlineoverridevirtual

Implements proxygen::compress::CompressionScheme.

Definition at line 338 of file QMINScheme.h.

References wangle::HTTPHeaderSize::compressed, folly::IOBuf::computeChainDataLength(), folly::test::end(), bm::free(), name, proxygen::compress::SimStreamingCallback::onHeader(), proxygen::compress::SimStreamingCallback::onHeadersComplete(), qmin_dec_cmds_in(), qmin_dec_decode(), qmin_dec_stream_done(), stream_chunk::sc_buf, stream_chunk::sc_sz, string, folly::IOBuf::trimStart(), uint32_t, wangle::HTTPHeaderSize::uncompressed, and value.

341  {
342  folly::io::Cursor cursor(encodedReq.get());
343  const unsigned char *buf;
344  ssize_t nread;
345  size_t ctl_sz, stream_off;
346  char outbuf[0x1000];
347  unsigned name_len, val_len;
348  unsigned decoded_size = 0;
349  uint32_t stream_id;
350 
351  qms_ctl[1].out.qco_ctx = this;
352 
353  /* Read Stream ID: */
354  buf = cursor.data();
355  memcpy(&stream_id, buf, sizeof(uint32_t));
356  encodedReq->trimStart(sizeof(uint32_t));
357 
358  /* Read size of control messages */
359  buf = cursor.data();
360  memcpy(&ctl_sz, buf, sizeof(ctl_sz));
361  encodedReq->trimStart(sizeof(ctl_sz));
362 
363  /* Feed control messages to the decoder: */
364  if (ctl_sz) {
365  struct stream_chunk *chunk;
366 
367  /* Read stream offset: */
368  buf = cursor.data();
369  memcpy(&stream_off, buf, sizeof(stream_off));
370  encodedReq->trimStart(sizeof(stream_off));
371 
372  buf = cursor.data();
373  chunk = stream_chunk_new(stream_off, buf, ctl_sz);
374  encodedReq->trimStart(ctl_sz);
375 
376  insert_chunk(&qms_streams[1], chunk);
377 
378  while ((chunk = maybe_pop_chunk(&qms_streams[1]))) {
379  nread = qmin_dec_cmds_in(qms_dec, chunk->sc_buf, chunk->sc_sz);
380  if (nread < 0 || (size_t)nread != chunk->sc_sz) {
381  VLOG(1) << "error: qmin_dec_cmds_in failed";
382  assert(0);
383  }
384  free(chunk);
385  }
386  }
387 
388  buf = cursor.data();
389  const unsigned char *const end = buf + cursor.length();
390 
391  while (buf < end) {
392  nread = qmin_dec_decode(
393  qms_dec, buf, end - buf, outbuf, sizeof(outbuf), &name_len, &val_len);
394  if (nread < 0) {
395  VLOG(1) << "error: decoder failed!";
396  assert(0);
397  return;
398  }
399  assert(nread);
400  buf += nread;
401  decoded_size += name_len + val_len;
402  std::string name{outbuf, name_len};
403  std::string value{outbuf + name_len, val_len};
404  callback.onHeader(name, value);
405  }
406 
407  if (0 != qmin_dec_stream_done(qms_dec, stream_id)) {
408  assert(0);
409  VLOG(1) << "error: qmin_dec_stream_done failed";
410  }
411 
413  sz.compressed = encodedReq->computeChainDataLength();
414  sz.uncompressed = decoded_size;
415  callback.onHeadersComplete(sz);
416  }
struct proxygen::compress::QMINScheme::@102 qms_ctl[2]
static void insert_chunk(struct stream *stream, struct stream_chunk *new_chunk)
Definition: QMINScheme.h:138
struct qmin_dec * qms_dec
Definition: QMINScheme.h:452
const char * name
Definition: http_parser.c:437
static ssize_t qmin_dec_decode(struct qmin_dec *, const void *, size_t, char *, size_t, unsigned *, unsigned *)
Definition: QMINScheme.h:89
size_t sc_sz
Definition: QMINScheme.h:114
auto end(TestAdlIterable &instance)
Definition: ForeachTest.cpp:62
static const char *const value
Definition: Conv.cpp:50
void free()
std::size_t computeChainDataLength() const
Definition: IOBuf.cpp:501
static int qmin_dec_stream_done(struct qmin_dec *, unsigned)
Definition: QMINScheme.h:98
static struct stream_chunk * maybe_pop_chunk(struct stream *stream)
Definition: QMINScheme.h:149
const char * string
Definition: Conv.cpp:212
unsigned char sc_buf[0]
Definition: QMINScheme.h:115
void trimStart(std::size_t amount)
Definition: IOBuf.h:703
unsigned char buf[0x1000]
Definition: QMINScheme.h:466
static struct stream_chunk * stream_chunk_new(size_t off, const void *buf, size_t bufsz)
Definition: QMINScheme.h:126
static ssize_t qmin_dec_cmds_in(struct qmin_dec *, const void *, size_t)
Definition: QMINScheme.h:84
std::pair<FrameFlags, std::unique_ptr<folly::IOBuf> > proxygen::compress::QMINScheme::encode ( bool  ,
std::vector< compress::Header allHeaders,
SimStats stats 
)
inlineoverridevirtual

Implements proxygen::compress::CompressionScheme.

Definition at line 243 of file QMINScheme.h.

References proxygen::compress::FrameFlags::allowOOO, proxygen::compress::SimStats::compressed, folly::IOBuf::copyBuffer(), bm::free(), name, QES_ERR, QES_NOBUFS, QES_OK, QIT_YES, qmin_enc_encode(), qmin_enc_end_stream_headers(), qmin_enc_to_str(), string, folly::pushmi::operators::transform, uint32_t, and proxygen::compress::SimStats::uncompressed.

246  {
247  const size_t max_ctl = 0x1000;
248  const size_t max_comp = 0x1000;
249  unsigned char outbuf[max_ctl + max_comp];
250  unsigned char *const comp = outbuf + max_ctl;
251  size_t nw, comp_sz;
252  enum qmin_encode_status qes;
253  FrameFlags flags;
254 
255  qms_ctl[0].out.qco_ctx = this;
256  comp_sz = 0;
257 
258  for (const auto header : allHeaders) {
259  std::string name{header.name->c_str()};
260  std::transform(name.begin(), name.end(), name.begin(), ::tolower);
261  qes = qmin_enc_encode(qms_enc,
263  name.c_str(),
264  name.length(),
265  header.value->c_str(),
266  header.value->length(),
267  QIT_YES,
268  comp + comp_sz,
269  max_comp - comp_sz,
270  &nw);
271  switch (qes) {
272  case QES_OK:
273  /* 2 is a magic number added to the uncompressed size by the other
274  * encoder. We follow suit to make the numbers match.
275  */
276  stats.uncompressed += name.length() + header.value->length() + 2;
277  stats.compressed += nw;
278  comp_sz += nw;
279  break;
280  case QES_NOBUFS:
281  VLOG(1) << "compressed header does not fit into temporary "
282  "output buffer";
283  return {flags, nullptr};
284  case QES_ERR:
285  VLOG(1) << "error: " << strerror(errno);
286  assert(0);
287  return {flags, nullptr};
288  }
289  }
290 
291  {
292  size_t sz;
293  char *state = qmin_enc_to_str(qms_enc, &sz);
294  VLOG(4) << "encoder state: " << state;
295  free(state);
296  }
297 
299  VLOG(1) << "error: qmin_enc_end_stream_headers failed";
300  assert(0);
301  }
302 
303  /* Prepend control message and its size: */
304  size_t ctl_msg_sz = qms_ctl[0].sz;
305  qms_ctl[0].sz = 0;
306  size_t ctl_msg_sz_with_off;
307  if (ctl_msg_sz) {
308  memcpy(outbuf + max_ctl - ctl_msg_sz, qms_ctl[0].buf, ctl_msg_sz);
309  memcpy(outbuf + max_ctl - ctl_msg_sz - sizeof(qms_ctl[0].write_off),
310  &qms_ctl[0].write_off,
311  sizeof(qms_ctl[0].write_off));
312  qms_ctl[0].write_off += ctl_msg_sz;
313  ctl_msg_sz_with_off = ctl_msg_sz + sizeof(qms_ctl[0].write_off);
314  } else
315  ctl_msg_sz_with_off = 0;
316  memcpy(outbuf + max_ctl - ctl_msg_sz_with_off - sizeof(ctl_msg_sz),
317  &ctl_msg_sz,
318  sizeof(ctl_msg_sz));
319 
320  stats.compressed += ctl_msg_sz;
321 
322  /* Prepend Stream ID: */
323  memcpy(outbuf + max_ctl - ctl_msg_sz_with_off - sizeof(ctl_msg_sz) -
324  sizeof(uint32_t),
327 
329  flags.allowOOO = true;
330  return {
331  flags,
332  folly::IOBuf::copyBuffer(outbuf + max_ctl - ctl_msg_sz_with_off -
333  sizeof(ctl_msg_sz) - sizeof(uint32_t),
334  comp_sz + ctl_msg_sz_with_off +
335  sizeof(ctl_msg_sz) + sizeof(uint32_t))};
336  }
flags
Definition: http_parser.h:127
static int qmin_enc_end_stream_headers(struct qmin_enc *)
Definition: QMINScheme.h:69
struct proxygen::compress::QMINScheme::@102 qms_ctl[2]
PUSHMI_INLINE_VAR constexpr detail::transform_fn transform
Definition: transform.h:158
const char * name
Definition: http_parser.c:437
struct qmin_enc * qms_enc
Definition: QMINScheme.h:451
static char * qmin_enc_to_str(struct qmin_enc *, size_t *)
Definition: QMINScheme.h:72
void free()
const char * string
Definition: Conv.cpp:212
static enum qmin_encode_status qmin_enc_encode(struct qmin_enc *, unsigned, const char *, unsigned, const char *, unsigned, enum qmin_index_type, unsigned char *, size_t, size_t *)
Definition: QMINScheme.h:57
qmin_encode_status
Definition: QMINScheme.h:36
unsigned char buf[0x1000]
Definition: QMINScheme.h:466
static std::unique_ptr< IOBuf > copyBuffer(const void *buf, std::size_t size, std::size_t headroom=0, std::size_t minTailroom=0)
Definition: IOBuf.h:1587
state
Definition: http_parser.c:272
std::unique_ptr<Ack> proxygen::compress::QMINScheme::getAck ( uint16_t  )
inlineoverridevirtual

Implements proxygen::compress::CompressionScheme.

Definition at line 204 of file QMINScheme.h.

References folly::gen::move.

204  {
205  if (qms_ctl[1].sz) {
206  auto ack = std::make_unique<QMINAck>(
207  qms_ctl[1].write_off, qms_ctl[1].buf, qms_ctl[1].sz);
208  VLOG(4) << "sent ACK for instance " << qms_idstr
209  << " off: " << qms_ctl[1].write_off << "; sz: " << qms_ctl[1].sz;
210  qms_ctl[1].write_off += qms_ctl[1].sz;
211  qms_ctl[1].sz = 0;
212  return std::move(ack);
213  } else {
214  assert(0);
215  return nullptr;
216  }
217  }
struct proxygen::compress::QMINScheme::@102 qms_ctl[2]
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
uint32_t proxygen::compress::QMINScheme::getHolBlockCount ( ) const
inlineoverridevirtual

Implements proxygen::compress::CompressionScheme.

Definition at line 418 of file QMINScheme.h.

418  {
419  return 0;
420  }
static void proxygen::compress::QMINScheme::insert_chunk ( struct stream stream,
struct stream_chunk new_chunk 
)
inlinestatic

Definition at line 138 of file QMINScheme.h.

References stream_chunk::sc_off, and stream::sm_chunks.

139  {
140  struct stream_chunk *chunk;
141  TAILQ_FOREACH(chunk, &stream->sm_chunks, sc_next)
142  if (chunk->sc_off > new_chunk->sc_off) {
143  TAILQ_INSERT_BEFORE(chunk, new_chunk, sc_next);
144  return;
145  }
146  TAILQ_INSERT_TAIL(&stream->sm_chunks, new_chunk, sc_next);
147  }
struct stream_chunks_head sm_chunks
Definition: QMINScheme.h:119
if(FOLLY_USE_SYMBOLIZER) add_library(folly_exception_tracer_base ExceptionTracer.cpp StackTrace.cpp) apply_folly_compile_options_to_target(folly_exception_tracer_base) target_link_libraries(folly_exception_tracer_base PUBLIC folly) add_library(folly_exception_tracer ExceptionStackTraceLib.cpp ExceptionTracerLib.cpp) apply_folly_compile_options_to_target(folly_exception_tracer) target_link_libraries(folly_exception_tracer PUBLIC folly_exception_tracer_base) add_library(folly_exception_counter ExceptionCounterLib.cpp) apply_folly_compile_options_to_target(folly_exception_counter) target_link_libraries(folly_exception_counter PUBLIC folly_exception_tracer) install(FILES ExceptionAbi.h ExceptionCounterLib.h ExceptionTracer.h ExceptionTracerLib.h StackTrace.h DESTINATION $
Definition: CMakeLists.txt:1
size_t sc_off
Definition: QMINScheme.h:113
static struct stream_chunk* proxygen::compress::QMINScheme::maybe_pop_chunk ( struct stream stream)
inlinestatic

Definition at line 149 of file QMINScheme.h.

References stream_chunk::sc_off, stream_chunk::sc_sz, stream::sm_chunks, and stream::sm_read_off.

149  {
150  struct stream_chunk *chunk = TAILQ_FIRST(&stream->sm_chunks);
151  if (chunk && chunk->sc_off == stream->sm_read_off) {
152  TAILQ_REMOVE(&stream->sm_chunks, chunk, sc_next);
153  stream->sm_read_off += chunk->sc_sz;
154  return chunk;
155  } else
156  return NULL;
157  }
struct stream_chunks_head sm_chunks
Definition: QMINScheme.h:119
size_t sc_sz
Definition: QMINScheme.h:114
size_t sm_read_off
Definition: QMINScheme.h:120
size_t sc_off
Definition: QMINScheme.h:113
void proxygen::compress::QMINScheme::recvAck ( std::unique_ptr< Ack generic_ack)
inlineoverridevirtual

Implements proxygen::compress::CompressionScheme.

Definition at line 219 of file QMINScheme.h.

References bm::free(), qmin_enc_cmds_in(), stream_chunk::sc_buf, and stream_chunk::sc_sz.

219  {
220  struct stream_chunk *chunk;
221 
222  CHECK(generic_ack);
223  auto ack = dynamic_cast<QMINAck *>(generic_ack.get());
224  CHECK_NOTNULL(ack);
225 
226  VLOG(4) << "received ACK for instance " << qms_idstr
227  << " off: " << ack->qma_off << "; sz: " << ack->qma_sz;
228 
229  chunk = stream_chunk_new(ack->qma_off, ack->qma_buf, ack->qma_sz);
230  insert_chunk(&qms_streams[0], chunk);
231 
232  while ((chunk = maybe_pop_chunk(&qms_streams[0]))) {
233  ssize_t nread;
234  nread = qmin_enc_cmds_in(qms_enc, chunk->sc_buf, chunk->sc_sz);
235  if (nread < 0 || (size_t)nread != chunk->sc_sz) {
236  VLOG(1) << "error: qmin_enc_cmds_in failed";
237  assert(0);
238  }
239  free(chunk);
240  }
241  }
static void insert_chunk(struct stream *stream, struct stream_chunk *new_chunk)
Definition: QMINScheme.h:138
static ssize_t qmin_enc_cmds_in(struct qmin_enc *, const void *, size_t)
Definition: QMINScheme.h:52
size_t sc_sz
Definition: QMINScheme.h:114
struct qmin_enc * qms_enc
Definition: QMINScheme.h:451
void free()
static struct stream_chunk * maybe_pop_chunk(struct stream *stream)
Definition: QMINScheme.h:149
unsigned char sc_buf[0]
Definition: QMINScheme.h:115
static struct stream_chunk * stream_chunk_new(size_t off, const void *buf, size_t bufsz)
Definition: QMINScheme.h:126
void proxygen::compress::QMINScheme::runLoopCallback ( )
inlineoverridevirtualnoexcept

Reimplemented from proxygen::compress::CompressionScheme.

Definition at line 422 of file QMINScheme.h.

422  {
424  }
static struct stream_chunk* proxygen::compress::QMINScheme::stream_chunk_new ( size_t  off,
const void *  buf,
size_t  bufsz 
)
inlinestatic

Definition at line 126 of file QMINScheme.h.

References stream_chunk::sc_buf, stream_chunk::sc_off, and stream_chunk::sc_sz.

128  {
129  struct stream_chunk *chunk =
130  (struct stream_chunk *)malloc(sizeof(*chunk) + bufsz);
131  assert(chunk);
132  chunk->sc_off = off;
133  chunk->sc_sz = bufsz;
134  memcpy(chunk->sc_buf, buf, bufsz);
135  return chunk;
136  }
size_t sc_sz
Definition: QMINScheme.h:114
size_t sc_off
Definition: QMINScheme.h:113
unsigned char sc_buf[0]
Definition: QMINScheme.h:115
unsigned char buf[0x1000]
Definition: QMINScheme.h:466
void proxygen::compress::QMINScheme::write_ctl_msg ( const void *  buf,
size_t  sz,
unsigned  idx 
)
inline

Definition at line 426 of file QMINScheme.h.

Referenced by write_dec2enc(), and write_enc2dec().

426  {
427  size_t avail = sizeof(qms_ctl[idx].buf) - qms_ctl[idx].sz;
428  assert(avail >= sz);
429  if (avail < sz) {
430  VLOG(1) << "Truncating control message from " << sz << " to " << avail
431  << "bytes";
432  sz = avail;
433  }
434  memcpy(qms_ctl[idx].buf + qms_ctl[idx].sz, buf, sz);
435  qms_ctl[idx].sz += sz;
436  VLOG(4) << "Wrote " << sz << " bytes to control channel";
437  }
struct proxygen::compress::QMINScheme::@102 qms_ctl[2]
unsigned char buf[0x1000]
Definition: QMINScheme.h:466
static void proxygen::compress::QMINScheme::write_dec2enc ( void *  ctx,
const void *  buf,
size_t  sz 
)
inlinestatic

Definition at line 444 of file QMINScheme.h.

References write_ctl_msg().

444  {
445  QMINScheme *const qms = (QMINScheme *)ctx;
446  qms->write_ctl_msg(buf, sz, 1);
447  }
QMINScheme(CompressionSimulator *sim, uint32_t)
Definition: QMINScheme.h:159
unsigned char buf[0x1000]
Definition: QMINScheme.h:466
static void proxygen::compress::QMINScheme::write_enc2dec ( void *  ctx,
const void *  buf,
size_t  sz 
)
inlinestatic

Definition at line 439 of file QMINScheme.h.

References write_ctl_msg().

439  {
440  QMINScheme *const qms = (QMINScheme *)ctx;
441  qms->write_ctl_msg(buf, sz, 0);
442  }
QMINScheme(CompressionSimulator *sim, uint32_t)
Definition: QMINScheme.h:159
unsigned char buf[0x1000]
Definition: QMINScheme.h:466

Member Data Documentation

unsigned char proxygen::compress::QMINScheme::buf[0x1000]

Definition at line 466 of file QMINScheme.h.

struct qmin_ctl_out proxygen::compress::QMINScheme::out

Definition at line 463 of file QMINScheme.h.

struct { ... } proxygen::compress::QMINScheme::qms_ctl[2]
struct qmin_dec* proxygen::compress::QMINScheme::qms_dec

Definition at line 452 of file QMINScheme.h.

struct qmin_enc* proxygen::compress::QMINScheme::qms_enc

Definition at line 451 of file QMINScheme.h.

char* proxygen::compress::QMINScheme::qms_idstr

Definition at line 449 of file QMINScheme.h.

unsigned proxygen::compress::QMINScheme::qms_next_stream_id_to_encode

Definition at line 457 of file QMINScheme.h.

struct stream* proxygen::compress::QMINScheme::qms_streams

Definition at line 460 of file QMINScheme.h.

size_t proxygen::compress::QMINScheme::sz

Definition at line 465 of file QMINScheme.h.

size_t proxygen::compress::QMINScheme::write_off

Definition at line 464 of file QMINScheme.h.


The documentation for this class was generated from the following file: