struct primitives [src]

Alias for std.zig.primitives

Members

Source

const std = @import("std"); /// Set of primitive type and value names. /// Does not include `_` or integer type names. pub const names = std.StaticStringMap(void).initComptime(.{ .{"anyerror"}, .{"anyframe"}, .{"anyopaque"}, .{"bool"}, .{"c_int"}, .{"c_long"}, .{"c_longdouble"}, .{"c_longlong"}, .{"c_char"}, .{"c_short"}, .{"c_uint"}, .{"c_ulong"}, .{"c_ulonglong"}, .{"c_ushort"}, .{"comptime_float"}, .{"comptime_int"}, .{"f128"}, .{"f16"}, .{"f32"}, .{"f64"}, .{"f80"}, .{"false"}, .{"isize"}, .{"noreturn"}, .{"null"}, .{"true"}, .{"type"}, .{"undefined"}, .{"usize"}, .{"void"}, }); /// Returns true if a name matches a primitive type or value, excluding `_`. /// Integer type names like `u8` or `i32` are only matched for syntax, /// so this will still return true when they have an oversized bit count /// or leading zeroes. pub fn isPrimitive(name: []const u8) bool { if (names.get(name) != null) return true; if (name.len < 2) return false; const first_c = name[0]; if (first_c != 'i' and first_c != 'u') return false; for (name[1..]) |c| switch (c) { '0'...'9' => {}, else => return false, }; return true; } test isPrimitive { const expect = std.testing.expect; try expect(!isPrimitive("")); try expect(!isPrimitive("_")); try expect(!isPrimitive("haberdasher")); try expect(isPrimitive("bool")); try expect(isPrimitive("false")); try expect(isPrimitive("comptime_float")); try expect(isPrimitive("u1")); try expect(isPrimitive("i99999999999999")); }