small refactor
This commit is contained in:
parent
6accff3cbd
commit
0c21fd35db
1 changed files with 72 additions and 59 deletions
131
src/rntuple.cpp
131
src/rntuple.cpp
|
@ -699,60 +699,50 @@ struct Try_Sec_Hover_Fn {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
internal
|
||||
b8 hover_try_key(const Try_Sec_Hover_Fn &try_sec_hover, const u8 *data, u64 start)
|
||||
{
|
||||
u16 version_be;
|
||||
memcpy(&version_be, data + start + 4, sizeof(u16));
|
||||
u32 version = bswap(version_be);
|
||||
b8 is_big = version > 1000;
|
||||
b8 tkey() const
|
||||
{
|
||||
u16 version_be;
|
||||
memcpy(&version_be, data + start + 4, sizeof(u16));
|
||||
u32 version = bswap(version_be);
|
||||
b8 is_big = version > 1000;
|
||||
|
||||
if (is_big) {
|
||||
return try_sec_hover.field<u32>("NBytes: %u")
|
||||
|| try_sec_hover.field<u16>("Version: %u", [] (Arena *arena, String8_Node *prev, const char *fmt, u16 x) {
|
||||
x = bswap(x);
|
||||
x -= (x > 1000) * 1000;
|
||||
return push_str8_node_child(arena, prev, fmt, x);
|
||||
})
|
||||
|| try_sec_hover.field<u32>("Obj Len: %u")
|
||||
|| try_sec_hover.field<u32>("Datetime: ", hover_display_datetime_str)
|
||||
|| try_sec_hover.field<u16>("Key Len: %u")
|
||||
|| try_sec_hover.field<u16>("Cycle: %u")
|
||||
|| try_sec_hover.field<u64>("Seek Key: 0x%lX")
|
||||
|| try_sec_hover.field<u64>("Seek Pdir: 0x%lX")
|
||||
|| try_sec_hover.field<String8>("Class Name: %s")
|
||||
|| try_sec_hover.field<String8>("Obj Name: %s")
|
||||
|| try_sec_hover.field<String8>("Obj Title: %s")
|
||||
;
|
||||
} else {
|
||||
return try_sec_hover.field<u32>("NBytes: %u")
|
||||
|| try_sec_hover.field<u16>("Version: %u", [] (Arena *arena, String8_Node *prev, const char *fmt, u16 x) {
|
||||
x = bswap(x);
|
||||
x -= (x > 1000) * 1000;
|
||||
return push_str8_node_child(arena, prev, fmt, x);
|
||||
})
|
||||
|| try_sec_hover.field<u32>("Obj Len: %u")
|
||||
|| try_sec_hover.field<u32>("Datetime: ", hover_display_datetime_str)
|
||||
|| try_sec_hover.field<u16>("Key Len: %u")
|
||||
|| try_sec_hover.field<u16>("Cycle: %u")
|
||||
|| try_sec_hover.field<u32>("Seek Key: 0x%lX")
|
||||
|| try_sec_hover.field<u32>("Seek Pdir: 0x%lX")
|
||||
|| try_sec_hover.field<String8>("Class Name: %s")
|
||||
|| try_sec_hover.field<String8>("Obj Name: %s")
|
||||
|| try_sec_hover.field<String8>("Obj Title: %s")
|
||||
;
|
||||
if (is_big) {
|
||||
return field<u32>("NBytes: %u")
|
||||
|| field<u16>("Version: %u", [] (Arena *arena, String8_Node *prev, const char *fmt, u16 x) {
|
||||
x = bswap(x);
|
||||
x -= 1000;
|
||||
return push_str8_node_child(arena, prev, fmt, x);
|
||||
})
|
||||
|| field<u32>("Obj Len: %u")
|
||||
|| field<u32>("Datetime: ", hover_display_datetime_str)
|
||||
|| field<u16>("Key Len: %u")
|
||||
|| field<u16>("Cycle: %u")
|
||||
|| field<u64>("Seek Key: 0x%lX")
|
||||
|| field<u64>("Seek Pdir: 0x%lX")
|
||||
|| field<String8>("Class Name: %s")
|
||||
|| field<String8>("Obj Name: %s")
|
||||
|| field<String8>("Obj Title: %s")
|
||||
;
|
||||
} else {
|
||||
return field<u32>("NBytes: %u")
|
||||
|| field<u16>("Version: %u", [] (Arena *arena, String8_Node *prev, const char *fmt, u16 x) {
|
||||
x = bswap(x);
|
||||
return push_str8_node_child(arena, prev, fmt, x);
|
||||
})
|
||||
|| field<u32>("Obj Len: %u")
|
||||
|| field<u32>("Datetime: ", hover_display_datetime_str)
|
||||
|| field<u16>("Key Len: %u")
|
||||
|| field<u16>("Cycle: %u")
|
||||
|| field<u32>("Seek Key: 0x%lX")
|
||||
|| field<u32>("Seek Pdir: 0x%lX")
|
||||
|| field<String8>("Class Name: %s")
|
||||
|| field<String8>("Obj Name: %s")
|
||||
|| field<String8>("Obj Title: %s")
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal
|
||||
b8 hover_try_object(const Try_Sec_Hover_Fn &try_sec_hover)
|
||||
{
|
||||
return try_sec_hover.field<u16>("Version: %u")
|
||||
|| try_sec_hover.field<u32>("Unique ID: %u")
|
||||
|| try_sec_hover.field<u32>("Bits: %u");
|
||||
}
|
||||
};
|
||||
|
||||
// `off` is the absolute offset into `data`.
|
||||
internal
|
||||
|
@ -772,7 +762,7 @@ Sec_Hover_Info get_section_hover_info(Arena *arena, Section section, u64 off, co
|
|||
|
||||
switch (section.id) {
|
||||
case Sec_RNTuple_Anchor: {
|
||||
hover_try_key(try_sec_hover, data, start)
|
||||
try_sec_hover.tkey()
|
||||
|| try_sec_hover.field<u32>("Object len: %u", [] (Arena *arena, String8_Node *prev, const char *fmt, u32 x) {
|
||||
x = bswap(x);
|
||||
x -= 0x4000'0000;
|
||||
|
@ -838,7 +828,7 @@ Sec_Hover_Info get_section_hover_info(Arena *arena, Section section, u64 off, co
|
|||
} break;
|
||||
|
||||
case Sec_TFile_Object: {
|
||||
if (!hover_try_key(try_sec_hover, data, start)) {
|
||||
if (!try_sec_hover.tkey()) {
|
||||
b8 ok = try_sec_hover.field<String8>("File Name: %s")
|
||||
|| try_sec_hover.field<String8>("File Title: %s")
|
||||
;
|
||||
|
@ -885,7 +875,7 @@ Sec_Hover_Info get_section_hover_info(Arena *arena, Section section, u64 off, co
|
|||
case Sec_RNTuple_Header:
|
||||
case Sec_RNTuple_Footer:
|
||||
case Sec_Page_List: {
|
||||
hover_try_key(try_sec_hover, data, start)
|
||||
try_sec_hover.tkey()
|
||||
|| try_sec_hover.maybe_rootzip(data, start)
|
||||
|| try_sec_hover.range("Payload", section.range.len - section.post_size) // TODO: improve
|
||||
|| try_sec_hover.field<u64>("Checksum: 0x%lX", hover_display_val_le)
|
||||
|
@ -893,7 +883,8 @@ Sec_Hover_Info get_section_hover_info(Arena *arena, Section section, u64 off, co
|
|||
} break;
|
||||
|
||||
case Sec_Page: {
|
||||
b8 ok = section.pre_size && hover_try_key(try_sec_hover, data, start);
|
||||
// only try hovering a key if this is the first page of the cluster (<=> pre_size != 0)
|
||||
b8 ok = section.pre_size && try_sec_hover.tkey();
|
||||
ok = ok || try_sec_hover.maybe_rootzip(data, start)
|
||||
|| try_sec_hover.range("Payload", section.range.len - section.post_size) // TODO: improve
|
||||
|| try_sec_hover.field<u64>("Checksum: 0x%lX", hover_display_val_le)
|
||||
|
@ -901,7 +892,7 @@ Sec_Hover_Info get_section_hover_info(Arena *arena, Section section, u64 off, co
|
|||
} break;
|
||||
|
||||
case Sec_TFile_Info: {
|
||||
hover_try_key(try_sec_hover, data, start)
|
||||
try_sec_hover.tkey()
|
||||
|| try_sec_hover.maybe_rootzip(data, start)
|
||||
// || try_sec_hover.field<u32>("Byte Count: %u", [] (Arena *arena, String8_Node *prev, const char *fmt, u32 x) {
|
||||
// x = bswap(x);
|
||||
|
@ -917,9 +908,31 @@ Sec_Hover_Info get_section_hover_info(Arena *arena, Section section, u64 off, co
|
|||
} break;
|
||||
|
||||
case Sec_TFile_FreeList: {
|
||||
hover_try_key(try_sec_hover, data, start)
|
||||
|| try_sec_hover.range("Payload", section.range.len) // TODO: improve
|
||||
;
|
||||
if (!try_sec_hover.tkey()) {
|
||||
u16 version_be;
|
||||
memcpy(&version_be, data + start + try_sec_hover.cur_field_off, sizeof(u16));
|
||||
u32 version = bswap(version_be);
|
||||
b8 is_big = version > 1000;
|
||||
|
||||
if (is_big) {
|
||||
try_sec_hover.field<u16>("Version: %u", [] (Arena *arena, String8_Node *prev, const char *fmt, u16 x) {
|
||||
x = bswap(x);
|
||||
x -= 1000;
|
||||
return push_str8_node_child(arena, prev, fmt, x);
|
||||
})
|
||||
|| try_sec_hover.field<u64>("First: 0x%lX")
|
||||
|| try_sec_hover.field<u64>("Last: 0x%lX")
|
||||
;
|
||||
} else {
|
||||
try_sec_hover.field<u16>("Version: %u", [] (Arena *arena, String8_Node *prev, const char *fmt, u16 x) {
|
||||
x = bswap(x);
|
||||
return push_str8_node_child(arena, prev, fmt, x);
|
||||
})
|
||||
|| try_sec_hover.field<u32>("First: 0x%X")
|
||||
|| try_sec_hover.field<u32>("Last: 0x%X")
|
||||
;
|
||||
}
|
||||
}
|
||||
} break;
|
||||
|
||||
default:;
|
||||
|
|
Loading…
Reference in a new issue