digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__gzip {
label="Gzip";
graph[style=dotted];
gzip__seq [label=<
pos | size | type | id |
0 | 2 | | magic |
2 | 1 | u1→CompressionMethods | compression_method |
3 | 1 | Flags | flags |
4 | 4 | u4le | mod_time |
8 | ... | switch (compression_method) | extra_flags |
... | 1 | u1→Oses | os |
... | ... | Extras | extras |
... | ... | | name |
... | ... | | comment |
... | 2 | u2le | header_crc16 |
... | ((_io.size - _io.pos) - 8) | | body |
... | 4 | u4le | body_crc32 |
... | 4 | u4le | len_uncompressed |
>];
gzip__seq_extra_flags_switch [label=<
case | type |
:compression_methods_deflate | ExtraFlagsDeflate |
>];
subgraph cluster__flags {
label="Gzip::Flags";
graph[style=dotted];
flags__seq [label=<
pos | size | type | id |
0 | 3b | b3 | reserved1 |
0:3 | 1b | BitsType1(BigBitEndian) | has_comment |
0:4 | 1b | BitsType1(BigBitEndian) | has_name |
0:5 | 1b | BitsType1(BigBitEndian) | has_extra |
0:6 | 1b | BitsType1(BigBitEndian) | has_header_crc |
0:7 | 1b | BitsType1(BigBitEndian) | is_text |
>];
}
subgraph cluster__extra_flags_deflate {
label="Gzip::ExtraFlagsDeflate";
graph[style=dotted];
extra_flags_deflate__seq [label=<
pos | size | type | id |
0 | 1 | u1→CompressionStrengths | compression_strength |
>];
}
subgraph cluster__subfields {
label="Gzip::Subfields";
graph[style=dotted];
subfields__seq [label=<
pos | size | type | id |
0 | ... | Subfield | entries |
repeat to end of stream |
>];
}
subgraph cluster__subfield {
label="Gzip::Subfield";
graph[style=dotted];
subfield__seq [label=<
pos | size | type | id |
0 | 2 | u2le | id |
2 | 2 | u2le | len_data |
4 | len_data | | data |
>];
}
subgraph cluster__extras {
label="Gzip::Extras";
graph[style=dotted];
extras__seq [label=<
pos | size | type | id |
0 | 2 | u2le | len_subfields |
2 | len_subfields | Subfields | subfields |
>];
}
}
gzip__seq:flags_type -> flags__seq [style=bold];
gzip__seq:extra_flags_type -> gzip__seq_extra_flags_switch [style=bold];
gzip__seq_extra_flags_switch:case0 -> extra_flags_deflate__seq [style=bold];
gzip__seq:compression_method_type -> gzip__seq:extra_flags_type [color="#404040"];
gzip__seq:extras_type -> extras__seq [style=bold];
subfields__seq:entries_type -> subfield__seq [style=bold];
subfield__seq:len_data_type -> subfield__seq:data_size [color="#404040"];
extras__seq:len_subfields_type -> extras__seq:subfields_size [color="#404040"];
extras__seq:subfields_type -> subfields__seq [style=bold];
}