#pragma once #include #include #include #include #include #include #include #include namespace N64 { class Cartridge; } class InputSource { public: virtual ~InputSource() = default; virtual void Open() = 0; virtual void Build(YAML::Node& rom) {} virtual std::string GetHash() = 0; virtual std::string GetTitle() = 0; virtual uint32_t GetVersionCRC() = 0; virtual std::vector& GetImage() = 0; virtual void LogInfo() = 0; virtual const std::unordered_map& GetFileOffsets() const { return mFileOffsets; } virtual const std::unordered_map& GetFileAddresses() const { return mFileAddresses; } virtual const std::unordered_map& GetFileSizes() const { return mFileSizes; } virtual const std::unordered_map& GetVirtualSegments() const { return mVirtualSegments; } virtual N64::Cartridge* GetCartridge() { return nullptr; } virtual bool IsN64() const { return false; } static std::shared_ptr Create(const std::optional& path, std::vector& data); protected: std::unordered_map mFileOffsets; std::unordered_map mFileAddresses; std::unordered_map mFileSizes; std::unordered_map mVirtualSegments; };