From a6d5ff56d997023e854bb5a4c7ad378b39344ff9 Mon Sep 17 00:00:00 2001 From: tobid7 Date: Wed, 3 Dec 2025 22:50:09 +0100 Subject: [PATCH] Add Cleanup Constructors and switch to std::vector --- include/ctrff/bcstm.hpp | 39 +++++++++++++++++++++++++++++----- include/ctrff/bcwav.hpp | 8 +++---- source/bcstm.cpp | 47 +++++++++++++++++++++++++++++------------ source/bcwav.cpp | 16 +++++++------- source/helper.cpp | 2 +- 5 files changed, 81 insertions(+), 31 deletions(-) diff --git a/include/ctrff/bcstm.hpp b/include/ctrff/bcstm.hpp index 69945a9..4b7341b 100644 --- a/include/ctrff/bcstm.hpp +++ b/include/ctrff/bcstm.hpp @@ -68,22 +68,28 @@ class CTRFF_API BCSTM { }; struct Reference { + Reference() : TypeID(0), Padding(0), Offset(0) {} + Reference(PD::u16 t, PD::u16 p, PD::u32 o) + : TypeID(t), Padding(p), Offset(o) {} PD::u16 TypeID; PD::u16 Padding; PD::u32 Offset; /** null -> uint32_max */ }; struct ReferenceTable { + ReferenceTable() : Count(0) {} PD::u32 Count; - PD::Vec Refs; + std::vector Refs; }; struct SizedReference { + SizedReference() : Size(0) {} Reference Ref; PD::u32 Size; }; struct StreamInfo { + StreamInfo(); PD::u8 Encoding; PD::u8 Loop; PD::u8 ChannelCount; @@ -103,11 +109,14 @@ class CTRFF_API BCSTM { }; struct BlockHeader { + BlockHeader() : Magic(0), Size(0) {} + BlockHeader(PD::u32 m, PD::u32 s) : Magic(m), Size(s) {} PD::u32 Magic; PD::u32 Size; }; struct InfoBlock { + InfoBlock() = default; BlockHeader Header; Reference StreamInfoRef; Reference TrackInfoTabRef; @@ -115,19 +124,27 @@ class CTRFF_API BCSTM { BCSTM::StreamInfo StreamInfo; ReferenceTable TrackInfoTab; ReferenceTable ChannelInfoTab; - PD::Vec ChannelInfoRefs; /** The refs of the refs ?? */ + std::vector ChannelInfoRefs; /** The refs of the refs ?? */ }; /** SeekDataBlock cause they are the same struct */ struct SD_Block { + SD_Block() {} BlockHeader Header; - PD::Vec Data; + std::vector Data; }; struct DSP_ADPCM_Param { + // Lets keep this not clean here :/ + DSP_ADPCM_Param() {} PD::u16 Coefficients[0x10]; }; struct DSP_ADPCM_Context { + DSP_ADPCM_Context() + : PredictorScale(0), + Reserved(0), + PreviousSample(0), + SecondPreviousSample(0) {} PD::u8 PredictorScale; PD::u8 Reserved; PD::u16 PreviousSample; @@ -135,6 +152,7 @@ class CTRFF_API BCSTM { }; struct DSP_ADPCM_Info { + DSP_ADPCM_Info() : Padding(0) {} DSP_ADPCM_Param Param; DSP_ADPCM_Context Context; DSP_ADPCM_Context LoopContext; @@ -142,11 +160,13 @@ class CTRFF_API BCSTM { }; struct ByteTable { + ByteTable(PD::u32 size = 0) : Size(size) {} PD::u32 Size; - PD::Vec Table; + std::vector Table; }; struct TrackInfo { + TrackInfo() : Volume(0), Pan(0), Padding(0) {} PD::u8 Volume; PD::u8 Pan; PD::u16 Padding; @@ -155,6 +175,15 @@ class CTRFF_API BCSTM { }; struct Header { + // Warum sieht dass so ~~nicht~~ gut aus... + Header() + : Magic(0), + Endianness(Little), + HeaderSize(0), + Version(0), + FileSize(0), + NumBlocks(0), + Reserved(0) {} PD::u32 Magic; /** CSTM */ PD::u16 Endianness = Little; /** Default */ PD::u16 HeaderSize; /** Header Size probably */ @@ -171,7 +200,7 @@ class CTRFF_API BCSTM { InfoBlock pInfoBlock; SD_Block pSeekBlock; SD_Block pDataBlock; - PD::Vec pDSP_ADPCM_Info; + std::vector pDSP_ADPCM_Info; /** File Stream */ std::fstream pFile; /** Endianness based reader */ diff --git a/include/ctrff/bcwav.hpp b/include/ctrff/bcwav.hpp index 5b84d69..a727979 100644 --- a/include/ctrff/bcwav.hpp +++ b/include/ctrff/bcwav.hpp @@ -46,7 +46,7 @@ class CTRFF_API BCWAV { struct ReferenceTable { PD::u32 Count; - PD::Vec Refs; + std::vector Refs; }; struct SizedReference { @@ -88,13 +88,13 @@ class CTRFF_API BCWAV { PD::u32 LoopEndFrame; PD::u32 Reserved; ReferenceTable ChannelInfoTab; - PD::Vec ChannelInfoRefs; /** The refs of the refs ?? */ + std::vector ChannelInfoRefs; /** The refs of the refs ?? */ }; struct DataBlock { BlockHeader Header; PD::u32 Padding[3]; - PD::Vec Data; + std::vector Data; }; struct DSP_ADPCM_Param { @@ -129,7 +129,7 @@ class CTRFF_API BCWAV { SizedReference pDataBlockRef; InfoBlock pInfoBlock; DataBlock pDataBlock; - PD::Vec pDSP_ADPCM_Info; + std::vector pDSP_ADPCM_Info; /** File Stream */ std::fstream pFile; /** Endianness based reader */ diff --git a/source/bcstm.cpp b/source/bcstm.cpp index 6fda131..4252243 100644 --- a/source/bcstm.cpp +++ b/source/bcstm.cpp @@ -97,9 +97,9 @@ CTRFF_API void BCSTM::ReadInfoBlock(InfoBlock& block) { std::ios::beg); Reference r; ReadReference(r); - block.ChannelInfoRefs.Add(r); + block.ChannelInfoRefs.push_back(r); } - for (size_t i = 0; i < block.ChannelInfoRefs.Size(); i++) { + for (size_t i = 0; i < block.ChannelInfoRefs.size(); i++) { size_t off = pInfoBlockRef.Ref.Offset; off += sizeof(BlockHeader); off += block.ChannelInfoTabRef.Offset; @@ -108,7 +108,7 @@ CTRFF_API void BCSTM::ReadInfoBlock(InfoBlock& block) { pFile.seekg(off, std::ios::beg); DSP_ADPCM_Info t; /** temp */ pReader.ReadEx(t); /** This Section gets read normally */ - pDSP_ADPCM_Info.Add(t); + pDSP_ADPCM_Info.push_back(t); } } @@ -119,23 +119,23 @@ CTRFF_API void BCSTM::ReadSeekBlock(SD_Block& block) { throw std::runtime_error("BCSTM: SeekBlock Size is not 0x20 aligned!"); } - pSeekBlock.Data.Reserve(pSeekBlock.Header.Size + 1); + pSeekBlock.Data.reserve(pSeekBlock.Header.Size + 1); for (PD::u32 i = 0; i < pSeekBlock.Header.Size; i++) { PD::u8 v; pReader.Read(v); - pSeekBlock.Data.Add(v); + pSeekBlock.Data.push_back(v); } } CTRFF_API void BCSTM::ReadReferenceTab(ReferenceTable& tab) { pReader.Read(tab.Count); - tab.Refs.Reserve(tab.Count + 1); + tab.Refs.reserve(tab.Count + 1); for (PD::u32 i = 0; i < tab.Count; i++) { Reference r; pReader.Read(r.TypeID); pReader.Read(r.Padding); pReader.Read(r.Offset); - tab.Refs.Add(r); + tab.Refs.push_back(r); } } @@ -183,11 +183,32 @@ CTRFF_API void BCSTM::CleanUp() { throw std::runtime_error(e.what()); } } - pInfoBlock.ChannelInfoRefs.Clear(); - pInfoBlock.ChannelInfoTab.Refs.Clear(); - pInfoBlock.ChannelInfoTab.Count = 0; - pInfoBlock.TrackInfoTab.Refs.Clear(); - pInfoBlock.TrackInfoTab.Count = 0; - pDSP_ADPCM_Info.Clear(); + pInfoBlock = InfoBlock(); + pHeader = Header(); + pInfoBlockRef = SizedReference(); + pSeekBlockRef = SizedReference(); + pDataBlockRef = SizedReference(); + pInfoBlock = InfoBlock(); + pSeekBlock = SD_Block(); + pDataBlock = SD_Block(); + pDSP_ADPCM_Info.clear(); +} + +CTRFF_API BCSTM::StreamInfo::StreamInfo() { + ChannelCount = 0; + Encoding = 0; + LastSampleBlockPaddedSize = 0; + LastSampleBlockSampleNum = 0; + LastSampleBlockSize = 0; + Loop = 0; + LoopEndFrame = 0; + LoopStartFrame = 0; + Padding = 0; + SampleBlockNum = 0; + SampleBlockSampleNum = 0; + SampleBlockSize = 0; + SampleRate = 0; + SeekDataSize = 0; + SeekIntervalSampleNum = 0; } } // namespace ctrff diff --git a/source/bcwav.cpp b/source/bcwav.cpp index 509877f..7002c86 100644 --- a/source/bcwav.cpp +++ b/source/bcwav.cpp @@ -67,9 +67,9 @@ CTRFF_API void BCWAV::ReadInfoBlock(InfoBlock& block) { std::ios::beg); Reference r; ReadReference(r); - block.ChannelInfoRefs.Add(r); + block.ChannelInfoRefs.push_back(r); } - for (size_t i = 0; i < block.ChannelInfoRefs.Size(); i++) { + for (size_t i = 0; i < block.ChannelInfoRefs.size(); i++) { size_t off = pInfoBlockRef.Ref.Offset; off += sizeof(BlockHeader); off += block.ChannelInfoTab.Refs[i].Offset; @@ -77,19 +77,19 @@ CTRFF_API void BCWAV::ReadInfoBlock(InfoBlock& block) { pFile.seekg(off, std::ios::beg); DSP_ADPCM_Info t; /** temp */ pReader.ReadEx(t); /** This Section gets read normally */ - pDSP_ADPCM_Info.Add(t); + pDSP_ADPCM_Info.push_back(t); } } CTRFF_API void BCWAV::ReadReferenceTab(ReferenceTable& tab) { pReader.Read(tab.Count); - tab.Refs.Reserve(tab.Count + 1); + tab.Refs.reserve(tab.Count + 1); for (PD::u32 i = 0; i < tab.Count; i++) { Reference r; pReader.Read(r.TypeID); pReader.Read(r.Padding); pReader.Read(r.Offset); - tab.Refs.Add(r); + tab.Refs.push_back(r); } } @@ -134,9 +134,9 @@ CTRFF_API void BCWAV::CleanUp() { throw std::runtime_error(e.what()); } } - pInfoBlock.ChannelInfoRefs.Clear(); - pInfoBlock.ChannelInfoTab.Refs.Clear(); + pInfoBlock.ChannelInfoRefs.clear(); + pInfoBlock.ChannelInfoTab.Refs.clear(); pInfoBlock.ChannelInfoTab.Count = 0; - pDSP_ADPCM_Info.Clear(); + pDSP_ADPCM_Info.clear(); } } // namespace ctrff diff --git a/source/helper.cpp b/source/helper.cpp index 951d882..d048216 100644 --- a/source/helper.cpp +++ b/source/helper.cpp @@ -148,7 +148,7 @@ CTRFF_API std::string ctrff::U16toU8(PD::u16 *in, size_t max) { result.push_back(static_cast(0x80 | (c & 0x3F))); } else if (c < 0x10000) { result.push_back(static_cast(0xE0 | (c >> 12))); -result.push_back(static_cast(0x80 | ((c >> 6) & 0x3F))); + result.push_back(static_cast(0x80 | ((c >> 6) & 0x3F))); result.push_back(static_cast(0x80 | (c & 0x3F))); } else { continue;