diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2026-08-28 17:44:38 +0200 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2026-08-28 17:44:38 +0200 |
| commit | 956cd84ca545f1d93e2218cbbdbb39c81a46bec8 (patch) | |
| tree | 21e865b4af06acce77a0623ea5dd3a661306f21e /src/Int.zig | |
| parent | df52109ff18ff354e4c0d1b003bc1a0a42c42b54 (diff) | |
implement other builtins
Diffstat (limited to 'src/Int.zig')
| -rw-r--r-- | src/Int.zig | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/Int.zig b/src/Int.zig new file mode 100644 index 0000000..bd13e99 --- /dev/null +++ b/src/Int.zig @@ -0,0 +1,41 @@ +const std = @import("std"); +const c = @import("c"); + +const zpy = @import("root.zig"); +const conversion = zpy.conversion; + +const Self = @This(); + +object: zpy.Object, + +pub fn from(value: anytype) !Self { + const T = @TypeOf(value); + const result = switch (@typeInfo(T)) { + .int => |i| switch (i.signedness) { + .signed => c.PyLong_FromLong(value), + .unsigned => c.PyLong_FromUnsignedLong(value), + }, + .comptime_int => c.PyLong_FromLong(value), + .float => c.PyLong_FromDouble(value), + else => @compileError("value must be numberic."), + }; + + return .{ + .object = .fromPtr(try conversion.ptr(result)), + }; +} + +pub fn as(self: *const Self, T: type) T { + return switch(@typeInfo(T)) { + .int => |i| switch (i) { + .signed => c.PyLong_AsLong(self.object.ptr), + .unsigned => c.PyLong_AsUnsignedLong(self.object.ptr), + }, + .float => c.PyLong_AsDouble(self.object.ptr), + else => @compileError("value must be numberic."), + }; +} + +pub fn deinit(self: *Self) void { + self.object.decref(); +} |