#pragma once #include "cd_image.h" #include "types.h" #include #include #include class CDSubChannelReplacement { public: CDSubChannelReplacement(); ~CDSubChannelReplacement(); u32 GetReplacementSectorCount() const { return static_cast(m_replacement_subq.size()); } bool LoadSBI(const char* path); /// Adds a sector to the replacement map. void AddReplacementSubChannelQ(u32 lba, const CDImage::SubChannelQ& subq); /// Returns the replacement subchannel data for the specified position (in BCD). bool GetReplacementSubChannelQ(u8 minute_bcd, u8 second_bcd, u8 frame_bcd, CDImage::SubChannelQ* subq) const; /// Returns the replacement subchannel data for the specified sector. bool GetReplacementSubChannelQ(u32 lba, CDImage::SubChannelQ* subq) const; private: using ReplacementMap = std::unordered_map; ReplacementMap m_replacement_subq; };