mirror of https://github.com/AxioDL/metaforce.git
38 lines
1.2 KiB
C++
38 lines
1.2 KiB
C++
#include "athena/IStreamReader.hpp"
|
|
#include "athena/IStreamWriter.hpp"
|
|
#include "athena/FileWriter.hpp"
|
|
#include "DGRP.hpp"
|
|
|
|
namespace DataSpec::DNADGRP {
|
|
|
|
template <class IDType>
|
|
bool ExtractDGRP(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath) {
|
|
athena::io::FileWriter writer(outPath.getAbsolutePath());
|
|
if (writer.isOpen()) {
|
|
DGRP<IDType> dgrp;
|
|
dgrp.read(rs);
|
|
athena::io::ToYAMLStream(dgrp, writer);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
template bool ExtractDGRP<UniqueID32>(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath);
|
|
template bool ExtractDGRP<UniqueID64>(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath);
|
|
|
|
template <class IDType>
|
|
bool WriteDGRP(const DGRP<IDType>& dgrp, const hecl::ProjectPath& outPath) {
|
|
athena::io::FileWriter w(outPath.getAbsolutePath(), true, false);
|
|
if (w.hasError())
|
|
return false;
|
|
dgrp.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 WriteDGRP<UniqueID32>(const DGRP<UniqueID32>& dgrp, const hecl::ProjectPath& outPath);
|
|
template bool WriteDGRP<UniqueID64>(const DGRP<UniqueID64>& dgrp, const hecl::ProjectPath& outPath);
|
|
|
|
} // namespace DataSpec::DNADGRP
|