@pkmn/engine 0.1.0-dev.c42deb42 → 0.1.0-dev.c4f94762
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -14
- package/build/pkg/addon.js.map +1 -1
- package/build/pkg/data/layout.json +2 -2
- package/build/pkg/data.d.ts +3 -2
- package/build/pkg/data.js.map +1 -1
- package/build/pkg/gen1.js +2 -2
- package/build/pkg/gen1.js.map +1 -1
- package/build/pkg/index.d.ts +2 -1
- package/build/pkg/index.js.map +1 -1
- package/build/pkg/protocol.js +1 -1
- package/build/pkg/protocol.js.map +1 -1
- package/build/test/display.js.map +1 -1
- package/build/tools/debug.js +3 -1
- package/build/tools/debug.js.map +1 -1
- package/build.zig +38 -21
- package/package.json +23 -19
- package/src/bin/install-pkmn-engine +14 -14
- package/src/lib/binding/node.zig +6 -10
- package/src/lib/common/data.zig +4 -4
- package/src/lib/common/protocol.zig +388 -364
- package/src/lib/common/rational.zig +11 -7
- package/src/lib/common/rng.zig +9 -0
- package/src/lib/gen1/README.md +28 -28
- package/src/lib/gen1/calc.zig +7 -7
- package/src/lib/gen1/chance.zig +4 -4
- package/src/lib/gen1/data/moves.zig +10 -10
- package/src/lib/gen1/data/species.zig +2 -2
- package/src/lib/gen1/data/types.zig +5 -5
- package/src/lib/gen1/data.zig +20 -20
- package/src/lib/gen1/helpers.zig +13 -13
- package/src/lib/gen1/mechanics.zig +267 -281
- package/src/lib/gen2/README.md +1 -2
- package/src/lib/gen2/calc.zig +143 -0
- package/src/lib/gen2/chance.zig +1314 -0
- package/src/lib/gen2/data/items.zig +3 -3
- package/src/lib/gen2/data/moves.zig +5 -5
- package/src/lib/gen2/data/species.zig +1 -1
- package/src/lib/gen2/data/types.zig +12 -11
- package/src/lib/gen2/data.zig +21 -31
- package/src/lib/gen2/generated.zig +806 -0
- package/src/lib/gen2/mechanics.zig +1755 -844
package/build/tools/debug.js
CHANGED
|
@@ -60,6 +60,8 @@ function display(gens, data, error, seed) {
|
|
|
60
60
|
let offset = 0;
|
|
61
61
|
const showdown = !!view.getUint8(offset++);
|
|
62
62
|
const gen = gens.get(view.getUint8(offset++));
|
|
63
|
+
const N = view.getUint16(offset, data_2.LE);
|
|
64
|
+
offset += 2;
|
|
63
65
|
const lookup = data_2.Lookup.get(gen);
|
|
64
66
|
const size = data_2.LAYOUT[gen.num - 1].sizes.Battle;
|
|
65
67
|
const deserialize = (buf) => {
|
|
@@ -83,7 +85,7 @@ function display(gens, data, error, seed) {
|
|
|
83
85
|
partial.parsed.push(r.value);
|
|
84
86
|
r = it.next();
|
|
85
87
|
}
|
|
86
|
-
offset += r.value;
|
|
88
|
+
offset += N || r.value;
|
|
87
89
|
if (offset >= view.byteLength)
|
|
88
90
|
break;
|
|
89
91
|
partial.battle = deserialize(data.subarray(offset, offset += size));
|
package/build/tools/debug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/tools/debug.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AAEzB,qCAAmD;AAEnD,gCAAmE;AACnE,oDAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/tools/debug.ts"],"names":[],"mappings":"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"}
|
package/build.zig
CHANGED
|
@@ -93,7 +93,7 @@ pub fn build(b: *std.Build) !void {
|
|
|
93
93
|
// rename the file ourself in install-pkmn-engine
|
|
94
94
|
b.installArtifact(lib);
|
|
95
95
|
} else if (wasm) {
|
|
96
|
-
const
|
|
96
|
+
const exe = b.addExecutable(.{
|
|
97
97
|
.name = name,
|
|
98
98
|
.main_pkg_path = .{ .path = "." },
|
|
99
99
|
.root_source_file = .{ .path = "src/lib/binding/wasm.zig" },
|
|
@@ -103,21 +103,32 @@ pub fn build(b: *std.Build) !void {
|
|
|
103
103
|
},
|
|
104
104
|
.target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
|
|
105
105
|
});
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
106
|
+
exe.addOptions("build_options", options);
|
|
107
|
+
exe.export_symbol_names = &[_][]const u8{
|
|
108
|
+
"SHOWDOWN",
|
|
109
|
+
"LOG",
|
|
110
|
+
"CHANCE",
|
|
111
|
+
"CALC",
|
|
112
|
+
"GEN1_CHOICES_SIZE",
|
|
113
|
+
"GEN1_LOGS_SIZE",
|
|
114
|
+
};
|
|
115
|
+
exe.entry = .disabled;
|
|
116
|
+
exe.stack_size = wasm_stack_size;
|
|
117
|
+
exe.strip = strip;
|
|
118
|
+
if (pic) exe.force_pic = pic;
|
|
111
119
|
const opt = b.findProgram(&.{"wasm-opt"}, &.{"./node_modules/.bin"}) catch null;
|
|
112
120
|
if (optimize != .Debug and opt != null) {
|
|
113
121
|
const out = b.fmt("build/lib/{s}.wasm", .{name});
|
|
114
122
|
const sh = b.addSystemCommand(&.{ opt.?, "-O4" });
|
|
115
|
-
sh.addArtifactArg(
|
|
123
|
+
sh.addArtifactArg(exe);
|
|
116
124
|
sh.addArg("-o");
|
|
117
125
|
sh.addFileSourceArg(.{ .path = out });
|
|
118
126
|
b.getInstallStep().dependOn(&sh.step);
|
|
127
|
+
} else {
|
|
128
|
+
b.getInstallStep().dependOn(&b.addInstallArtifact(exe, .{
|
|
129
|
+
.dest_dir = .{ .override = std.Build.InstallDir{ .lib = {} } },
|
|
130
|
+
}).step);
|
|
119
131
|
}
|
|
120
|
-
b.installArtifact(lib);
|
|
121
132
|
} else if (dynamic) {
|
|
122
133
|
const lib = b.addSharedLibrary(.{
|
|
123
134
|
.name = name,
|
|
@@ -224,30 +235,32 @@ pub fn build(b: *std.Build) !void {
|
|
|
224
235
|
var benchmark_config = tools;
|
|
225
236
|
benchmark_config.general.optimize = .ReleaseFast;
|
|
226
237
|
benchmark_config.general.strip = true;
|
|
227
|
-
const benchmark = tool(b, "src/test/benchmark.zig", benchmark_config);
|
|
238
|
+
const benchmark = try tool(b, "src/test/benchmark.zig", benchmark_config);
|
|
228
239
|
|
|
229
240
|
var fuzz_config = tools;
|
|
230
241
|
fuzz_config.general.strip = false;
|
|
231
242
|
fuzz_config.tool.name = "fuzz";
|
|
232
|
-
const fuzz = tool(b, "src/test/fuzz.zig", fuzz_config);
|
|
243
|
+
const fuzz = try tool(b, "src/test/fuzz.zig", fuzz_config);
|
|
233
244
|
|
|
234
|
-
const analyze = tool(b, "src/tools/analyze.zig", tools);
|
|
235
|
-
const dump = tool(b, "src/tools/dump.zig", tools);
|
|
236
|
-
const transitions = tool(b, "src/tools/transitions.zig", tools);
|
|
245
|
+
const analyze = try tool(b, "src/tools/analyze.zig", tools);
|
|
246
|
+
const dump = try tool(b, "src/tools/dump.zig", tools);
|
|
247
|
+
const transitions = try tool(b, "src/tools/transitions.zig", tools);
|
|
237
248
|
|
|
238
249
|
// FIXME: serde randomly fails to build in some release configurations
|
|
239
250
|
var hack = tools;
|
|
240
251
|
if (optimize != .Debug) hack.tool.tests = null;
|
|
241
|
-
const serde = tool(b, "src/tools/serde.zig", hack);
|
|
252
|
+
const serde = try tool(b, "src/tools/serde.zig", hack);
|
|
242
253
|
|
|
243
|
-
b.step("analyze", "Run LLVM analysis tool").dependOn(&
|
|
244
|
-
b.step("benchmark", "Run benchmark code").dependOn(&
|
|
245
|
-
b.step("dump", "Run protocol dump tool").dependOn(&
|
|
246
|
-
b.step("fuzz", "Run fuzz tester").dependOn(&
|
|
247
|
-
b.step("serde", "Run serialization/deserialization tool").dependOn(&
|
|
254
|
+
if (analyze) |t| b.step("analyze", "Run LLVM analysis tool").dependOn(&t.step);
|
|
255
|
+
if (benchmark) |t| b.step("benchmark", "Run benchmark code").dependOn(&t.step);
|
|
256
|
+
if (dump) |t| b.step("dump", "Run protocol dump tool").dependOn(&t.step);
|
|
257
|
+
if (fuzz) |t| b.step("fuzz", "Run fuzz tester").dependOn(&t.step);
|
|
258
|
+
if (serde) |t| b.step("serde", "Run serialization/deserialization tool").dependOn(&t.step);
|
|
248
259
|
b.step("test", "Run all tests").dependOn(&tests.step);
|
|
249
260
|
b.step("tools", "Install tools").dependOn(&ToolsStep.create(b, &exes).step);
|
|
250
|
-
|
|
261
|
+
if (transitions) |t| {
|
|
262
|
+
b.step("transitions", "Visualize transitions algorithm search").dependOn(&t.step);
|
|
263
|
+
}
|
|
251
264
|
}
|
|
252
265
|
|
|
253
266
|
fn maybeStrip(
|
|
@@ -326,7 +339,11 @@ const ToolConfig = struct {
|
|
|
326
339
|
},
|
|
327
340
|
};
|
|
328
341
|
|
|
329
|
-
fn tool(b: *std.Build, path: []const u8, config: ToolConfig)
|
|
342
|
+
fn tool(b: *std.Build, path: []const u8, config: ToolConfig) !?*std.Build.RunStep {
|
|
343
|
+
std.fs.cwd().access(path, .{}) catch |err| switch (err) {
|
|
344
|
+
error.FileNotFound => return null,
|
|
345
|
+
else => |e| return e,
|
|
346
|
+
};
|
|
330
347
|
var name = config.tool.name orelse std.fs.path.basename(path);
|
|
331
348
|
const index = std.mem.lastIndexOfScalar(u8, name, '.');
|
|
332
349
|
if (index) |i| name = name[0..i];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pkmn/engine",
|
|
3
|
-
"version": "0.1.0-dev.
|
|
3
|
+
"version": "0.1.0-dev.c4f94762",
|
|
4
4
|
"description": "A minimal, complete, Pokémon battle simulation engine optimized for performance",
|
|
5
5
|
"repository": "github:pkmn/engine",
|
|
6
6
|
"license": "MIT",
|
|
@@ -52,11 +52,14 @@
|
|
|
52
52
|
"src/lib/gen1/data/types.zig",
|
|
53
53
|
"src/lib/gen1/helpers.zig",
|
|
54
54
|
"src/lib/gen1/mechanics.zig",
|
|
55
|
+
"src/lib/gen2/calc.zig",
|
|
56
|
+
"src/lib/gen2/chance.zig",
|
|
55
57
|
"src/lib/gen2/data.zig",
|
|
56
58
|
"src/lib/gen2/data/items.zig",
|
|
57
59
|
"src/lib/gen2/data/moves.zig",
|
|
58
60
|
"src/lib/gen2/data/species.zig",
|
|
59
61
|
"src/lib/gen2/data/types.zig",
|
|
62
|
+
"src/lib/gen2/generated.zig",
|
|
60
63
|
"src/lib/gen2/helpers.zig",
|
|
61
64
|
"src/lib/gen2/mechanics.zig",
|
|
62
65
|
"src/lib/pkmn.zig",
|
|
@@ -73,30 +76,31 @@
|
|
|
73
76
|
"access": "public"
|
|
74
77
|
},
|
|
75
78
|
"dependencies": {
|
|
76
|
-
"@pkmn/data": "^0.
|
|
77
|
-
"@pkmn/protocol": "^0.6.
|
|
79
|
+
"@pkmn/data": "^0.8.1",
|
|
80
|
+
"@pkmn/protocol": "^0.6.17"
|
|
78
81
|
},
|
|
79
82
|
"devDependencies": {
|
|
80
|
-
"@pkmn/eslint-config": "^
|
|
81
|
-
"@pkmn/img": "^0.2.
|
|
82
|
-
"@pkmn/sets": "^5.0
|
|
83
|
-
"@pkmn/sim": "0.
|
|
84
|
-
"@types/html-minifier": "^4.0.
|
|
85
|
-
"@types/jest": "^29.5.
|
|
86
|
-
"@types/minimist": "^1.2.
|
|
87
|
-
"@types/mustache": "^4.2.
|
|
88
|
-
"@types/node": "^20.5
|
|
89
|
-
"@vitest/coverage-
|
|
90
|
-
"binaryen": "^
|
|
91
|
-
"eslint": "^8.
|
|
83
|
+
"@pkmn/eslint-config": "^6.4.0",
|
|
84
|
+
"@pkmn/img": "^0.2.20",
|
|
85
|
+
"@pkmn/sets": "^5.1.0",
|
|
86
|
+
"@pkmn/sim": "0.8.1",
|
|
87
|
+
"@types/html-minifier": "^4.0.5",
|
|
88
|
+
"@types/jest": "^29.5.11",
|
|
89
|
+
"@types/minimist": "^1.2.5",
|
|
90
|
+
"@types/mustache": "^4.2.5",
|
|
91
|
+
"@types/node": "^20.10.5",
|
|
92
|
+
"@vitest/coverage-v8": "^1.0.4",
|
|
93
|
+
"binaryen": "^116.0.0",
|
|
94
|
+
"eslint": "^8.56.0",
|
|
92
95
|
"html-minifier": "^4.0.0",
|
|
93
96
|
"json-stringify-pretty-compact": "3.0.0",
|
|
94
97
|
"minimist": "^1.2.8",
|
|
95
98
|
"mustache": "^4.2.0",
|
|
96
99
|
"source-map-support": "^0.5.21",
|
|
100
|
+
"table": "^6.8.1",
|
|
97
101
|
"trakr": "^0.2.0",
|
|
98
|
-
"typescript": "^5.
|
|
99
|
-
"vitest": "^0.
|
|
102
|
+
"typescript": "^5.3.3",
|
|
103
|
+
"vitest": "^1.0.4"
|
|
100
104
|
},
|
|
101
105
|
"scripts": {
|
|
102
106
|
"lint": "eslint --cache src --ext ts,js && eslint src/bin/*",
|
|
@@ -118,7 +122,7 @@
|
|
|
118
122
|
"ignorePatterns": [
|
|
119
123
|
"dist/",
|
|
120
124
|
"node_modules/",
|
|
121
|
-
"
|
|
125
|
+
"examples/zig",
|
|
122
126
|
"build/"
|
|
123
127
|
],
|
|
124
128
|
"env": {
|
|
@@ -134,7 +138,7 @@
|
|
|
134
138
|
"parserOptions": {
|
|
135
139
|
"project": [
|
|
136
140
|
"./tsconfig.json",
|
|
137
|
-
"./
|
|
141
|
+
"./examples/js/tsconfig.json"
|
|
138
142
|
]
|
|
139
143
|
}
|
|
140
144
|
},
|
|
@@ -10,7 +10,7 @@ const path = require('path');
|
|
|
10
10
|
const {pipeline} = require('stream/promises');
|
|
11
11
|
const tty = require('tty');
|
|
12
12
|
|
|
13
|
-
const ZIG_VERSION = {major: 0, minor:
|
|
13
|
+
const ZIG_VERSION = {major: 0, minor: 12, patch: 0, dev: 1396};
|
|
14
14
|
const DEV = ZIG_VERSION.dev ? `-dev.${ZIG_VERSION.dev}` : '';
|
|
15
15
|
const VERSION = `${ZIG_VERSION.major}.${ZIG_VERSION.minor}.${ZIG_VERSION.patch}${DEV}`;
|
|
16
16
|
const INDEX = 'https://ziglang.org/download/index.json';
|
|
@@ -283,19 +283,19 @@ const downloadImportLib = async () => {
|
|
|
283
283
|
let error = false;
|
|
284
284
|
for (let i = 2; i < process.argv.length; i++) {
|
|
285
285
|
switch (process.argv[i]) {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
286
|
+
case "--silent": {
|
|
287
|
+
SILENT = true;
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
case "--zig": {
|
|
291
|
+
if (options || only) error = true;
|
|
292
|
+
only = true;
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
default: {
|
|
296
|
+
if (options || only || !process.argv[i].startsWith('--options=')) error = true;
|
|
297
|
+
options = process.argv[i].slice(10).split(' ');
|
|
298
|
+
}
|
|
299
299
|
}
|
|
300
300
|
}
|
|
301
301
|
if (error) {
|
package/src/lib/binding/node.zig
CHANGED
|
@@ -19,7 +19,7 @@ export fn napi_register_module_v1(env: c.napi_env, exports: c.napi_value) c.napi
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
pub fn register(env: c.napi_env) c.napi_value {
|
|
22
|
-
|
|
22
|
+
const object = js.Object.init(env);
|
|
23
23
|
const properties = [_]c.napi_property_descriptor{
|
|
24
24
|
js.Property.init("options", .{ .value = options(env) }),
|
|
25
25
|
js.Property.init("bindings", .{ .value = bindings(env) }),
|
|
@@ -29,7 +29,7 @@ pub fn register(env: c.napi_env) c.napi_value {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
fn options(env: c.napi_env) c.napi_value {
|
|
32
|
-
|
|
32
|
+
const object = js.Object.init(env);
|
|
33
33
|
const properties = [_]c.napi_property_descriptor{
|
|
34
34
|
js.Property.init("showdown", .{ .value = js.Boolean.init(env, pkmn.options.showdown) }),
|
|
35
35
|
js.Property.init("log", .{ .value = js.Boolean.init(env, pkmn.options.log) }),
|
|
@@ -41,7 +41,7 @@ fn options(env: c.napi_env) c.napi_value {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
fn bindings(env: c.napi_env) c.napi_value {
|
|
44
|
-
|
|
44
|
+
const array = js.Array.init(env, .{ .length = 1 });
|
|
45
45
|
js.Array.set(env, array, 0, bind(env, pkmn.gen1));
|
|
46
46
|
return array;
|
|
47
47
|
}
|
|
@@ -49,7 +49,7 @@ fn bindings(env: c.napi_env) c.napi_value {
|
|
|
49
49
|
fn bind(env: c.napi_env, gen: anytype) c.napi_value {
|
|
50
50
|
const choices_size: u32 = @intCast(gen.CHOICES_SIZE);
|
|
51
51
|
const logs_size: u32 = @intCast(gen.LOGS_SIZE);
|
|
52
|
-
|
|
52
|
+
const object = js.Object.init(env);
|
|
53
53
|
const properties = [_]c.napi_property_descriptor{
|
|
54
54
|
js.Property.init("CHOICES_SIZE", .{ .value = js.Number.init(env, choices_size) }),
|
|
55
55
|
js.Property.init("LOGS_SIZE", .{ .value = js.Number.init(env, logs_size) }),
|
|
@@ -72,7 +72,6 @@ fn update(gen: anytype) c.napi_callback {
|
|
|
72
72
|
var len: usize = 0;
|
|
73
73
|
assert(c.napi_get_arraybuffer_info(env, argv[0], &data, &len) == c.napi_ok);
|
|
74
74
|
assert(len == @sizeOf(gen.Battle(gen.PRNG)));
|
|
75
|
-
assert(data != null);
|
|
76
75
|
|
|
77
76
|
var battle: *gen.Battle(gen.PRNG) = @alignCast(@ptrCast(data.?));
|
|
78
77
|
const c1: pkmn.Choice = @bitCast(js.Number.get(env, argv[1], u8));
|
|
@@ -85,9 +84,8 @@ fn update(gen: anytype) c.napi_callback {
|
|
|
85
84
|
else => result: {
|
|
86
85
|
assert(c.napi_get_arraybuffer_info(env, argv[3], &data, &len) == c.napi_ok);
|
|
87
86
|
assert(len == gen.LOGS_SIZE);
|
|
88
|
-
assert(data != null);
|
|
89
87
|
|
|
90
|
-
|
|
88
|
+
const buf = @as([*]u8, @ptrCast(data.?))[0..gen.LOGS_SIZE];
|
|
91
89
|
var stream: pkmn.protocol.ByteStream = .{ .buffer = buf };
|
|
92
90
|
// TODO: extract out
|
|
93
91
|
var opts = pkmn.battle.options(
|
|
@@ -116,7 +114,6 @@ fn choices(gen: anytype) c.napi_callback {
|
|
|
116
114
|
var len: usize = 0;
|
|
117
115
|
assert(c.napi_get_arraybuffer_info(env, argv[0], &data, &len) == c.napi_ok);
|
|
118
116
|
assert(len == @sizeOf(gen.Battle(gen.PRNG)));
|
|
119
|
-
assert(data != null);
|
|
120
117
|
|
|
121
118
|
var battle: *gen.Battle(gen.PRNG) = @alignCast(@ptrCast(data.?));
|
|
122
119
|
const player: pkmn.Player = @enumFromInt(js.Number.get(env, argv[1], u8));
|
|
@@ -124,9 +121,8 @@ fn choices(gen: anytype) c.napi_callback {
|
|
|
124
121
|
|
|
125
122
|
assert(c.napi_get_arraybuffer_info(env, argv[3], &data, &len) == c.napi_ok);
|
|
126
123
|
assert(len == gen.CHOICES_SIZE);
|
|
127
|
-
assert(data != null);
|
|
128
124
|
|
|
129
|
-
|
|
125
|
+
const out = @as([*]pkmn.Choice, @ptrCast(data.?))[0..gen.CHOICES_SIZE];
|
|
130
126
|
const n = battle.choices(player, request, out);
|
|
131
127
|
return js.Number.init(env, @as(u8, @bitCast(n)));
|
|
132
128
|
}
|
package/src/lib/common/data.zig
CHANGED
|
@@ -9,12 +9,12 @@ pub const Player = enum(u1) {
|
|
|
9
9
|
P2,
|
|
10
10
|
|
|
11
11
|
/// Returns a player's opponent.
|
|
12
|
-
pub
|
|
12
|
+
pub fn foe(self: Player) Player {
|
|
13
13
|
return @enumFromInt(~@intFromEnum(self));
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/// Return's an identifier for the player's Pokémon at the one-indexed `id`.
|
|
17
|
-
pub
|
|
17
|
+
pub fn ident(self: Player, id: u3) ID {
|
|
18
18
|
assert(id > 0 and id <= 6);
|
|
19
19
|
return .{ .id = id, .player = self };
|
|
20
20
|
}
|
|
@@ -35,12 +35,12 @@ pub const ID = packed struct(u8) {
|
|
|
35
35
|
_: u4 = 0,
|
|
36
36
|
|
|
37
37
|
/// Converts the identifier into a number.
|
|
38
|
-
pub
|
|
38
|
+
pub fn int(self: ID) u4 {
|
|
39
39
|
return @intCast(@as(u8, @bitCast(self)));
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
/// Decodes the identifier from a number.
|
|
43
|
-
pub
|
|
43
|
+
pub fn from(id: u4) ID {
|
|
44
44
|
return @bitCast(@as(u8, id));
|
|
45
45
|
}
|
|
46
46
|
};
|