Tidy up codebase structure
This commit is contained in:
		
							parent
							
								
									ccb96875b1
								
							
						
					
					
						commit
						813df95e02
					
				
							
								
								
									
										11
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @ -2,7 +2,7 @@ | |||||||
| 	"version": "0.2.0", | 	"version": "0.2.0", | ||||||
| 	"configurations": [ | 	"configurations": [ | ||||||
| 		{ | 		{ | ||||||
| 			"name": "Debug", | 			"name": "Ona", | ||||||
| 			"type": "gdb", | 			"type": "gdb", | ||||||
| 			"request": "launch", | 			"request": "launch", | ||||||
| 			"target": "${workspaceFolder}/zig-out/bin/ona", | 			"target": "${workspaceFolder}/zig-out/bin/ona", | ||||||
| @ -10,6 +10,15 @@ | |||||||
| 			"valuesFormatting": "parseText", | 			"valuesFormatting": "parseText", | ||||||
| 			"preLaunchTask": "Build Debug", | 			"preLaunchTask": "Build Debug", | ||||||
| 		}, | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"name": "Oar", | ||||||
|  | 			"type": "gdb", | ||||||
|  | 			"request": "launch", | ||||||
|  | 			"target": "${workspaceFolder}/zig-out/bin/oar", | ||||||
|  | 			"cwd": "${workspaceRoot}", | ||||||
|  | 			"valuesFormatting": "parseText", | ||||||
|  | 			"preLaunchTask": "Build Debug", | ||||||
|  | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"name": "Test", | 			"name": "Test", | ||||||
| 			"type": "gdb", | 			"type": "gdb", | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							| @ -41,11 +41,12 @@ | |||||||
| 				"revealProblems": "onProblem", | 				"revealProblems": "onProblem", | ||||||
| 			}, | 			}, | ||||||
| 		}, | 		}, | ||||||
|  | 
 | ||||||
| 		{ | 		{ | ||||||
| 			"label": "Build Test", | 			"label": "Build Tests", | ||||||
| 			"type": "shell", | 			"type": "shell", | ||||||
| 			"command": "zig build test", | 			"command": "zig build test", | ||||||
| 			"group": "test" | 			"group": "build", | ||||||
| 		}, | 		}, | ||||||
| 	], | 	], | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								build.zig
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								build.zig
									
									
									
									
									
								
							| @ -6,14 +6,14 @@ const std = @import("std"); | |||||||
| pub fn build(builder: *std.build.Builder) void { | pub fn build(builder: *std.build.Builder) void { | ||||||
|     const target = builder.standardTargetOptions(.{}); |     const target = builder.standardTargetOptions(.{}); | ||||||
|     const mode = builder.standardReleaseOptions(); |     const mode = builder.standardReleaseOptions(); | ||||||
|     const ona_pkg = projectPkg("ona", &.{}); |     const core_pkg = projectPkg("core", &.{}); | ||||||
| 
 | 
 | ||||||
|     // Engine executable. |     // Ona executable. | ||||||
|     { |     { | ||||||
|         const exe = builder.addExecutable("engine", "./src/engine/main.zig"); |         const exe = builder.addExecutable("ona", "./src/ona/main.zig"); | ||||||
| 
 | 
 | ||||||
|         exe.addPackage(projectPkg("oar", &.{ona_pkg})); |         exe.addPackage(projectPkg("oar", &.{core_pkg})); | ||||||
|         exe.addPackage(ona_pkg); |         exe.addPackage(core_pkg); | ||||||
|         exe.setTarget(target); |         exe.setTarget(target); | ||||||
|         exe.setBuildMode(mode); |         exe.setBuildMode(mode); | ||||||
|         exe.install(); |         exe.install(); | ||||||
| @ -26,7 +26,7 @@ pub fn build(builder: *std.build.Builder) void { | |||||||
|     { |     { | ||||||
|         const exe = builder.addExecutable("oar", "./src/oar/main.zig"); |         const exe = builder.addExecutable("oar", "./src/oar/main.zig"); | ||||||
| 
 | 
 | ||||||
|         exe.addPackage(ona_pkg); |         exe.addPackage(core_pkg); | ||||||
|         exe.setTarget(target); |         exe.setTarget(target); | ||||||
|         exe.setBuildMode(mode); |         exe.setBuildMode(mode); | ||||||
|         exe.install(); |         exe.install(); | ||||||
|  | |||||||
| @ -183,11 +183,11 @@ test "Spliterating text" { | |||||||
| pub const Writer = meta.Function(@sizeOf(usize), []const u8, usize); | pub const Writer = meta.Function(@sizeOf(usize), []const u8, usize); | ||||||
| 
 | 
 | ||||||
| /// | /// | ||||||
| /// Returns `true` if `this_bytes` is the same length and contains the same data as `that_bytes`, | /// Returns `true` if `this` is the same length and contains the same data as `that`, otherwise | ||||||
| /// otherwise `false`. | /// `false`. | ||||||
| /// | /// | ||||||
| pub fn equalsBytes(this_bytes: []const u8, that_bytes: []const u8) bool { | pub fn equalsBytes(this: []const u8, that: []const u8) bool { | ||||||
|     return std.mem.eql(u8, this_bytes, that_bytes); |     return std.mem.eql(u8, this, that); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| test "Equivalence of bytes" { | test "Equivalence of bytes" { | ||||||
							
								
								
									
										27
									
								
								src/core/main.zig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/core/main.zig
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | 
 | ||||||
|  | /// | ||||||
|  | /// Platform-agnostic input and output interfaces for working with memory, files, and networks. | ||||||
|  | /// | ||||||
|  | pub const io = @import("./io.zig"); | ||||||
|  | 
 | ||||||
|  | /// | ||||||
|  | /// Metaprogramming introspection utilities | ||||||
|  | /// | ||||||
|  | pub const meta = @import("./meta.zig"); | ||||||
|  | 
 | ||||||
|  | /// | ||||||
|  | /// Sequential last-in first-out data structures. | ||||||
|  | /// | ||||||
|  | pub const stack = @import("./stack.zig"); | ||||||
|  | 
 | ||||||
|  | /// | ||||||
|  | /// Unordered key-value association data structures. | ||||||
|  | /// | ||||||
|  | pub const table = @import("./table.zig"); | ||||||
|  | 
 | ||||||
|  | test { | ||||||
|  |     _ = io; | ||||||
|  |     _ = meta; | ||||||
|  |     _ = stack; | ||||||
|  |     _ = table; | ||||||
|  | } | ||||||
| @ -1,40 +0,0 @@ | |||||||
| const ona = @import("ona"); |  | ||||||
| const std = @import("std"); |  | ||||||
| const sys = @import("./sys.zig"); |  | ||||||
| 
 |  | ||||||
| /// |  | ||||||
| /// Starts the the game engine. |  | ||||||
| /// |  | ||||||
| pub fn main() anyerror!void { |  | ||||||
|     return nosuspend await async sys.display(anyerror, run); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| fn run(app: *sys.App, graphics: *sys.Graphics) anyerror!void { |  | ||||||
|     var gpa = std.heap.GeneralPurposeAllocator(.{}){}; |  | ||||||
| 
 |  | ||||||
|     defer _ = gpa.deinit(); |  | ||||||
| 
 |  | ||||||
|     { |  | ||||||
|         var file_access = try app.data.open(try sys.Path.joined(&.{"ona.lua"}), .readonly); |  | ||||||
| 
 |  | ||||||
|         defer file_access.close(); |  | ||||||
| 
 |  | ||||||
|         const file_size = try file_access.queryLength(); |  | ||||||
|         const allocator = gpa.allocator(); |  | ||||||
|         const buffer = try allocator.alloc(u8, file_size); |  | ||||||
| 
 |  | ||||||
|         defer allocator.free(buffer); |  | ||||||
| 
 |  | ||||||
|         if ((try file_access.read(buffer)) != file_size) return error.ScriptLoadFailure; |  | ||||||
| 
 |  | ||||||
|         app.log(.debug, buffer); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     while (graphics.poll()) |_| { |  | ||||||
|         graphics.present(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| test { |  | ||||||
|     _ = sys; |  | ||||||
| } |  | ||||||
| @ -1,4 +1,4 @@ | |||||||
| const ona = @import("ona"); | const core = @import("core"); | ||||||
| const std = @import("std"); | const std = @import("std"); | ||||||
| 
 | 
 | ||||||
| /// | /// | ||||||
| @ -23,14 +23,18 @@ pub const Entry = extern struct { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /// |     /// | ||||||
|  |     /// Attempts to read the next [Entry] from `file_access`. | ||||||
|     /// |     /// | ||||||
|  |     /// Returns the read [Entry], `null` if there is no more to read, or a | ||||||
|  |     /// [core.io.FileAccess.Error] if it failed. | ||||||
|     /// |     /// | ||||||
|     pub fn next(file_access: ona.io.FileAccess) ona.io.FileAccess.Error!?Entry { |     pub fn next(file_access: core.io.FileAccess) core.io.FileAccess.Error!?Entry { | ||||||
|         var entry = std.mem.zeroes(Entry); |         const mem = std.mem; | ||||||
|  |         var entry = mem.zeroes(Entry); | ||||||
|         const origin = try file_access.queryCursor(); |         const origin = try file_access.queryCursor(); | ||||||
| 
 | 
 | ||||||
|         if (((try file_access.read(std.mem.asBytes(&entry))) != @sizeOf(Entry)) and |         if (((try file_access.read(mem.asBytes(&entry))) != @sizeOf(Entry)) and | ||||||
|             ona.io.equalsBytes(&entry.signature, &signature_magic)) { |             core.io.equalsBytes(&entry.signature, &signature_magic)) { | ||||||
| 
 | 
 | ||||||
|             try file_access.seek(origin); |             try file_access.seek(origin); | ||||||
| 
 | 
 | ||||||
| @ -72,7 +76,7 @@ pub const Path = extern struct { | |||||||
|     /// Returns `true` if `this_path` is equal to `that_path, otherwise `false`. |     /// Returns `true` if `this_path` is equal to `that_path, otherwise `false`. | ||||||
|     /// |     /// | ||||||
|     pub fn equals(this_path: Path, that_path: Path) bool { |     pub fn equals(this_path: Path, that_path: Path) bool { | ||||||
|         return ona.io.equalsBytes(this_path.buffer[0 ..this_path. |         return core.io.equalsBytes(this_path.buffer[0 ..this_path. | ||||||
|             length], that_path.buffer[0 .. that_path.length]); |             length], that_path.buffer[0 .. that_path.length]); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -80,7 +84,7 @@ pub const Path = extern struct { | |||||||
|     /// Returns the hash of the text in `path`. |     /// Returns the hash of the text in `path`. | ||||||
|     /// |     /// | ||||||
|     pub fn hash(path: Path) usize { |     pub fn hash(path: Path) usize { | ||||||
|         return ona.io.hashBytes(path.buffer[0 .. path.length]); |         return core.io.hashBytes(path.buffer[0 .. path.length]); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /// |     /// | ||||||
| @ -97,7 +101,7 @@ pub const Path = extern struct { | |||||||
|             const last_sequence_index = sequences.len - 1; |             const last_sequence_index = sequences.len - 1; | ||||||
| 
 | 
 | ||||||
|             for (sequences) |sequence, index| if (sequence.len != 0) { |             for (sequences) |sequence, index| if (sequence.len != 0) { | ||||||
|                 var components = ona.io.Spliterator(u8){ |                 var components = core.io.Spliterator(u8){ | ||||||
|                     .source = sequence, |                     .source = sequence, | ||||||
|                     .delimiter = "/", |                     .delimiter = "/", | ||||||
|                 }; |                 }; | ||||||
| @ -144,8 +148,37 @@ pub const Path = extern struct { | |||||||
| /// | /// | ||||||
| /// Starts the **O**na **Ar**chive packer utility. | /// Starts the **O**na **Ar**chive packer utility. | ||||||
| /// | /// | ||||||
| pub fn main() u8 { | pub fn main() !u8 { | ||||||
|     // TODO: Implement. |     var gpa = std.heap.GeneralPurposeAllocator(.{}){}; | ||||||
|  | 
 | ||||||
|  |     defer _ = gpa.deinit(); | ||||||
|  | 
 | ||||||
|  |     const process = std.process; | ||||||
|  |     const allocator = gpa.allocator(); | ||||||
|  |     const args = try process.argsAlloc(allocator); | ||||||
|  | 
 | ||||||
|  |     defer process.argsFree(allocator, args); | ||||||
|  | 
 | ||||||
|  |     const outWriter = std.io.getStdOut().writer(); | ||||||
|  | 
 | ||||||
|  |     if (args.len > 1) { | ||||||
|  |         const command = args[1]; | ||||||
|  |         const io = core.io; | ||||||
|  | 
 | ||||||
|  |         if (io.equalsBytes(command, "pack")) { | ||||||
|  |             return 0; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (io.equalsBytes(command, "unpack")) { | ||||||
|  |             return 0; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         try outWriter.print("Unknown command: {s}", .{command}); | ||||||
|  | 
 | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     try outWriter.print("{s}", .{args[0]}); | ||||||
| 
 | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,27 +1,40 @@ | |||||||
|  | const core = @import("core"); | ||||||
|  | const std = @import("std"); | ||||||
|  | const sys = @import("./sys.zig"); | ||||||
| 
 | 
 | ||||||
| /// | /// | ||||||
| /// Platform-agnostic input and output interfaces for working with memory, files, and networks. | /// Starts the the game engine. | ||||||
| /// | /// | ||||||
| pub const io = @import("./io.zig"); | pub fn main() anyerror!void { | ||||||
|  |     return nosuspend await async sys.display(anyerror, run); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| /// | fn run(app: *sys.App, graphics: *sys.Graphics) anyerror!void { | ||||||
| /// Metaprogramming introspection utilities |     var gpa = std.heap.GeneralPurposeAllocator(.{}){}; | ||||||
| /// |  | ||||||
| pub const meta = @import("./meta.zig"); |  | ||||||
| 
 | 
 | ||||||
| /// |     defer _ = gpa.deinit(); | ||||||
| /// Sequential last-in first-out data structures. |  | ||||||
| /// |  | ||||||
| pub const stack = @import("./stack.zig"); |  | ||||||
| 
 | 
 | ||||||
| /// |     { | ||||||
| /// Unordered key-value association data structures. |         var file_access = try app.data.open(try sys.Path.joined(&.{"ona.lua"}), .readonly); | ||||||
| /// | 
 | ||||||
| pub const table = @import("./table.zig"); |         defer file_access.close(); | ||||||
|  | 
 | ||||||
|  |         const file_size = try file_access.queryLength(); | ||||||
|  |         const allocator = gpa.allocator(); | ||||||
|  |         const buffer = try allocator.alloc(u8, file_size); | ||||||
|  | 
 | ||||||
|  |         defer allocator.free(buffer); | ||||||
|  | 
 | ||||||
|  |         if ((try file_access.read(buffer)) != file_size) return error.ScriptLoadFailure; | ||||||
|  | 
 | ||||||
|  |         app.log(.debug, buffer); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     while (graphics.poll()) |_| { | ||||||
|  |         graphics.present(); | ||||||
|  |     } | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| test { | test { | ||||||
|     _ = io; |     _ = sys; | ||||||
|     _ = meta; |  | ||||||
|     _ = stack; |  | ||||||
|     _ = table; |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -2,8 +2,8 @@ const ext = @cImport({ | |||||||
|     @cInclude("SDL2/SDL.h"); |     @cInclude("SDL2/SDL.h"); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | const core = @import("core"); | ||||||
| const oar = @import("oar"); | const oar = @import("oar"); | ||||||
| const ona = @import("ona"); |  | ||||||
| const std = @import("std"); | const std = @import("std"); | ||||||
| 
 | 
 | ||||||
| /// | /// | ||||||
| @ -44,12 +44,12 @@ pub const App = struct { | |||||||
|     /// Once the execution frame resumes, the value returned by executing `procedure` is returned. |     /// Once the execution frame resumes, the value returned by executing `procedure` is returned. | ||||||
|     /// |     /// | ||||||
|     pub fn schedule(app: *App, procedure: anytype, |     pub fn schedule(app: *App, procedure: anytype, | ||||||
|         arguments: anytype) ona.meta.FnReturn(@TypeOf(procedure)) { |         arguments: anytype) core.meta.FnReturn(@TypeOf(procedure)) { | ||||||
| 
 | 
 | ||||||
|         const Task = struct { |         const Task = struct { | ||||||
|             procedure: @TypeOf(procedure), |             procedure: @TypeOf(procedure), | ||||||
|             arguments: *@TypeOf(arguments), |             arguments: *@TypeOf(arguments), | ||||||
|             result: ona.meta.FnReturn(@TypeOf(procedure)), |             result: core.meta.FnReturn(@TypeOf(procedure)), | ||||||
| 
 | 
 | ||||||
|             const Task = @This(); |             const Task = @This(); | ||||||
| 
 | 
 | ||||||
| @ -104,7 +104,7 @@ pub const FileSystem = union(enum) { | |||||||
|     /// Archive file system information. |     /// Archive file system information. | ||||||
|     /// |     /// | ||||||
|     const Archive = struct { |     const Archive = struct { | ||||||
|         file_access: ona.io.FileAccess, |         file_access: core.io.FileAccess, | ||||||
|         index_cache: IndexCache, |         index_cache: IndexCache, | ||||||
|         entry_table: [max_open_entries]Entry = std.mem.zeroes([max_open_entries]Entry), |         entry_table: [max_open_entries]Entry = std.mem.zeroes([max_open_entries]Entry), | ||||||
| 
 | 
 | ||||||
| @ -117,7 +117,7 @@ pub const FileSystem = union(enum) { | |||||||
|         /// Stateful extension of an [oar.Entry]. |         /// Stateful extension of an [oar.Entry]. | ||||||
|         /// |         /// | ||||||
|         const Entry = struct { |         const Entry = struct { | ||||||
|             owner: ?*ona.io.FileAccess, |             owner: ?*core.io.FileAccess, | ||||||
|             cursor: u64, |             cursor: u64, | ||||||
|             header: oar.Entry, |             header: oar.Entry, | ||||||
|         }; |         }; | ||||||
| @ -125,7 +125,7 @@ pub const FileSystem = union(enum) { | |||||||
|         /// |         /// | ||||||
|         /// Table cache for associating [oar.Path] values with offsets to entries in a given file. |         /// Table cache for associating [oar.Path] values with offsets to entries in a given file. | ||||||
|         /// |         /// | ||||||
|         const IndexCache = ona.table.Hashed(oar.Path, u64, .{ |         const IndexCache = core.table.Hashed(oar.Path, u64, .{ | ||||||
|             .equals = oar.Path.equals, |             .equals = oar.Path.equals, | ||||||
|             .hash = oar.Path.hash, |             .hash = oar.Path.hash, | ||||||
|         }); |         }); | ||||||
| @ -172,12 +172,12 @@ pub const FileSystem = union(enum) { | |||||||
|     /// Returns a [FileAccess] reference that provides access to the file referenced by `path`or a |     /// Returns a [FileAccess] reference that provides access to the file referenced by `path`or a | ||||||
|     /// [OpenError] if it failed. |     /// [OpenError] if it failed. | ||||||
|     /// |     /// | ||||||
|     pub fn open(file_system: *FileSystem, path: Path, mode: OpenMode) OpenError!ona.io.FileAccess { |     pub fn open(file_system: *FileSystem, path: Path, mode: OpenMode) OpenError!core.io.FileAccess { | ||||||
|         switch (file_system.*) { |         switch (file_system.*) { | ||||||
|             .archive => |*archive| { |             .archive => |*archive| { | ||||||
|                 if (mode != .readonly) return error.ModeUnsupported; |                 if (mode != .readonly) return error.ModeUnsupported; | ||||||
| 
 | 
 | ||||||
|                 const FileAccess = ona.io.FileAccess; |                 const FileAccess = core.io.FileAccess; | ||||||
| 
 | 
 | ||||||
|                 for (archive.entry_table) |*entry| if (entry.owner == null) { |                 for (archive.entry_table) |*entry| if (entry.owner == null) { | ||||||
|                     const Implementation = struct { |                     const Implementation = struct { | ||||||
| @ -320,7 +320,7 @@ pub const FileSystem = union(enum) { | |||||||
|                 mem.copy(u8, path_buffer[native.len .. path_buffer. |                 mem.copy(u8, path_buffer[native.len .. path_buffer. | ||||||
|                     len], path.buffer[0 .. path.length]); |                     len], path.buffer[0 .. path.length]); | ||||||
| 
 | 
 | ||||||
|                 const FileAccess = ona.io.FileAccess; |                 const FileAccess = core.io.FileAccess; | ||||||
| 
 | 
 | ||||||
|                 const Implementation = struct { |                 const Implementation = struct { | ||||||
|                     fn rwOpsCast(context: *anyopaque) *ext.SDL_RWops { |                     fn rwOpsCast(context: *anyopaque) *ext.SDL_RWops { | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user