Home / Class/ QpackHuffmanDecoder Class — netty Architecture

QpackHuffmanDecoder Class — netty Architecture

Architecture documentation for the QpackHuffmanDecoder class in QpackHuffmanDecoder.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  fdc838f2_6462_b845_23d3_793f69152983["QpackHuffmanDecoder"]
  ffd2127a_e6fb_1bba_6d31_59b029020764["QpackHuffmanDecoder.java"]
  fdc838f2_6462_b845_23d3_793f69152983 -->|defined in| ffd2127a_e6fb_1bba_6d31_59b029020764
  4a7a7e35_98f7_bf19_68d7_b830d1043b81["QpackHuffmanDecoder()"]
  fdc838f2_6462_b845_23d3_793f69152983 -->|method| 4a7a7e35_98f7_bf19_68d7_b830d1043b81
  6ee92640_47c2_01cc_a561_746f4c81d79d["AsciiString()"]
  fdc838f2_6462_b845_23d3_793f69152983 -->|method| 6ee92640_47c2_01cc_a561_746f4c81d79d
  8ad45b78_06a3_2730_92b9_80d420a604b2["process()"]
  fdc838f2_6462_b845_23d3_793f69152983 -->|method| 8ad45b78_06a3_2730_92b9_80d420a604b2
  ee79763d_1ce1_c963_bc8e_86866ad73744["processNibble()"]
  fdc838f2_6462_b845_23d3_793f69152983 -->|method| ee79763d_1ce1_c963_bc8e_86866ad73744

Relationship Graph

Source Code

codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanDecoder.java lines 22–4717

final class QpackHuffmanDecoder implements ByteProcessor {

    /* Scroll to the bottom! */

    private static final byte HUFFMAN_COMPLETE = 1;
    private static final byte HUFFMAN_EMIT_SYMBOL = 1 << 1;
    private static final byte HUFFMAN_FAIL = 1 << 2;

    private static final int HUFFMAN_COMPLETE_SHIFT = HUFFMAN_COMPLETE << 8;
    private static final int HUFFMAN_EMIT_SYMBOL_SHIFT = HUFFMAN_EMIT_SYMBOL << 8;
    private static final int HUFFMAN_FAIL_SHIFT = HUFFMAN_FAIL << 8;

    /**
     * A table of byte tuples (state, flags, output).   They are packed together as:
     * <p>
     * state<<16 + flags<<8 + output
     */
    private static final int[] HUFFS = new int[] {
            // Node 0 (Root Node, never emits symbols.)
            4 << 16,
            5 << 16,
            7 << 16,
            8 << 16,
            11 << 16,
            12 << 16,
            16 << 16,
            19 << 16,
            25 << 16,
            28 << 16,
            32 << 16,
            35 << 16,
            42 << 16,
            49 << 16,
            57 << 16,
            (64 << 16) + (HUFFMAN_COMPLETE << 8),

            // Node 1
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 48,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 49,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 50,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 97,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 99,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 101,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 105,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 111,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 115,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 116,
            13 << 16,
            14 << 16,
            17 << 16,
            18 << 16,
            20 << 16,
            21 << 16,

            // Node 2
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 48,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 49,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 50,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 97,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 99,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 101,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 105,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 111,

            // Node 3
            (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48,
            (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48,
            (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48,
            (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 48,
            (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49,
            (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49,
            (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49,
            (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 49,

Frequently Asked Questions

What is the QpackHuffmanDecoder class?
QpackHuffmanDecoder is a class in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanDecoder.java.
Where is QpackHuffmanDecoder defined?
QpackHuffmanDecoder is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanDecoder.java at line 22.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free