diff options
| author | Nathan Reiner <nathan.reiner@fticonsulting.com> | 2026-08-28 15:56:39 +0200 |
|---|---|---|
| committer | Nathan Reiner <nathan.reiner@fticonsulting.com> | 2026-08-28 15:56:39 +0200 |
| commit | 371308474ad0c6f01f64ab14166e32492a5f1c97 (patch) | |
| tree | 5ef44463c6297cacc81387975f545a1ec6830ed0 /src/Tuple.zig | |
| parent | 28f47b8399c4f3c4a64921fb16e38e44e8ce749e (diff) | |
implement more interfaces
Diffstat (limited to 'src/Tuple.zig')
| -rw-r--r-- | src/Tuple.zig | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/Tuple.zig b/src/Tuple.zig new file mode 100644 index 0000000..ceb1711 --- /dev/null +++ b/src/Tuple.zig @@ -0,0 +1,37 @@ + +const c = @import("c"); +const zpy = @import("root.zig"); +const conversion = zpy.conversion; + +const Self = @This(); + +object: zpy.Object, + +pub fn new(length: usize) !Self { + return .{ + .object = .fromPtr(try conversion.Ptr(c.PyTuple_New(@intCast(length)))), + }; +} + +pub fn pack(values: []const zpy.Object) !Self { + var tuple = try new(values.len); + errdefer tuple.object.decref(); + + for (values, 0..) |value, index| { + try tuple.set(index, value); + } + + return tuple; +} + +pub fn size(self: *const Self) usize { + return c.PyTuple_GET_SIZE(self.object.ptr); +} + +pub fn get(self: *Self, index: usize) zpy.Error!zpy.Object { + return .fromPtr(conversion.Ptr(c.PyTuple_GetItem(self.object.ptr, @intCast(index))) catch return error.IndexError); +} + +pub fn set(self: *Self, index: usize, value: zpy.Object) zpy.Error!void { + conversion.success(c.PyTuple_SetItem(self.object.ptr, @intCast(index), value.ptr)) catch return error.IndexError; +} |