Huge non-virtual template-based refactor for DNA

This commit is contained in:
Jack Andersen
2018-02-17 23:50:24 -10:00
parent 42b97e0306
commit 13d13f935b
30 changed files with 2632 additions and 2407 deletions

View File

@@ -3,7 +3,7 @@
#include <iostream>
#include <iomanip>
namespace athena::Checksums
namespace athena::checksums
{
atUint32 crc32(const atUint8* data, atUint64 length, atUint32 mask, atUint32 seed)

View File

@@ -341,7 +341,8 @@ std::unique_ptr<atUint8[]> NodeToVal(const YAMLNode* node)
std::unique_ptr<YAMLNode> ValToNode(const std::unique_ptr<atUint8[]>& val, size_t byteCount)
{
YAMLNode* ret = new YAMLNode(YAML_SCALAR_NODE);
ret->m_scalarString = base64_encode(val.get(), byteCount);
if (val)
ret->m_scalarString = base64_encode(val.get(), byteCount);
return std::unique_ptr<YAMLNode>(ret);
}

View File

@@ -28,11 +28,11 @@ std::ostream& operator<<(std::ostream& os, const athena::Endian& endian)
{
switch (endian)
{
case athena::Endian::LittleEndian:
case athena::Endian::Little:
os << "LittleEndian";
break;
case athena::Endian::BigEndian:
case athena::Endian::Big:
os << "BigEndian";
break;
}

View File

@@ -4,7 +4,7 @@ namespace athena
{
MCSlot::MCSlot(std::unique_ptr<atUint8[]>&& data, atUint32 length)
: ZQuestFile(ZQuestFile::MC, Endian::LittleEndian, std::move(data), length)
: ZQuestFile(ZQuestFile::MC, Endian::Little, std::move(data), length)
{
}

View File

@@ -9,13 +9,13 @@ namespace athena::io
SkywardSwordFileReader::SkywardSwordFileReader(atUint8* data, atUint64 length)
: MemoryCopyReader(data, length)
{
setEndian(Endian::BigEndian);
setEndian(Endian::Big);
}
SkywardSwordFileReader::SkywardSwordFileReader(const std::string& filename)
: MemoryCopyReader(filename)
{
setEndian(Endian::BigEndian);
setEndian(Endian::Big);
}
SkywardSwordFile* SkywardSwordFileReader::read()

View File

@@ -8,13 +8,13 @@ namespace athena::io
SkywardSwordFileWriter::SkywardSwordFileWriter(atUint8* data, atUint64 len)
: MemoryCopyWriter(data, len)
{
setEndian(Endian::BigEndian);
setEndian(Endian::Big);
}
SkywardSwordFileWriter::SkywardSwordFileWriter(const std::string& filename)
: MemoryCopyWriter(filename)
{
setEndian(Endian::BigEndian);
setEndian(Endian::Big);
}
void SkywardSwordFileWriter::write(SkywardSwordFile* file)

View File

@@ -38,7 +38,7 @@ union AmmoValues
};
SkywardSwordQuest::SkywardSwordQuest(std::unique_ptr<atUint8[]>&& data, atUint32 len)
: ZQuestFile(ZQuestFile::SS, Endian::BigEndian, std::move(data), len)
: ZQuestFile(ZQuestFile::SS, Endian::Big, std::move(data), len)
{
}
@@ -240,11 +240,11 @@ atUint32 SkywardSwordQuest::skipChecksum()
void SkywardSwordQuest::fixChecksums()
{
atUint32 checksum = Checksums::crc32(m_data.get(), priv::CHECKSUM_OFFSET);
atUint32 checksum = checksums::crc32(m_data.get(), priv::CHECKSUM_OFFSET);
utility::BigUint32(checksum);
*(atUint32*)(m_data.get() + priv::CHECKSUM_OFFSET) = checksum;
checksum = Checksums::crc32(m_skipData.get(), priv::SKIP_CHECKSUM_OFFSET);
checksum = checksums::crc32(m_skipData.get(), priv::SKIP_CHECKSUM_OFFSET);
utility::BigUint32(checksum);
*(atUint32*)(m_skipData.get() + priv::SKIP_CHECKSUM_OFFSET) = checksum;
}

View File

@@ -11,14 +11,12 @@ WiiBanner::WiiBanner() :
m_gameId(0),
m_banner(NULL),
m_flags(0),
m_bannerSize(0),
m_title(""),
m_subtitle("")
m_bannerSize(0)
{
}
WiiBanner::WiiBanner(atUint32 gameId, const std::string& title,
const std::string& subtitle, WiiImage* banner, std::vector<WiiImage*> icons) :
WiiBanner::WiiBanner(atUint32 gameId, const std::u16string& title,
const std::u16string& subtitle, WiiImage* banner, std::vector<WiiImage*> icons) :
m_gameId(gameId),
m_banner(banner),
m_flags(0),
@@ -44,22 +42,22 @@ atUint64 WiiBanner::gameID() const
{
return m_gameId;
}
void WiiBanner::setTitle(const std::string& title)
void WiiBanner::setTitle(const std::u16string& title)
{
m_title = title;
}
std::string WiiBanner::title() const
const std::u16string& WiiBanner::title() const
{
return m_title;
}
void WiiBanner::setSubtitle(const std::string& subtitle)
void WiiBanner::setSubtitle(const std::u16string& subtitle)
{
m_subtitle = subtitle;
}
std::string WiiBanner::subtitle() const
const std::u16string& WiiBanner::subtitle() const
{
return m_subtitle;
}

View File

@@ -22,13 +22,13 @@ namespace io
WiiSaveReader::WiiSaveReader(const atUint8* data, atUint64 length)
: MemoryCopyReader(data, length)
{
setEndian(Endian::BigEndian);
setEndian(Endian::Big);
}
WiiSaveReader::WiiSaveReader(const std::string& filename)
: MemoryCopyReader(filename)
{
setEndian(Endian::BigEndian);
setEndian(Endian::Big);
}
std::unique_ptr<WiiSave> WiiSaveReader::readSave()
@@ -164,8 +164,8 @@ WiiBanner* WiiSaveReader::readBanner()
int magic;
int flags;
short animSpeed;
std::string gameTitle;
std::string subTitle;
std::u16string gameTitle;
std::u16string subTitle;
magic = readUint32();
@@ -183,12 +183,12 @@ WiiBanner* WiiSaveReader::readBanner()
animSpeed = readUint16();
seek(22);
gameTitle = readWStringAsString();
gameTitle = readU16StringBig();
if (position() != 0x0080)
seek(0x0080, SeekOrigin::Begin);
subTitle = readWStringAsString();
subTitle = readU16StringBig();
if (position() != 0x00C0)
seek(0x00C0, SeekOrigin::Begin);

View File

@@ -30,7 +30,7 @@ namespace io
WiiSaveWriter::WiiSaveWriter(const std::string& filename)
: MemoryCopyWriter(filename)
{
setEndian(Endian::BigEndian);
setEndian(Endian::Big);
}
@@ -83,7 +83,7 @@ bool WiiSaveWriter::writeSave(WiiSave* save, atUint8* macAddress, atUint32 ngId,
void WiiSaveWriter::writeBanner(WiiBanner* banner)
{
setEndian(Endian::BigEndian);
setEndian(Endian::Big);
writeInt64(banner->gameID());
writeInt32((0x60a0 + 0x1200) * (atUint32)banner->icons().size());
writeByte((atInt8)banner->permissions());

View File

@@ -39,7 +39,7 @@ const atUint32 ZQuestFile::Magic = 'Z' | ('Q' << 8) | ('S' << 16) | (('0' + ZQ
ZQuestFile::ZQuestFile()
: m_game(NoGame),
m_endian(Endian::LittleEndian),
m_endian(Endian::Little),
m_length(0)
{
initGameStrings();

View File

@@ -75,7 +75,7 @@ ZQuestFile* ZQuestFileReader::read()
if (version >= ZQUEST_VERSION_CHECK(2, 0, 0))
{
if (checksum != athena::Checksums::crc32(data.get(), compressedLen))
if (checksum != athena::checksums::crc32(data.get(), compressedLen))
{
atError("Checksum mismatch, data corrupt");
return nullptr;
@@ -102,7 +102,7 @@ ZQuestFile* ZQuestFileReader::read()
data.reset(dst);
}
return new ZQuestFile(game, BOM == 0xFEFF ? Endian::BigEndian : Endian::LittleEndian, std::move(data), uncompressedLen, gameString);
return new ZQuestFile(game, BOM == 0xFEFF ? Endian::Big : Endian::Little, std::move(data), uncompressedLen, gameString);
}
} // zelda

View File

@@ -59,8 +59,8 @@ void ZQuestFileWriter::write(ZQuestFile* quest, bool compress)
writeUint32(quest->length());
writeBytes((atInt8*)quest->gameString().substr(0, 0x0A).c_str(), 0x0A);
writeUint16(quest->endian() == Endian::BigEndian ? 0xFFFE : 0xFEFF);
writeUint32(athena::Checksums::crc32(questData, compLen));
writeUint16(quest->endian() == Endian::Big ? 0xFFFE : 0xFEFF);
writeUint32(athena::checksums::crc32(questData, compLen));
writeUBytes(questData, compLen);
save();