#include "DataSpec/DNACommon/PART.hpp" #include "DataSpec/DNACommon/PAK.hpp" namespace DataSpec::DNAParticle { template <> std::string_view GPSM::DNAType() { return "GPSM"sv; } template <> std::string_view GPSM::DNAType() { return "GPSM"sv; } template void GPSM::_read(typename ReadYaml::StreamT& r) { for (const auto& elem : r.getCurNode()->m_mapChildren) { if (elem.first.size() < 4) { LogModule.report(logvisor::Warning, fmt("short FourCC in element '{}'"), elem.first); continue; } if (auto rec = r.enterSubRecord(elem.first.c_str())) { switch (*reinterpret_cast(elem.first.data())) { case SBIG('PMCL'): x78_PMCL.read(r); break; case SBIG('LFOR'): x118_LFOR.read(r); break; case SBIG('IDTS'): xa4_IDTS.read(r); break; case SBIG('EMTR'): x40_EMTR.read(r); break; case SBIG('COLR'): x30_COLR.read(r); break; case SBIG('CIND'): x45_30_CIND = r.readBool(); break; case SBIG('AAPH'): x44_26_AAPH = r.readBool(); break; case SBIG('CSSD'): xa0_CSSD.read(r); break; case SBIG('GRTE'): x2c_GRTE.read(r); break; case SBIG('FXLL'): x44_25_FXLL = r.readBool(); break; case SBIG('ICTS'): x8c_ICTS.read(r); break; case SBIG('KSSM'): xd0_KSSM.read(r); break; case SBIG('ILOC'): x38_ILOC.read(r); break; case SBIG('IITS'): xb8_IITS.read(r); break; case SBIG('IVEC'): x3c_IVEC.read(r); break; case SBIG('LDIR'): x110_LDIR.read(r); break; case SBIG('LCLR'): x104_LCLR.read(r); break; case SBIG('LENG'): x20_LENG.read(r); break; case SBIG('MAXP'): x28_MAXP.read(r); break; case SBIG('LOFF'): x10c_LOFF.read(r); break; case SBIG('LINT'): x108_LINT.read(r); break; case SBIG('LINE'): x44_24_LINE = r.readBool(); break; case SBIG('LFOT'): x114_LFOT.read(r); break; case SBIG('LIT_'): x44_29_LIT_ = r.readBool(); break; case SBIG('LTME'): x34_LTME.read(r); break; case SBIG('LSLA'): x11c_LSLA.read(r); break; case SBIG('LTYP'): x100_LTYP.read(r); break; case SBIG('NDSY'): xb4_NDSY.read(r); break; case SBIG('MBSP'): x48_MBSP.read(r); break; case SBIG('MBLR'): x44_30_MBLR = r.readBool(); break; case SBIG('NCSY'): x9c_NCSY.read(r); break; case SBIG('PISY'): xc8_PISY.read(r); break; case SBIG('OPTS'): x45_31_OPTS = r.readBool(); break; case SBIG('PMAB'): x44_31_PMAB = r.readBool(); break; case SBIG('SESD'): xf8_SESD.read(r); break; case SBIG('SEPO'): xfc_SEPO.read(r); break; case SBIG('PSLT'): xc_PSLT.read(r); break; case SBIG('PMSC'): x74_PMSC.read(r); break; case SBIG('PMOP'): x6c_PMOP.read(r); break; case SBIG('PMDL'): x5c_PMDL.read(r); break; case SBIG('PMRT'): x70_PMRT.read(r); break; case SBIG('POFS'): x18_POFS.read(r); break; case SBIG('PMUS'): x45_24_PMUS = r.readBool(); break; case SBIG('PSIV'): x0_PSIV.read(r); break; case SBIG('ROTA'): x50_ROTA.read(r); break; case SBIG('PSVM'): x4_PSVM.read(r); break; case SBIG('PSTS'): x14_PSTS.read(r); break; case SBIG('PSOV'): x8_PSOV.read(r); break; case SBIG('PSWT'): x10_PSWT.read(r); break; case SBIG('PMLC'): xec_PMLC.read(r); break; case SBIG('SEED'): x1c_SEED.read(r); break; case SBIG('PMOO'): x45_25_PMOO = r.readBool(); break; case SBIG('SSSD'): xe4_SSSD.read(r); break; case SBIG('SORT'): x44_28_SORT = r.readBool(); break; case SBIG('SIZE'): x4c_SIZE.read(r); break; case SBIG('SISY'): xcc_SISY.read(r); break; case SBIG('SSPO'): xe8_SSPO.read(r); break; case SBIG('TEXR'): x54_TEXR.read(r); break; case SBIG('SSWH'): xd4_SSWH.read(r); break; case SBIG('TIND'): x58_TIND.read(r); break; case SBIG('VMD4'): x45_29_VMD4 = r.readBool(); break; case SBIG('VMD3'): x45_28_VMD3 = r.readBool(); break; case SBIG('VMD2'): x45_27_VMD2 = r.readBool(); break; case SBIG('VMD1'): x45_26_VMD1 = r.readBool(); break; case SBIG('VEL4'): x88_VEL4.read(r); break; case SBIG('VEL3'): x84_VEL3.read(r); break; case SBIG('VEL2'): x80_VEL2.read(r); break; case SBIG('VEL1'): x7c_VEL1.read(r); break; case SBIG('ZBUF'): x44_27_ZBUF = r.readBool(); break; case SBIG('WIDT'): x24_WIDT.read(r); break; case SBIG('ORNT'): x30_30_ORNT = r.readBool(); break; case SBIG('RSOP'): x30_31_RSOP = r.readBool(); break; case SBIG('ADV1'): x10c_ADV1.read(r); break; case SBIG('ADV2'): x110_ADV2.read(r); break; case SBIG('ADV3'): x114_ADV3.read(r); break; case SBIG('ADV4'): x118_ADV4.read(r); break; case SBIG('ADV5'): x11c_ADV5.read(r); break; case SBIG('ADV6'): x120_ADV6.read(r); break; case SBIG('ADV7'): x124_ADV7.read(r); break; case SBIG('SELC'): xd8_SELC.read(r); break; default: break; } } } } template void GPSM::_write(typename WriteYaml::StreamT& w) const { if (x0_PSIV) if (auto rec = w.enterSubRecord("PSIV")) x0_PSIV.write(w); if (x4_PSVM) if (auto rec = w.enterSubRecord("PSVM")) x4_PSVM.write(w); if (x8_PSOV) if (auto rec = w.enterSubRecord("PSOV")) x8_PSOV.write(w); if (xc_PSLT) if (auto rec = w.enterSubRecord("PSLT")) xc_PSLT.write(w); if (x10_PSWT) if (auto rec = w.enterSubRecord("PSWT")) x10_PSWT.write(w); if (x14_PSTS) if (auto rec = w.enterSubRecord("PSTS")) x14_PSTS.write(w); if (x18_POFS) if (auto rec = w.enterSubRecord("POFS")) x18_POFS.write(w); if (x1c_SEED) if (auto rec = w.enterSubRecord("SEED")) x1c_SEED.write(w); if (x20_LENG) if (auto rec = w.enterSubRecord("LENG")) x20_LENG.write(w); if (x24_WIDT) if (auto rec = w.enterSubRecord("WIDT")) x24_WIDT.write(w); if (x28_MAXP) if (auto rec = w.enterSubRecord("MAXP")) x28_MAXP.write(w); if (x2c_GRTE) if (auto rec = w.enterSubRecord("GRTE")) x2c_GRTE.write(w); if (x30_COLR) if (auto rec = w.enterSubRecord("COLR")) x30_COLR.write(w); if (x34_LTME) if (auto rec = w.enterSubRecord("LTME")) x34_LTME.write(w); if (x38_ILOC) if (auto rec = w.enterSubRecord("ILOC")) x38_ILOC.write(w); if (x3c_IVEC) if (auto rec = w.enterSubRecord("IVEC")) x3c_IVEC.write(w); if (x40_EMTR) if (auto rec = w.enterSubRecord("EMTR")) x40_EMTR.write(w); if (x44_24_LINE) w.writeBool("LINE", true); if (x44_25_FXLL) w.writeBool("FXLL", true); if (x44_26_AAPH) w.writeBool("AAPH", true); if (x44_27_ZBUF) w.writeBool("ZBUF", true); if (x44_28_SORT) w.writeBool("SORT", true); if (x44_29_LIT_) w.writeBool("LIT_", true); if (x44_30_MBLR) w.writeBool("MBLR", true); if (x44_31_PMAB) w.writeBool("PMAB", true); if (x45_24_PMUS) w.writeBool("PMUS", true); if (!x45_25_PMOO) w.writeBool("PMOO", false); if (x45_26_VMD1) w.writeBool("VMD1", true); if (x45_27_VMD2) w.writeBool("VMD2", true); if (x45_28_VMD3) w.writeBool("VMD3", true); if (x45_29_VMD4) w.writeBool("VMD4", true); if (x45_30_CIND) w.writeBool("CIND", true); if (x45_31_OPTS) w.writeBool("OPTS", true); if (x30_30_ORNT) w.writeBool("ORNT", true); if (x30_31_RSOP) w.writeBool("RSOP", true); if (x48_MBSP) if (auto rec = w.enterSubRecord("MBSP")) x48_MBSP.write(w); if (x4c_SIZE) if (auto rec = w.enterSubRecord("SIZE")) x4c_SIZE.write(w); if (x50_ROTA) if (auto rec = w.enterSubRecord("ROTA")) x50_ROTA.write(w); if (x54_TEXR) if (auto rec = w.enterSubRecord("TEXR")) x54_TEXR.write(w); if (x58_TIND) if (auto rec = w.enterSubRecord("TIND")) x58_TIND.write(w); if (x5c_PMDL) if (auto rec = w.enterSubRecord("PMDL")) x5c_PMDL.write(w); if (x6c_PMOP) if (auto rec = w.enterSubRecord("PMOP")) x6c_PMOP.write(w); if (x70_PMRT) if (auto rec = w.enterSubRecord("PMRT")) x70_PMRT.write(w); if (x74_PMSC) if (auto rec = w.enterSubRecord("PMSC")) x74_PMSC.write(w); if (x78_PMCL) if (auto rec = w.enterSubRecord("PMCL")) x78_PMCL.write(w); if (x7c_VEL1) if (auto rec = w.enterSubRecord("VEL1")) x7c_VEL1.write(w); if (x80_VEL2) if (auto rec = w.enterSubRecord("VEL2")) x80_VEL2.write(w); if (x84_VEL3) if (auto rec = w.enterSubRecord("VEL3")) x84_VEL3.write(w); if (x88_VEL4) if (auto rec = w.enterSubRecord("VEL4")) x88_VEL4.write(w); if (x8c_ICTS) if (auto rec = w.enterSubRecord("ICTS")) x8c_ICTS.write(w); if (x9c_NCSY) if (auto rec = w.enterSubRecord("NCSY")) x9c_NCSY.write(w); if (xa0_CSSD) if (auto rec = w.enterSubRecord("CSSD")) xa0_CSSD.write(w); if (xa4_IDTS) if (auto rec = w.enterSubRecord("IDTS")) xa4_IDTS.write(w); if (xb4_NDSY) if (auto rec = w.enterSubRecord("NDSY")) xb4_NDSY.write(w); if (xb8_IITS) if (auto rec = w.enterSubRecord("IITS")) xb8_IITS.write(w); if (xc8_PISY) if (auto rec = w.enterSubRecord("PISY")) xc8_PISY.write(w); if (xcc_SISY) if (auto rec = w.enterSubRecord("SISY")) xcc_SISY.write(w); if (xd0_KSSM) if (auto rec = w.enterSubRecord("KSSM")) xd0_KSSM.write(w); if (xd4_SSWH) if (auto rec = w.enterSubRecord("SSWH")) xd4_SSWH.write(w); if (xd8_SELC) if (auto rec = w.enterSubRecord("SELC")) xd8_SELC.write(w); if (xe4_SSSD) if (auto rec = w.enterSubRecord("SSSD")) xe4_SSSD.write(w); if (xe8_SSPO) if (auto rec = w.enterSubRecord("SSPO")) xe8_SSPO.write(w); if (xf8_SESD) if (auto rec = w.enterSubRecord("SESD")) xf8_SESD.write(w); if (xfc_SEPO) if (auto rec = w.enterSubRecord("SEPO")) xfc_SEPO.write(w); if (xec_PMLC) if (auto rec = w.enterSubRecord("PMLC")) xec_PMLC.write(w); if (x100_LTYP) if (auto rec = w.enterSubRecord("LTYP")) x100_LTYP.write(w); if (x104_LCLR) if (auto rec = w.enterSubRecord("LCLR")) x104_LCLR.write(w); if (x108_LINT) if (auto rec = w.enterSubRecord("LINT")) x108_LINT.write(w); if (x10c_LOFF) if (auto rec = w.enterSubRecord("LOFF")) x10c_LOFF.write(w); if (x110_LDIR) if (auto rec = w.enterSubRecord("LDIR")) x110_LDIR.write(w); if (x114_LFOT) if (auto rec = w.enterSubRecord("LFOT")) x114_LFOT.write(w); if (x118_LFOR) if (auto rec = w.enterSubRecord("LFOR")) x118_LFOR.write(w); if (x11c_LSLA) if (auto rec = w.enterSubRecord("LSLA")) x11c_LSLA.write(w); if (x10c_ADV1) if (auto rec = w.enterSubRecord("ADV1")) x10c_ADV1.write(w); if (x110_ADV2) if (auto rec = w.enterSubRecord("ADV2")) x110_ADV2.write(w); if (x114_ADV3) if (auto rec = w.enterSubRecord("ADV3")) x114_ADV3.write(w); if (x118_ADV4) if (auto rec = w.enterSubRecord("ADV4")) x118_ADV4.write(w); if (x11c_ADV5) if (auto rec = w.enterSubRecord("ADV5")) x11c_ADV5.write(w); if (x120_ADV6) if (auto rec = w.enterSubRecord("ADV6")) x120_ADV6.write(w); if (x124_ADV7) if (auto rec = w.enterSubRecord("ADV7")) x124_ADV7.write(w); if (x128_ADV8) if (auto rec = w.enterSubRecord("ADV8")) x128_ADV8.write(w); } template void GPSM::_binarySize(typename BinarySize::StreamT& s) const { s += 4; if (x0_PSIV) { s += 4; x0_PSIV.binarySize(s); } if (x4_PSVM) { s += 4; x4_PSVM.binarySize(s); } if (x8_PSOV) { s += 4; x8_PSOV.binarySize(s); } if (xc_PSLT) { s += 4; xc_PSLT.binarySize(s); } if (x10_PSWT) { s += 4; x10_PSWT.binarySize(s); } if (x14_PSTS) { s += 4; x14_PSTS.binarySize(s); } if (x18_POFS) { s += 4; x18_POFS.binarySize(s); } if (x1c_SEED) { s += 4; x1c_SEED.binarySize(s); } if (x20_LENG) { s += 4; x20_LENG.binarySize(s); } if (x24_WIDT) { s += 4; x24_WIDT.binarySize(s); } if (x28_MAXP) { s += 4; x28_MAXP.binarySize(s); } if (x2c_GRTE) { s += 4; x2c_GRTE.binarySize(s); } if (x30_COLR) { s += 4; x30_COLR.binarySize(s); } if (x34_LTME) { s += 4; x34_LTME.binarySize(s); } if (x38_ILOC) { s += 4; x38_ILOC.binarySize(s); } if (x3c_IVEC) { s += 4; x3c_IVEC.binarySize(s); } if (x40_EMTR) { s += 4; x40_EMTR.binarySize(s); } if (x44_24_LINE) s += 9; if (x44_25_FXLL) s += 9; if (x44_26_AAPH) s += 9; if (x44_27_ZBUF) s += 9; if (x44_28_SORT) s += 9; if (x44_29_LIT_) s += 9; if (x44_30_MBLR) s += 9; if (x44_31_PMAB) s += 9; if (x45_24_PMUS) s += 9; if (!x45_25_PMOO) s += 9; if (x45_26_VMD1) s += 9; if (x45_27_VMD2) s += 9; if (x45_28_VMD3) s += 9; if (x45_29_VMD4) s += 9; if (x45_30_CIND) s += 9; if (x45_31_OPTS) s += 9; if (x30_30_ORNT) s += 9; if (x30_31_RSOP) s += 9; if (x48_MBSP) { s += 4; x48_MBSP.binarySize(s); } if (x4c_SIZE) { s += 4; x4c_SIZE.binarySize(s); } if (x50_ROTA) { s += 4; x50_ROTA.binarySize(s); } if (x54_TEXR) { s += 4; x54_TEXR.binarySize(s); } if (x58_TIND) { s += 4; x58_TIND.binarySize(s); } if (x5c_PMDL) { s += 4; x5c_PMDL.binarySize(s); } if (x6c_PMOP) { s += 4; x6c_PMOP.binarySize(s); } if (x70_PMRT) { s += 4; x70_PMRT.binarySize(s); } if (x74_PMSC) { s += 4; x74_PMSC.binarySize(s); } if (x78_PMCL) { s += 4; x78_PMCL.binarySize(s); } if (x7c_VEL1) { s += 4; x7c_VEL1.binarySize(s); } if (x80_VEL2) { s += 4; x80_VEL2.binarySize(s); } if (x84_VEL3) { s += 4; x84_VEL3.binarySize(s); } if (x88_VEL4) { s += 4; x88_VEL4.binarySize(s); } if (x8c_ICTS) { s += 4; x8c_ICTS.binarySize(s); } if (x9c_NCSY) { s += 4; x9c_NCSY.binarySize(s); } if (xa0_CSSD) { s += 4; xa0_CSSD.binarySize(s); } if (xa4_IDTS) { s += 4; xa4_IDTS.binarySize(s); } if (xb4_NDSY) { s += 4; xb4_NDSY.binarySize(s); } if (xb8_IITS) { s += 4; xb8_IITS.binarySize(s); } if (xc8_PISY) { s += 4; xc8_PISY.binarySize(s); } if (xcc_SISY) { s += 4; xcc_SISY.binarySize(s); } if (xd0_KSSM) { s += 4; xd0_KSSM.binarySize(s); } if (xd4_SSWH) { s += 4; xd4_SSWH.binarySize(s); } if (xd8_SELC) { s += 4; xd8_SELC.binarySize(s); } if (xe4_SSSD) { s += 4; xe4_SSSD.binarySize(s); } if (xe8_SSPO) { s += 4; xe8_SSPO.binarySize(s); } if (xf8_SESD) { s += 4; xf8_SESD.binarySize(s); } if (xfc_SEPO) { s += 4; xfc_SEPO.binarySize(s); } if (xec_PMLC) { s += 4; xec_PMLC.binarySize(s); } if (x100_LTYP) { s += 4; x100_LTYP.binarySize(s); } if (x104_LCLR) { s += 4; x104_LCLR.binarySize(s); } if (x108_LINT) { s += 4; x108_LINT.binarySize(s); } if (x10c_LOFF) { s += 4; x10c_LOFF.binarySize(s); } if (x110_LDIR) { s += 4; x110_LDIR.binarySize(s); } if (x114_LFOT) { s += 4; x114_LFOT.binarySize(s); } if (x118_LFOR) { s += 4; x118_LFOR.binarySize(s); } if (x11c_LSLA) { s += 4; x11c_LSLA.binarySize(s); } if (x10c_ADV1) { s += 4; x10c_ADV1.binarySize(s); } if (x110_ADV2) { s += 4; x110_ADV2.binarySize(s); } if (x114_ADV3) { s += 4; x114_ADV3.binarySize(s); } if (x118_ADV4) { s += 4; x118_ADV4.binarySize(s); } if (x11c_ADV5) { s += 4; x11c_ADV5.binarySize(s); } if (x120_ADV6) { s += 4; x120_ADV6.binarySize(s); } if (x124_ADV7) { s += 4; x124_ADV7.binarySize(s); } if (x128_ADV8) { s += 4; x128_ADV8.binarySize(s); } } template void GPSM::_read(typename Read::StreamT& r) { DNAFourCC clsId; clsId.read(r); if (clsId != SBIG('GPSM')) { LogModule.report(logvisor::Warning, fmt("non GPSM provided to GPSM parser")); return; } clsId.read(r); while (clsId != SBIG('_END')) { switch (clsId.toUint32()) { case SBIG('PMCL'): x78_PMCL.read(r); break; case SBIG('LFOR'): x118_LFOR.read(r); break; case SBIG('IDTS'): xa4_IDTS.read(r); break; case SBIG('EMTR'): x40_EMTR.read(r); break; case SBIG('COLR'): x30_COLR.read(r); break; case SBIG('CIND'): r.readUint32Big(); x45_30_CIND = r.readBool(); break; case SBIG('AAPH'): r.readUint32Big(); x44_26_AAPH = r.readBool(); break; case SBIG('CSSD'): xa0_CSSD.read(r); break; case SBIG('GRTE'): x2c_GRTE.read(r); break; case SBIG('FXLL'): r.readUint32Big(); x44_25_FXLL = r.readBool(); break; case SBIG('ICTS'): x8c_ICTS.read(r); break; case SBIG('KSSM'): xd0_KSSM.read(r); break; case SBIG('ILOC'): x38_ILOC.read(r); break; case SBIG('IITS'): xb8_IITS.read(r); break; case SBIG('IVEC'): x3c_IVEC.read(r); break; case SBIG('LDIR'): x110_LDIR.read(r); break; case SBIG('LCLR'): x104_LCLR.read(r); break; case SBIG('LENG'): x20_LENG.read(r); break; case SBIG('MAXP'): x28_MAXP.read(r); break; case SBIG('LOFF'): x10c_LOFF.read(r); break; case SBIG('LINT'): x108_LINT.read(r); break; case SBIG('LINE'): r.readUint32Big(); x44_24_LINE = r.readBool(); break; case SBIG('LFOT'): x114_LFOT.read(r); break; case SBIG('LIT_'): r.readUint32Big(); x44_29_LIT_ = r.readBool(); break; case SBIG('LTME'): x34_LTME.read(r); break; case SBIG('LSLA'): x11c_LSLA.read(r); break; case SBIG('LTYP'): x100_LTYP.read(r); break; case SBIG('NDSY'): xb4_NDSY.read(r); break; case SBIG('MBSP'): x48_MBSP.read(r); break; case SBIG('MBLR'): r.readUint32Big(); x44_30_MBLR = r.readBool(); break; case SBIG('NCSY'): x9c_NCSY.read(r); break; case SBIG('PISY'): xc8_PISY.read(r); break; case SBIG('OPTS'): r.readUint32Big(); x45_31_OPTS = r.readBool(); break; case SBIG('PMAB'): r.readUint32Big(); x44_31_PMAB = r.readBool(); break; case SBIG('SESD'): xf8_SESD.read(r); break; case SBIG('SEPO'): xfc_SEPO.read(r); break; case SBIG('PSLT'): xc_PSLT.read(r); break; case SBIG('PMSC'): x74_PMSC.read(r); break; case SBIG('PMOP'): x6c_PMOP.read(r); break; case SBIG('PMDL'): x5c_PMDL.read(r); break; case SBIG('PMRT'): x70_PMRT.read(r); break; case SBIG('POFS'): x18_POFS.read(r); break; case SBIG('PMUS'): r.readUint32Big(); x45_24_PMUS = r.readBool(); break; case SBIG('PSIV'): x0_PSIV.read(r); break; case SBIG('ROTA'): x50_ROTA.read(r); break; case SBIG('PSVM'): x4_PSVM.read(r); break; case SBIG('PSTS'): x14_PSTS.read(r); break; case SBIG('PSOV'): x8_PSOV.read(r); break; case SBIG('PSWT'): x10_PSWT.read(r); break; case SBIG('PMLC'): xec_PMLC.read(r); break; case SBIG('SEED'): x1c_SEED.read(r); break; case SBIG('PMOO'): r.readUint32Big(); x45_25_PMOO = r.readBool(); break; case SBIG('SSSD'): xe4_SSSD.read(r); break; case SBIG('SORT'): r.readUint32Big(); x44_28_SORT = r.readBool(); break; case SBIG('SIZE'): x4c_SIZE.read(r); break; case SBIG('SISY'): xcc_SISY.read(r); break; case SBIG('SSPO'): xe8_SSPO.read(r); break; case SBIG('TEXR'): x54_TEXR.read(r); break; case SBIG('SSWH'): xd4_SSWH.read(r); break; case SBIG('TIND'): x58_TIND.read(r); break; case SBIG('VMD4'): r.readUint32Big(); x45_29_VMD4 = r.readBool(); break; case SBIG('VMD3'): r.readUint32Big(); x45_28_VMD3 = r.readBool(); break; case SBIG('VMD2'): r.readUint32Big(); x45_27_VMD2 = r.readBool(); break; case SBIG('VMD1'): r.readUint32Big(); x45_26_VMD1 = r.readBool(); break; case SBIG('VEL4'): x88_VEL4.read(r); break; case SBIG('VEL3'): x84_VEL3.read(r); break; case SBIG('VEL2'): x80_VEL2.read(r); break; case SBIG('VEL1'): x7c_VEL1.read(r); break; case SBIG('ZBUF'): r.readUint32Big(); x44_27_ZBUF = r.readBool(); break; case SBIG('WIDT'): x24_WIDT.read(r); break; case SBIG('ORNT'): r.readUint32Big(); x30_30_ORNT = r.readBool(); break; case SBIG('RSOP'): r.readUint32Big(); x30_31_RSOP = r.readBool(); break; case SBIG('ADV1'): x10c_ADV1.read(r); break; case SBIG('ADV2'): x110_ADV2.read(r); break; case SBIG('ADV3'): x114_ADV3.read(r); break; case SBIG('ADV4'): x118_ADV4.read(r); break; case SBIG('ADV5'): x11c_ADV5.read(r); break; case SBIG('ADV6'): x120_ADV6.read(r); break; case SBIG('ADV7'): x124_ADV7.read(r); break; case SBIG('ADV8'): x128_ADV8.read(r); break; case SBIG('SELC'): xd8_SELC.read(r); break; default: LogModule.report(logvisor::Fatal, fmt("Unknown GPSM class {} @{}"), clsId, r.position()); break; } clsId.read(r); } } template void GPSM::_write(typename Write::StreamT& w) const { w.writeBytes((atInt8*)"GPSM", 4); if (x0_PSIV) { w.writeBytes((atInt8*)"PSIV", 4); x0_PSIV.write(w); } if (x4_PSVM) { w.writeBytes((atInt8*)"PSVM", 4); x4_PSVM.write(w); } if (x8_PSOV) { w.writeBytes((atInt8*)"PSOV", 4); x8_PSOV.write(w); } if (xc_PSLT) { w.writeBytes((atInt8*)"PSLT", 4); xc_PSLT.write(w); } if (x10_PSWT) { w.writeBytes((atInt8*)"PSWT", 4); x10_PSWT.write(w); } if (x14_PSTS) { w.writeBytes((atInt8*)"PSTS", 4); x14_PSTS.write(w); } if (x18_POFS) { w.writeBytes((atInt8*)"POFS", 4); x18_POFS.write(w); } if (x1c_SEED) { w.writeBytes((atInt8*)"SEED", 4); x1c_SEED.write(w); } if (x20_LENG) { w.writeBytes((atInt8*)"LENG", 4); x20_LENG.write(w); } if (x24_WIDT) { w.writeBytes((atInt8*)"WIDT", 4); x24_WIDT.write(w); } if (x28_MAXP) { w.writeBytes((atInt8*)"MAXP", 4); x28_MAXP.write(w); } if (x2c_GRTE) { w.writeBytes((atInt8*)"GRTE", 4); x2c_GRTE.write(w); } if (x30_COLR) { w.writeBytes((atInt8*)"COLR", 4); x30_COLR.write(w); } if (x34_LTME) { w.writeBytes((atInt8*)"LTME", 4); x34_LTME.write(w); } if (x38_ILOC) { w.writeBytes((atInt8*)"ILOC", 4); x38_ILOC.write(w); } if (x3c_IVEC) { w.writeBytes((atInt8*)"IVEC", 4); x3c_IVEC.write(w); } if (x40_EMTR) { w.writeBytes((atInt8*)"EMTR", 4); x40_EMTR.write(w); } if (x44_24_LINE) { w.writeBytes((atInt8*)"LINECNST\x01", 9); } if (x44_25_FXLL) { w.writeBytes((atInt8*)"FXLLCNST\x01", 9); } if (x44_26_AAPH) { w.writeBytes((atInt8*)"AAPHCNST\x01", 9); } if (x44_27_ZBUF) { w.writeBytes((atInt8*)"ZBUFCNST\x01", 9); } if (x44_28_SORT) { w.writeBytes((atInt8*)"SORTCNST\x01", 9); } if (x44_29_LIT_) { w.writeBytes((atInt8*)"LIT_CNST\x01", 9); } if (x44_30_MBLR) { w.writeBytes((atInt8*)"MBLRCNST\x01", 9); } if (x44_31_PMAB) { w.writeBytes((atInt8*)"PMABCNST\x01", 9); } if (x45_24_PMUS) { w.writeBytes((atInt8*)"PMUSCNST\x01", 9); } if (!x45_25_PMOO) { w.writeBytes((atInt8*)"PMOOCNST\x00", 9); } if (x45_26_VMD1) { w.writeBytes((atInt8*)"VMD1CNST\x01", 9); } if (x45_27_VMD2) { w.writeBytes((atInt8*)"VMD2CNST\x01", 9); } if (x45_28_VMD3) { w.writeBytes((atInt8*)"VMD3CNST\x01", 9); } if (x45_29_VMD4) { w.writeBytes((atInt8*)"VMD4CNST\x01", 9); } if (x45_30_CIND) { w.writeBytes((atInt8*)"CINDCNST\x01", 9); } if (x45_31_OPTS) { w.writeBytes((atInt8*)"OPTSCNST\x01", 9); } if (x30_30_ORNT) { w.writeBytes((atInt8*)"ORNTCNST\x01", 9); } if (x30_31_RSOP) { w.writeBytes((atInt8*)"RSOPCNST\x01", 9); } if (x48_MBSP) { w.writeBytes((atInt8*)"MBSP", 4); x48_MBSP.write(w); } if (x4c_SIZE) { w.writeBytes((atInt8*)"SIZE", 4); x4c_SIZE.write(w); } if (x50_ROTA) { w.writeBytes((atInt8*)"ROTA", 4); x50_ROTA.write(w); } if (x54_TEXR) { w.writeBytes((atInt8*)"TEXR", 4); x54_TEXR.write(w); } if (x58_TIND) { w.writeBytes((atInt8*)"TIND", 4); x58_TIND.write(w); } if (x5c_PMDL) { w.writeBytes((atInt8*)"PMDL", 4); x5c_PMDL.write(w); } if (x6c_PMOP) { w.writeBytes((atInt8*)"PMOP", 4); x6c_PMOP.write(w); } if (x70_PMRT) { w.writeBytes((atInt8*)"PMRT", 4); x70_PMRT.write(w); } if (x74_PMSC) { w.writeBytes((atInt8*)"PMSC", 4); x74_PMSC.write(w); } if (x78_PMCL) { w.writeBytes((atInt8*)"PMCL", 4); x78_PMCL.write(w); } if (x7c_VEL1) { w.writeBytes((atInt8*)"VEL1", 4); x7c_VEL1.write(w); } if (x80_VEL2) { w.writeBytes((atInt8*)"VEL2", 4); x80_VEL2.write(w); } if (x84_VEL3) { w.writeBytes((atInt8*)"VEL3", 4); x84_VEL3.write(w); } if (x88_VEL4) { w.writeBytes((atInt8*)"VEL4", 4); x88_VEL4.write(w); } if (x8c_ICTS) { w.writeBytes((atInt8*)"ICTS", 4); x8c_ICTS.write(w); } if (x9c_NCSY) { w.writeBytes((atInt8*)"NCSY", 4); x9c_NCSY.write(w); } if (xa0_CSSD) { w.writeBytes((atInt8*)"CSSD", 4); xa0_CSSD.write(w); } if (xa4_IDTS) { w.writeBytes((atInt8*)"IDTS", 4); xa4_IDTS.write(w); } if (xb4_NDSY) { w.writeBytes((atInt8*)"NDSY", 4); xb4_NDSY.write(w); } if (xb8_IITS) { w.writeBytes((atInt8*)"IITS", 4); xb8_IITS.write(w); } if (xc8_PISY) { w.writeBytes((atInt8*)"PISY", 4); xc8_PISY.write(w); } if (xcc_SISY) { w.writeBytes((atInt8*)"SISY", 4); xcc_SISY.write(w); } if (xd0_KSSM) { w.writeBytes((atInt8*)"KSSM", 4); xd0_KSSM.write(w); } if (xd4_SSWH) { w.writeBytes((atInt8*)"SSWH", 4); xd4_SSWH.write(w); } if (xd8_SELC) { w.writeBytes((atInt8*)"SELC", 4); xd8_SELC.write(w); } if (xe4_SSSD) { w.writeBytes((atInt8*)"SSSD", 4); xe4_SSSD.write(w); } if (xe8_SSPO) { w.writeBytes((atInt8*)"SSPO", 4); xe8_SSPO.write(w); } if (xf8_SESD) { w.writeBytes((atInt8*)"SESD", 4); xf8_SESD.write(w); } if (xfc_SEPO) { w.writeBytes((atInt8*)"SEPO", 4); xfc_SEPO.write(w); } if (xec_PMLC) { w.writeBytes((atInt8*)"PMLC", 4); xec_PMLC.write(w); } if (x100_LTYP) { w.writeBytes((atInt8*)"LTYP", 4); x100_LTYP.write(w); } if (x104_LCLR) { w.writeBytes((atInt8*)"LCLR", 4); x104_LCLR.write(w); } if (x108_LINT) { w.writeBytes((atInt8*)"LINT", 4); x108_LINT.write(w); } if (x10c_LOFF) { w.writeBytes((atInt8*)"LOFF", 4); x10c_LOFF.write(w); } if (x110_LDIR) { w.writeBytes((atInt8*)"LDIR", 4); x110_LDIR.write(w); } if (x114_LFOT) { w.writeBytes((atInt8*)"LFOT", 4); x114_LFOT.write(w); } if (x118_LFOR) { w.writeBytes((atInt8*)"LFOR", 4); x118_LFOR.write(w); } if (x11c_LSLA) { w.writeBytes((atInt8*)"LSLA", 4); x11c_LSLA.write(w); } if (x10c_ADV1) { w.writeBytes((atInt8*)"ADV1", 4); x10c_ADV1.write(w); } if (x110_ADV2) { w.writeBytes((atInt8*)"ADV2", 4); x110_ADV2.write(w); } if (x114_ADV3) { w.writeBytes((atInt8*)"ADV3", 4); x114_ADV3.write(w); } if (x118_ADV4) { w.writeBytes((atInt8*)"ADV4", 4); x118_ADV4.write(w); } if (x11c_ADV5) { w.writeBytes((atInt8*)"ADV5", 4); x11c_ADV5.write(w); } if (x120_ADV6) { w.writeBytes((atInt8*)"ADV6", 4); x120_ADV6.write(w); } if (x124_ADV7) { w.writeBytes((atInt8*)"ADV7", 4); x124_ADV7.write(w); } if (x128_ADV8) { w.writeBytes((atInt8*)"ADV8", 4); x128_ADV8.write(w); } w.writeBytes("_END", 4); } AT_SUBSPECIALIZE_DNA_YAML(GPSM) AT_SUBSPECIALIZE_DNA_YAML(GPSM) template void GPSM::gatherDependencies(std::vector& pathsOut) const { if (x54_TEXR.m_elem) x54_TEXR.m_elem->gatherDependencies(pathsOut); if (x58_TIND.m_elem) x58_TIND.m_elem->gatherDependencies(pathsOut); g_curSpec->flattenDependencies(x5c_PMDL.id, pathsOut); g_curSpec->flattenDependencies(x8c_ICTS.id, pathsOut); g_curSpec->flattenDependencies(xa4_IDTS.id, pathsOut); g_curSpec->flattenDependencies(xb8_IITS.id, pathsOut); xd0_KSSM.gatherDependencies(pathsOut); g_curSpec->flattenDependencies(xd4_SSWH.id, pathsOut); g_curSpec->flattenDependencies(xec_PMLC.id, pathsOut); g_curSpec->flattenDependencies(xd8_SELC.id, pathsOut); } template struct GPSM; template struct GPSM; template bool ExtractGPSM(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath) { athena::io::FileWriter writer(outPath.getAbsolutePath()); if (writer.isOpen()) { GPSM gpsm; gpsm.read(rs); athena::io::ToYAMLStream(gpsm, writer); return true; } return false; } template bool ExtractGPSM(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath); template bool ExtractGPSM(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath); template bool WriteGPSM(const GPSM& gpsm, const hecl::ProjectPath& outPath) { athena::io::FileWriter w(outPath.getAbsolutePath(), true, false); if (w.hasError()) return false; gpsm.write(w); int64_t rem = w.position() % 32; if (rem) for (int64_t i = 0; i < 32 - rem; ++i) w.writeUByte(0xff); return true; } template bool WriteGPSM(const GPSM& gpsm, const hecl::ProjectPath& outPath); template bool WriteGPSM(const GPSM& gpsm, const hecl::ProjectPath& outPath); } // namespace DataSpec::DNAParticle