UNPKG

@abextm/cache2

Version:

Utilities for reading OSRS "caches"

57 lines (56 loc) 1.61 kB
import { PerFileLoadable } from "../Loadable.js"; import { Typed } from "../reflect.js"; export class EnumValueMap extends Map { parent; constructor(parent) { super(); this.parent = parent; } } export class Enum extends PerFileLoadable { id; constructor(id) { super(); this.id = id; } static index = 2; static archive = 8; keyTypeChar; valueTypeChar; defaultValue = undefined; map = new EnumValueMap(this); get(k) { return this.map.get(k) ?? this.defaultValue; } static decode(reader, id) { const v = new Enum(id); for (let opcode; (opcode = reader.u8()) != 0;) { switch (opcode) { case 1: v.keyTypeChar = reader.u8(); break; case 2: v.valueTypeChar = reader.u8(); break; case 3: v.defaultValue = reader.string(); break; case 4: v.defaultValue = reader.i32(); break; case 5: case 6: { let coder = opcode === 5 ? "string" : "i32"; let size = reader.u16(); for (let i = 0; i < size; i++) { v.map.set(reader.i32(), reader[coder]()); } break; } default: throw new Error(`unknown enum opcode ${opcode}`); } } return v; } }