DVUI

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 }));
    }
}