summaryrefslogtreecommitdiff
path: root/src/factories/BaseFactory.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/factories/BaseFactory.h')
-rw-r--r--src/factories/BaseFactory.h21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/factories/BaseFactory.h b/src/factories/BaseFactory.h
index 05d3d77..ae8c9a1 100644
--- a/src/factories/BaseFactory.h
+++ b/src/factories/BaseFactory.h
@@ -4,6 +4,7 @@
#include "n64/Cartridge.h"
#include <cstdint>
#include <iostream>
+#include <any>
#include <memory>
#include <vector>
#include <string>
@@ -23,6 +24,13 @@
#define tab "\t"
#define fourSpaceTab " "
+struct OffsetEntry {
+ uint32_t start;
+ uint32_t end;
+};
+
+typedef std::optional<std::variant<size_t, OffsetEntry>> ExportResult;
+
enum class ExportType {
Header,
Code,
@@ -67,14 +75,16 @@ public:
class BaseExporter {
public:
- virtual void Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) = 0;
+ virtual ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) = 0;
static void WriteHeader(LUS::BinaryWriter& write, LUS::ResourceType resType, int32_t version);
};
class BaseFactory {
public:
virtual std::optional<std::shared_ptr<IParsedData>> parse(std::vector<uint8_t>& buffer, YAML::Node& data) = 0;
- virtual std::optional<std::shared_ptr<IParsedData>> parse_modding(std::vector<uint8_t>& buffer, YAML::Node& data) = 0;
+ virtual std::optional<std::shared_ptr<IParsedData>> parse_modding(std::vector<uint8_t>& buffer, YAML::Node& data) {
+ return std::nullopt;
+ }
std::optional<std::shared_ptr<BaseExporter>> GetExporter(ExportType type) {
auto exporters = this->GetExporters();
if (exporters.find(type) != exporters.end()) {
@@ -82,7 +92,12 @@ public:
}
return std::nullopt;
}
- virtual bool SupportModdedAssets() = 0;
+ virtual bool SupportModdedAssets() {
+ return false;
+ }
+ virtual uint32_t GetAlignment() {
+ return 4;
+ };
private:
virtual std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters() = 0;
}; \ No newline at end of file