MCPcopy Create free account
hub / github.com/HertzDevil/0CC-FamiTracker / Load

Method Load

Source/FamiTrackerDocIO.cpp:117–166  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

115}
116
117bool CFamiTrackerDocIO::Load(CFamiTrackerModule &modfile) {
118 using map_t = std::unordered_map<std::string_view, void (CFamiTrackerDocIO::*)(CFamiTrackerModule &, int)>;
119 const auto FTM_READ_FUNC = map_t {
120 {FILE_BLOCK_PARAMS, &CFamiTrackerDocIO::LoadParams},
121 {FILE_BLOCK_INFO, &CFamiTrackerDocIO::LoadSongInfo},
122 {FILE_BLOCK_HEADER, &CFamiTrackerDocIO::LoadHeader},
123 {FILE_BLOCK_INSTRUMENTS, &CFamiTrackerDocIO::LoadInstruments},
124 {FILE_BLOCK_SEQUENCES, &CFamiTrackerDocIO::LoadSequences},
125 {FILE_BLOCK_FRAMES, &CFamiTrackerDocIO::LoadFrames},
126 {FILE_BLOCK_PATTERNS, &CFamiTrackerDocIO::LoadPatterns},
127 {FILE_BLOCK_DSAMPLES, &CFamiTrackerDocIO::LoadDSamples},
128 {FILE_BLOCK_COMMENTS, &CFamiTrackerDocIO::LoadComments},
129 {FILE_BLOCK_SEQUENCES_VRC6, &CFamiTrackerDocIO::LoadSequencesVRC6},
130 {FILE_BLOCK_SEQUENCES_N163, &CFamiTrackerDocIO::LoadSequencesN163},
131 {FILE_BLOCK_SEQUENCES_N106, &CFamiTrackerDocIO::LoadSequencesN163}, // Backward compatibility
132 {FILE_BLOCK_SEQUENCES_S5B, &CFamiTrackerDocIO::LoadSequencesS5B}, // // //
133 {FILE_BLOCK_PARAMS_EXTRA, &CFamiTrackerDocIO::LoadParamsExtra}, // // //
134 {FILE_BLOCK_DETUNETABLES, &CFamiTrackerDocIO::LoadDetuneTables}, // // //
135 {FILE_BLOCK_GROOVES, &CFamiTrackerDocIO::LoadGrooves}, // // //
136 {FILE_BLOCK_BOOKMARKS, &CFamiTrackerDocIO::LoadBookmarks}, // // //
137 };
138
139 // This has to be done for older files
140 if (file_.GetFileVersion() < 0x0210)
141 (void)modfile.GetSong(0);
142
143 // Read all blocks
144 bool ErrorFlag = false;
145 while (!file_.Finished() && !ErrorFlag) {
146 ErrorFlag = file_.ReadBlock();
147 std::string_view BlockID = file_.GetBlockHeaderID(); // // //
148 if (BlockID == "END")
149 break;
150
151 try {
152 (this->*FTM_READ_FUNC.at(BlockID))(modfile, file_.GetBlockVersion()); // // //
153 }
154 catch (std::out_of_range) {
155 DEBUG_BREAK();
156 if (file_.IsFileIncomplete())
157 ErrorFlag = true;
158 }
159 }
160
161 if (ErrorFlag)
162 return false;
163
164 PostLoad(modfile);
165 return true;
166}
167
168bool CFamiTrackerDocIO::Save(const CFamiTrackerModule &modfile) {
169 using block_info_t = std::tuple<void (CFamiTrackerDocIO::*)(const CFamiTrackerModule &, int), int, std::string_view>;

Callers 1

OpenDocumentMethod · 0.80

Calls 8

GetFileVersionMethod · 0.80
GetSongMethod · 0.80
ReadBlockMethod · 0.80
GetBlockHeaderIDMethod · 0.80
atMethod · 0.80
GetBlockVersionMethod · 0.80
IsFileIncompleteMethod · 0.80
FinishedMethod · 0.45

Tested by

no test coverage detected