From 10f81cf7f02df7880136fffe3eedd8df4cf14655 Mon Sep 17 00:00:00 2001 From: k Date: Tue, 21 Oct 2025 19:11:07 -0400 Subject: [PATCH] Updated types to use more zig types in zig code --- src/main.zig | 36 +++++++----------------------------- src/move.zig | 3 ++- src/types.zig | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 30 deletions(-) create mode 100644 src/types.zig diff --git a/src/main.zig b/src/main.zig index 4605998..eea0b45 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1,28 +1,6 @@ const std = @import("std"); const mov = @import("move.zig"); -const c = @cImport({ - @cInclude("main.h"); - @cInclude("types.h"); - @cInclude("help.h"); - @cInclude("eval.h"); - @cInclude("moves.h"); -}); - -const uciTag = enum { - text, - move, - game, - exit, - pass, -}; - -const uciRet = union(uciTag) { - text: []const u8, - move: []u8, - game: *c.game, - exit: void, - pass: void, -}; +const types = @import("types.zig"); pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; @@ -31,7 +9,7 @@ pub fn main() !void { const stdin = std.io.getStdIn(); var reader = stdin.reader(); - var game: *c.game = uciPos("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", alloc); + var game: *types.game = uciPos("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", alloc); defer alloc.destroy(game); while (true) { const line = try reader.readUntilDelimiterAlloc(alloc, '\n', std.math.maxInt(usize)); @@ -58,7 +36,7 @@ pub fn main() !void { } } -fn uci(str: []const u8, game: *c.game, alloc: std.mem.Allocator) uciRet { +fn uci(str: []const u8, game: *types.game, alloc: std.mem.Allocator) types.uciRet { const pos = std.mem.indexOfAny(u8, str, " \t\n\r") orelse str.len; const tok = str[0..pos]; if (std.mem.eql(u8, tok, "uci")) return .{ .text = "id name RatChess 0.1\nid author rat<3\nuciok\n" }; @@ -69,7 +47,7 @@ fn uci(str: []const u8, game: *c.game, alloc: std.mem.Allocator) uciRet { return .{ .pass = {} }; } -fn uciPos(str: []const u8, alloc: std.mem.Allocator) *c.game { +fn uciPos(str: []const u8, alloc: std.mem.Allocator) *types.game { const pos = std.mem.indexOfAny(u8, str, " \t\n\r") orelse str.len; const tok = str[0..pos]; //var game = fenGame("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", alloc); @@ -82,7 +60,7 @@ fn uciPos(str: []const u8, alloc: std.mem.Allocator) *c.game { return fenGame("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", alloc); //this should be an error } -fn fenGame(str: []const u8, alloc: std.mem.Allocator) [*c]c.game { +fn fenGame(str: []const u8, alloc: std.mem.Allocator) *types.game { var pos: u8 = 0; var space: u8 = 0; const g = alloc.create(c.game) catch return null; @@ -118,8 +96,8 @@ fn playMoves(game: [*c]c.game, str: []const u8) [*c]c.game { return game; } -fn uciGo(game: *c.game, alloc: std.mem.Allocator) []u8 { - var moves = std.ArrayList(c.move).init(alloc); +fn uciGo(game: *types.game, alloc: std.mem.Allocator) []u8 { + var moves = std.ArrayList(types.move).init(alloc); defer moves.deinit(); const str = alloc.alloc(u8, 5) catch unreachable; const m = c.move{ .From = 0, .To = 8, .Promo = 0 }; diff --git a/src/move.zig b/src/move.zig index e3be055..29cb32d 100644 --- a/src/move.zig +++ b/src/move.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const types = @import("types.zig"); const c = @cImport({ @cInclude("main.h"); @cInclude("types.h"); @@ -7,7 +8,7 @@ const c = @cImport({ @cInclude("moves.h"); }); -pub fn moveTypeToStr(move: c.move, buf: []u8) void { +pub fn moveTypeToStr(move: types.move, buf: []u8) void { const xTo = @mod(move.To, 8); const yTo = @divTrunc(move.To, 8); const xFrom = @mod(move.From, 8); diff --git a/src/types.zig b/src/types.zig new file mode 100644 index 0000000..c9c627a --- /dev/null +++ b/src/types.zig @@ -0,0 +1,46 @@ +const c = @cImport({ + @cInclude("main.h"); + @cInclude("types.h"); + @cInclude("help.h"); + @cInclude("eval.h"); + @cInclude("moves.h"); +}); + +const uciTag = enum { + text, + move, + game, + exit, + pass, +}; + +pub const uciRet = union(uciTag) { + text: []const u8, + move: []u8, + game: *game, + exit: void, + pass: void, +}; +const set = struct { + pawns: u64, + knights: u64, + bishops: u64, + rooks: u64, + queen: u64, + king: u64, +}; +pub const game = struct { + black: set, + white: set, + whiteToMove: bool, +}; +pub const move = struct { + From: u32, + To: u32, + Promo: u8, +}; +// struct { +// To: u8, +// From: u8, +// Promo: u8, +// };