struct Macros [src]

Members

Source

pub const Macros = struct { pub fn U_SUFFIX(comptime n: comptime_int) @TypeOf(promoteIntLiteral(c_uint, n, .decimal)) { return promoteIntLiteral(c_uint, n, .decimal); } fn L_SUFFIX_ReturnType(comptime number: anytype) type { switch (@typeInfo(@TypeOf(number))) { .int, .comptime_int => return @TypeOf(promoteIntLiteral(c_long, number, .decimal)), .float, .comptime_float => return c_longdouble, else => @compileError("Invalid value for L suffix"), } } pub fn L_SUFFIX(comptime number: anytype) L_SUFFIX_ReturnType(number) { switch (@typeInfo(@TypeOf(number))) { .int, .comptime_int => return promoteIntLiteral(c_long, number, .decimal), .float, .comptime_float => @compileError("TODO: c_longdouble initialization from comptime_float not supported"), else => @compileError("Invalid value for L suffix"), } } pub fn UL_SUFFIX(comptime n: comptime_int) @TypeOf(promoteIntLiteral(c_ulong, n, .decimal)) { return promoteIntLiteral(c_ulong, n, .decimal); } pub fn LL_SUFFIX(comptime n: comptime_int) @TypeOf(promoteIntLiteral(c_longlong, n, .decimal)) { return promoteIntLiteral(c_longlong, n, .decimal); } pub fn ULL_SUFFIX(comptime n: comptime_int) @TypeOf(promoteIntLiteral(c_ulonglong, n, .decimal)) { return promoteIntLiteral(c_ulonglong, n, .decimal); } pub fn F_SUFFIX(comptime f: comptime_float) f32 { return @as(f32, f); } pub fn WL_CONTAINER_OF(ptr: anytype, sample: anytype, comptime member: []const u8) @TypeOf(sample) { return @fieldParentPtr(member, ptr); } /// A 2-argument function-like macro defined as #define FOO(A, B) (A)(B) /// could be either: cast B to A, or call A with the value B. pub fn CAST_OR_CALL(a: anytype, b: anytype) switch (@typeInfo(@TypeOf(a))) { .type => a, .@"fn" => |fn_info| fn_info.return_type orelse void, else => |info| @compileError("Unexpected argument type: " ++ @tagName(info)), } { switch (@typeInfo(@TypeOf(a))) { .type => return cast(a, b), .@"fn" => return a(b), else => unreachable, // return type will be a compile error otherwise } } pub inline fn DISCARD(x: anytype) void { _ = x; } }