digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__blender_blend {
label="BlenderBlend";
graph[style=dotted];
blender_blend__seq [label=<
pos | size | type | id |
0 | 12 | Header | hdr |
12 | ... | FileBlock | blocks |
repeat to end of stream |
>];
blender_blend__inst__sdna_structs [label=<
id | value |
sdna_structs | blocks[(blocks.length - 2)].body.structs |
>];
subgraph cluster__dna_struct {
label="BlenderBlend::DnaStruct";
graph[style=dotted];
dna_struct__seq [label=<
pos | size | type | id |
0 | 2 | u2le | idx_type |
2 | 2 | u2le | num_fields |
4 | 4 | DnaField | fields |
repeat num_fields times |
>];
dna_struct__inst__type [label=<
id | value |
type | _parent.types[idx_type] |
>];
}
subgraph cluster__file_block {
label="BlenderBlend::FileBlock";
graph[style=dotted];
file_block__seq [label=<
pos | size | type | id |
0 | 4 | str(ASCII) | code |
4 | 4 | u4le | len_body |
8 | _root.hdr.psize | | mem_addr |
... | 4 | u4le | sdna_index |
... | 4 | u4le | count |
... | ... | switch (code) | body |
>];
file_block__inst__sdna_struct [label=<
id | value |
sdna_struct | _root.sdna_structs[sdna_index] |
>];
file_block__seq_body_switch [label=<>];
}
subgraph cluster__dna1_body {
label="BlenderBlend::Dna1Body";
graph[style=dotted];
dna1_body__seq [label=<
pos | size | type | id |
0 | 4 | | id |
4 | 4 | | name_magic |
8 | 4 | u4le | num_names |
12 | ... | str(UTF-8) | names |
repeat num_names times |
... | ((4 - _io.pos) % 4) | | padding_1 |
... | 4 | | type_magic |
... | 4 | u4le | num_types |
... | ... | str(UTF-8) | types |
repeat num_types times |
... | ((4 - _io.pos) % 4) | | padding_2 |
... | 4 | | tlen_magic |
... | 2 | u2le | lengths |
repeat num_types times |
... | ((4 - _io.pos) % 4) | | padding_3 |
... | 4 | | strc_magic |
... | 4 | u4le | num_structs |
... | ... | DnaStruct | structs |
repeat num_structs times |
>];
}
subgraph cluster__header {
label="BlenderBlend::Header";
graph[style=dotted];
header__seq [label=<
pos | size | type | id |
0 | 7 | | magic |
7 | 1 | u1→PtrSize | ptr_size_id |
8 | 1 | u1→Endian | endian |
9 | 3 | str(ASCII) | version |
>];
header__inst__psize [label=<
id | value |
psize | (ptr_size_id == :ptr_size_bits_64 ? 8 : 4) |
>];
}
subgraph cluster__dna_field {
label="BlenderBlend::DnaField";
graph[style=dotted];
dna_field__seq [label=<
pos | size | type | id |
0 | 2 | u2le | idx_type |
2 | 2 | u2le | idx_name |
>];
dna_field__inst__type [label=<
id | value |
type | _parent._parent.types[idx_type] |
>];
dna_field__inst__name [label=<
id | value |
name | _parent._parent.names[idx_name] |
>];
}
}
blender_blend__seq:hdr_type -> header__seq [style=bold];
blender_blend__seq:blocks_type -> file_block__seq [style=bold];
dna1_body__seq:structs_type -> blender_blend__inst__sdna_structs [color="#404040"];
dna_struct__seq:fields_type -> dna_field__seq [style=bold];
dna_struct__seq:num_fields_type -> dna_struct__seq:fields__repeat [color="#404040"];
dna1_body__seq:types_type -> dna_struct__inst__type [color="#404040"];
dna_struct__seq:idx_type_type -> dna_struct__inst__type [color="#404040"];
header__inst__psize:psize_type -> file_block__seq:mem_addr_size [color="#404040"];
file_block__seq:body_type -> file_block__seq_body_switch [style=bold];
file_block__seq_body_switch:case0 -> dna1_body__seq [style=bold];
file_block__seq:code_type -> file_block__seq:body_type [color="#404040"];
blender_blend__inst__sdna_structs:sdna_structs_type -> file_block__inst__sdna_struct [color="#404040"];
file_block__seq:sdna_index_type -> file_block__inst__sdna_struct [color="#404040"];
dna1_body__seq:num_names_type -> dna1_body__seq:names__repeat [color="#404040"];
dna1_body__seq:num_types_type -> dna1_body__seq:types__repeat [color="#404040"];
dna1_body__seq:num_types_type -> dna1_body__seq:lengths__repeat [color="#404040"];
dna1_body__seq:structs_type -> dna_struct__seq [style=bold];
dna1_body__seq:num_structs_type -> dna1_body__seq:structs__repeat [color="#404040"];
header__seq:ptr_size_id_type -> header__inst__psize [color="#404040"];
dna1_body__seq:types_type -> dna_field__inst__type [color="#404040"];
dna_field__seq:idx_type_type -> dna_field__inst__type [color="#404040"];
dna1_body__seq:names_type -> dna_field__inst__name [color="#404040"];
dna_field__seq:idx_name_type -> dna_field__inst__name [color="#404040"];
}