digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__gettext_mo {
label="GettextMo";
graph[style=dotted];
gettext_mo__seq [label=<
pos | size | type | id |
0 | 4 | | signature |
4 | 24 | Mo | mo |
>];
subgraph cluster__hash_lookup_iteration {
label="GettextMo::HashLookupIteration";
graph[style=dotted];
hash_lookup_iteration__seq [label=<>];
hash_lookup_iteration__inst__original [label=<
id | value |
original | _root.mo.originals[idx].str |
>];
hash_lookup_iteration__inst__translation [label=<
id | value |
translation | _root.mo.translations[idx].str |
>];
hash_lookup_iteration__inst__next_idx [label=<
id | value |
next_idx | ((idx + collision_step) - (idx >= (_root.mo.num_hashtable_items - collision_step) ? _root.mo.num_hashtable_items : 0)) |
>];
hash_lookup_iteration__inst__next [label=<
pos | size | type | id |
0 | 0 | HashLookupIteration | next |
>];
}
subgraph cluster__lookup_iteration {
label="GettextMo::LookupIteration";
graph[style=dotted];
lookup_iteration__seq [label=<>];
lookup_iteration__inst__found [label=<
id | value |
found | query == current.original |
>];
lookup_iteration__inst__next [label=<
pos | size | type | id |
0 | 0 | LookupIteration | next |
>];
}
subgraph cluster__hashtable_lookup {
label="GettextMo::HashtableLookup";
graph[style=dotted];
hashtable_lookup__seq [label=<>];
hashtable_lookup__inst__collision_step [label=<
id | value |
collision_step | ((hash % (_root.mo.num_hashtable_items - 2)) + 1) |
>];
hashtable_lookup__inst__idx [label=<
id | value |
idx | (hash % _root.mo.num_hashtable_items) |
>];
hashtable_lookup__inst__hash_lookup_iteration [label=<
pos | size | type | id |
0 | 0 | HashLookupIteration | hash_lookup_iteration |
>];
hashtable_lookup__inst__entry [label=<
pos | size | type | id |
0 | 0 | LookupIteration | entry |
>];
}
subgraph cluster__mo {
label="GettextMo::Mo";
graph[style=dotted];
mo__seq [label=<
pos | size | type | id |
0 | 4 | Version | version |
4 | 4 | u4 | num_translations |
8 | 4 | u4 | ofs_originals |
12 | 4 | u4 | ofs_translations |
16 | 4 | u4 | num_hashtable_items |
20 | 4 | u4 | ofs_hashtable_items |
>];
mo__inst__originals [label=<
pos | size | type | id |
ofs_originals | 8 | Descriptor | originals |
repeat num_translations times |
>];
mo__inst__translations [label=<
pos | size | type | id |
ofs_translations | 8 | Descriptor | translations |
repeat num_translations times |
>];
mo__inst__hashtable_items [label=<
pos | size | type | id |
ofs_hashtable_items | 4 | HashtableItem | hashtable_items |
repeat num_hashtable_items times |
>];
subgraph cluster__version {
label="GettextMo::Mo::Version";
graph[style=dotted];
version__seq [label=<
pos | size | type | id |
0 | 4 | u4 | version_raw |
>];
version__inst__major [label=<
id | value |
major | (version_raw >> 16) |
>];
version__inst__minor [label=<
id | value |
minor | (version_raw & 65535) |
>];
}
subgraph cluster__hashtable_item {
label="GettextMo::Mo::HashtableItem";
graph[style=dotted];
hashtable_item__seq [label=<
pos | size | type | id |
0 | 4 | u4 | raw_val |
>];
hashtable_item__inst__mask [label=<>];
hashtable_item__inst__val_1 [label=<
id | value |
val_1 | (raw_val - 1) |
>];
hashtable_item__inst__is_system_dependent [label=<
id | value |
is_system_dependent | (val_1 & mask) == 1 |
>];
hashtable_item__inst__val [label=<
id | value |
val | (val_1 & ~(mask)) |
>];
}
subgraph cluster__descriptor {
label="GettextMo::Mo::Descriptor";
graph[style=dotted];
descriptor__seq [label=<
pos | size | type | id |
0 | 4 | u4 | len_str |
4 | 4 | u4 | ofs_str |
>];
descriptor__inst__str [label=<
pos | size | type | id |
ofs_str | len_str | str(UTF-8) | str |
>];
}
}
}
gettext_mo__seq:mo_type -> mo__seq [style=bold];
descriptor__inst__str:str_type -> hash_lookup_iteration__inst__original [color="#404040"];
descriptor__inst__str:str_type -> hash_lookup_iteration__inst__translation [color="#404040"];
hash_lookup_iteration__params:idx_type -> hash_lookup_iteration__inst__next_idx [color="#404040"];
hash_lookup_iteration__params:collision_step_type -> hash_lookup_iteration__inst__next_idx [color="#404040"];
hash_lookup_iteration__params:idx_type -> hash_lookup_iteration__inst__next_idx [color="#404040"];
mo__seq:num_hashtable_items_type -> hash_lookup_iteration__inst__next_idx [color="#404040"];
hash_lookup_iteration__params:collision_step_type -> hash_lookup_iteration__inst__next_idx [color="#404040"];
mo__seq:num_hashtable_items_type -> hash_lookup_iteration__inst__next_idx [color="#404040"];
hash_lookup_iteration__inst__next:next_type -> hash_lookup_iteration__seq [style=bold];
lookup_iteration__params:query_type -> lookup_iteration__inst__found [color="#404040"];
hash_lookup_iteration__inst__original:original_type -> lookup_iteration__inst__found [color="#404040"];
lookup_iteration__inst__next:next_type -> lookup_iteration__seq [style=bold];
hashtable_lookup__params:hash_type -> hashtable_lookup__inst__collision_step [color="#404040"];
mo__seq:num_hashtable_items_type -> hashtable_lookup__inst__collision_step [color="#404040"];
hashtable_lookup__params:hash_type -> hashtable_lookup__inst__idx [color="#404040"];
mo__seq:num_hashtable_items_type -> hashtable_lookup__inst__idx [color="#404040"];
hashtable_lookup__inst__hash_lookup_iteration:hash_lookup_iteration_type -> hash_lookup_iteration__seq [style=bold];
hashtable_lookup__inst__entry:entry_type -> lookup_iteration__seq [style=bold];
mo__seq:version_type -> version__seq [style=bold];
mo__seq:ofs_originals_type -> mo__inst__originals:originals_pos [color="#404040"];
mo__inst__originals:originals_type -> descriptor__seq [style=bold];
mo__seq:num_translations_type -> mo__inst__originals:originals__repeat [color="#404040"];
mo__seq:ofs_translations_type -> mo__inst__translations:translations_pos [color="#404040"];
mo__inst__translations:translations_type -> descriptor__seq [style=bold];
mo__seq:num_translations_type -> mo__inst__translations:translations__repeat [color="#404040"];
mo__seq:ofs_hashtable_items_type -> mo__inst__hashtable_items:hashtable_items_pos [color="#404040"];
mo__inst__hashtable_items:hashtable_items_type -> hashtable_item__seq [style=bold];
mo__seq:num_hashtable_items_type -> mo__inst__hashtable_items:hashtable_items__repeat [color="#404040"];
version__seq:version_raw_type -> version__inst__major [color="#404040"];
version__seq:version_raw_type -> version__inst__minor [color="#404040"];
hashtable_item__seq:raw_val_type -> hashtable_item__inst__val_1 [color="#404040"];
hashtable_item__inst__val_1:val_1_type -> hashtable_item__inst__is_system_dependent [color="#404040"];
hashtable_item__inst__mask:mask_type -> hashtable_item__inst__is_system_dependent [color="#404040"];
hashtable_item__inst__val_1:val_1_type -> hashtable_item__inst__val [color="#404040"];
hashtable_item__inst__mask:mask_type -> hashtable_item__inst__val [color="#404040"];
descriptor__seq:ofs_str_type -> descriptor__inst__str:str_pos [color="#404040"];
descriptor__seq:len_str_type -> descriptor__inst__str:str_size [color="#404040"];
}