From 4f8933255778838a5f9a34cade2942e9aeae8415 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Sat, 21 Sep 2024 17:24:13 -0700 Subject: [PATCH] add isSlice --- src/isSlice.zig | 27 +++++++++++++++++++++++++++ src/lib.zig | 1 + 2 files changed, 28 insertions(+) create mode 100644 src/isSlice.zig diff --git a/src/isSlice.zig b/src/isSlice.zig new file mode 100644 index 0000000000000000000000000000000000000000..9922a78bd80b474aa69899ab118bf32f47d2ccac --- /dev/null +++ b/src/isSlice.zig @@ -0,0 +1,27 @@ +const std = @import("std"); +const string = []const u8; +const extras = @import("./lib.zig"); + +pub fn isSlice(comptime T: type) bool { + if (comptime is(.Pointer)(T)) { + return @typeInfo(T).Pointer.size == .Slice; + } + return false; +} +fn is(comptime id: std.builtin.TypeId) fn (type) bool { + const Closure = struct { + pub fn trait(comptime T: type) bool { + return id == @typeInfo(T); + } + }; + return Closure.trait; +} + +test { + const array = [_]u8{0} ** 10; + var runtime_zero: usize = 0; + _ = &runtime_zero; + try std.testing.expect(isSlice(@TypeOf(array[runtime_zero..]))); + try std.testing.expect(!isSlice(@TypeOf(array))); + try std.testing.expect(!isSlice(@TypeOf(&array[0]))); +} diff --git a/src/lib.zig b/src/lib.zig index 9e57dc4908b775a730868271bd86a3f3fb4f0d6b..19999a64f444a22a77bd5757c3ee7f24882c33fb 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -97,3 +97,4 @@ pub usingnamespace @import("./OneSmallerInt.zig"); pub usingnamespace @import("./FlippedInt.zig"); pub usingnamespace @import("./isZigString.zig"); pub usingnamespace @import("./isIndexable.zig"); +pub usingnamespace @import("./isSlice.zig"); -- 2.54.0