summaryrefslogtreecommitdiff
path: root/src/dict.zig
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2026-09-02 08:17:42 +0200
committerNathan Reiner <nathan@nathanreiner.xyz>2026-09-02 08:17:42 +0200
commit6c2e06ed20cdea1a67629554d8aa1d5fcda030f9 (patch)
treee5fa1f199a35e455917f661a62b38505afa703d7 /src/dict.zig
parent804204db7cf1e8a28defd359d17fa72949e13eff (diff)
Implement sequences and tuples
Diffstat (limited to 'src/dict.zig')
-rw-r--r--src/dict.zig143
1 files changed, 0 insertions, 143 deletions
diff --git a/src/dict.zig b/src/dict.zig
deleted file mode 100644
index a38d18d..0000000
--- a/src/dict.zig
+++ /dev/null
@@ -1,143 +0,0 @@
-const std = @import("std");
-const c = @import("c");
-
-const zpy = @import("root.zig");
-
-pub const Dict = extern struct {
- const Self = @This();
-
- data: c.PyObject,
-
- pub const Key = union(enum) {
- string: [*c]const u8,
- object: *zpy.Object,
- };
-
- pub fn new() !*Self {
- return @ptrCast(c.PyDict_New() orelse return error.Exception);
- }
-
- pub fn clear(self: *Self) void {
- c.PyDict_Clear(self.object.ptr);
- }
-
- pub fn contains(self: *const Self, key: Key) bool {
- return switch (key) {
- .string => |str| c.PyDict_ContainsString(@ptrCast(self), str),
- .object => |obj| c.PyDict_Contains(@ptrCast(self), @ptrCast(obj)),
- } == 1;
- }
-
- pub fn copy(self: *const Self) *Self {
- return @ptrCast(c.PyDict_Copy(@ptrCast(self)));
- }
-
- pub fn set(self: *Self, key: Key, value: zpy.Object) !void {
- const ret = switch (key) {
- .string => |str| c.PyDict_SetItemString(self.object.ptr, str, value.ptr),
- .object => |obj| c.PyDict_SetItem(self.object.ptr, obj.ptr, value.ptr),
- };
-
- if (ret == -1) return error.Exception;
- }
-
- pub fn get(self: *const Self, key: Key) ?*zpy.Object {
- return @ptrCast(switch (key) {
- .string => |str| c.PyDict_GetItemString(@ptrCast(@constCast(self)), str),
- .object => |obj| c.PyDict_GetItem(@ptrCast(@constCast(self)), @ptrCast(obj)),
- });
- }
-
- pub fn delete(self: *Self, key: Key) !void {
- const ret = switch (key) {
- .string => |str| c.PyDict_DelItemString(@ptrCast(self), str),
- .object => |obj| c.PyDict_DelItem(@ptrCast(self), @ptrCast(obj)),
- };
-
- if (ret == -1) return error.Exception;
- }
-
- pub fn setDefault(self: *Self, key: *zpy.Object, default: *zpy.Object) *zpy.Object {
- return @ptrCast(c.PyDict_SetDefault(
- @ptrCast(self),
- @ptrCast(key),
- @ptrCast(default),
- ));
- }
-
- pub fn pop(self: *Self, key: Key) ?zpy.Object {
- var result: ?*c.PyObject = undefined;
-
- switch (key) {
- .string => |str| c.PyDict_PopString(@ptrCast(self), str, &result),
- .object => |obj| c.PyDict_Pop(@ptrCast(self), @ptrCast(obj), &result),
- }
-
- return result;
- }
-
- pub fn items(self: *const Self) zpy.List {
- return @ptrCast(c.PyDict_Items(@ptrCast(@constCast(self))));
- }
-
- pub fn keys(self: *const Self) zpy.List {
- return @ptrCast(c.PyDict_Keys(@ptrCast(@constCast(self))));
- }
-
- pub fn values(self: *const Self) zpy.List {
- return @ptrCast(c.PyDict_Values(@ptrCast(@constCast(self))));
- }
-
- pub fn size(self: *const Self) usize {
- return @intCast(c.PyDict_Size(@ptrCast(@constCast(self))));
- }
-
- pub const Iterator = struct {
- dict: *Dict,
- position: c.Py_ssize_t = 0,
-
- pub const Pair = struct {
- key: *zpy.Object,
- value: *zpy.Object,
- };
-
- pub fn next(self: *@This()) ?Pair {
- var pair: Pair = undefined;
-
- if (c.PyDict_Next(
- @ptrCast(self.dict),
- &self.position,
- @ptrCast(&pair.key),
- @ptrCast(&pair.value),
- ) == 1) {
- return pair;
- }
-
- return null;
- }
- };
-
- pub fn iterator(self: *Self) Iterator {
- return .{ .dict = self };
- }
-
- pub fn merge(self: *Self, other: *Self) !void {
- if (c.PyDict_Merge(
- @ptrCast(self),
- @ptrCast(other),
- 0,
- ) == -1) {
- return error.Exception;
- }
- }
-
- pub fn update(self: *Self, other: *Self) !void {
- if (c.PyDict_Merge(
- @ptrCast(self),
- @ptrCast(other),
- 1,
- ) == -1) {
- return error.Exception;
- }
- }
-};