displayPointer
Parameters
- src:std.builtin.SourceLocation
- std.builtin.SourceLocation
- ContainerT:type
- type
- field_name:[]const u8
- []const u8
- field_value_ptr:anytype
- anytype
- depth:usize
- usize
- field_option_:FieldOptions
- FieldOptions
- options:anytype
- anytype
- al:*dvui.Alignment
- *dvui.Alignment
Source
Implementation
pub fn displayPointer(
src: std.builtin.SourceLocation,
comptime ContainerT: type,
comptime field_name: []const u8,
field_value_ptr: anytype,
comptime depth: usize,
field_option_: FieldOptions,
options: anytype,
al: *dvui.Alignment,
) void {
validateFieldPtrType(field_name, &.{.pointer}, "displayPointer", @TypeOf(field_value_ptr));
const field_option = blk: {
const read_only = @typeInfo(@TypeOf(field_value_ptr)).pointer.is_const;
if (field_option_.displayMode() == .constant or (read_only and field_option_.displayMode() != .none)) {
// Everything pointed to by a pointer to const must be const.
var field_option = field_option_;
field_option.markConst();
break :blk field_option;
} else {
break :blk field_option_;
}
};
if (field_option.displayMode() == .none) return;
const ptr = @typeInfo(@TypeOf(field_value_ptr.*)).pointer;
if (ptr.size == .one) {
if (canDisplayPtr(ptr))
displayField(src, ContainerT, field_name, field_value_ptr.*, depth, field_option, options, al);
} else if (ptr.size == .slice) {
if (canDisplayPtr(ptr))
displaySlice(src, ContainerT, field_name, &field_value_ptr.*, depth, field_option, options);
} else {
@compileError(std.fmt.comptimePrint("C-style and many item pointers not supported for {s}.{s}\n", .{ @typeName(@TypeOf(field_value_ptr.*)), field_name }));
}
}