#include "DictionaryFactory.h" #include "utils/MIODecoder.h" void SM64::DictionaryBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { auto writer = LUS::BinaryWriter(); auto data = std::static_pointer_cast(raw); WriteHeader(writer, LUS::ResourceType::Dictionary, 0); writer.Write((uint32_t) data->mDictionary.size()); for(auto& [key, value] : data->mDictionary){ writer.Write(key); writer.Write((uint32_t) value.size()); writer.Write((char*) value.data(), value.size()); } writer.Finish(write); } std::optional> SM64::DictionaryFactory::parse(std::vector& buffer, YAML::Node& data) { std::unordered_map> dictionary; for (auto it = data["keys"].begin(); it != data["keys"].end(); ++it) { auto key = it->first.as(); auto offset = it->second.as(); std::vector text; auto bytes = (uint8_t*) buffer.data(); while(bytes[offset] != 0xFF){ auto c = bytes[offset++]; text.push_back(c); } text.push_back(0xFF); dictionary[key] = text; } return std::make_shared(dictionary); }