/[svn]/libgig/trunk/src/gig.cpp
ViewVC logotype

Diff of /libgig/trunk/src/gig.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3969 by schoenebeck, Thu Jun 24 11:47:12 2021 UTC revision 3975 by schoenebeck, Sat Jul 17 21:10:19 2021 UTC
# Line 1346  namespace { Line 1346  namespace {
1346    
1347          // if this is the last write, update the checksum chunk in the          // if this is the last write, update the checksum chunk in the
1348          // file          // file
1349          if (pCkData->GetPos() == pCkData->GetSize()) {          if (pCkData->GetPos() == std::min(pCkData->GetSize(), pCkData->GetNewSize())) {
1350              __finalizeCRC(crc);              __finalizeCRC(crc);
1351              File* pFile = static_cast<File*>(GetParent());              File* pFile = static_cast<File*>(GetParent());
1352              pFile->SetSampleChecksum(this, crc);              pFile->SetSampleChecksum(this, crc);
# Line 6389  namespace { Line 6389  namespace {
6389         wave->AddSubChunk(CHUNK_ID_FMT, 16);         wave->AddSubChunk(CHUNK_ID_FMT, 16);
6390         wave->AddSubList(LIST_TYPE_INFO);         wave->AddSubList(LIST_TYPE_INFO);
6391    
6392           const size_t idxIt = SamplesIterator - pSamples->begin();
6393         pSamples->push_back(pSample);         pSamples->push_back(pSample);
6394           SamplesIterator = pSamples->begin() + std::min(idxIt, pSamples->size()); // avoid iterator invalidation
6395         return pSample;         return pSample;
6396      }      }
6397    
# Line 6406  namespace { Line 6408  namespace {
6408          if (!pSamples || !pSamples->size()) throw gig::Exception("Could not delete sample as there are no samples");          if (!pSamples || !pSamples->size()) throw gig::Exception("Could not delete sample as there are no samples");
6409          SampleList::iterator iter = find(pSamples->begin(), pSamples->end(), (DLS::Sample*) pSample);          SampleList::iterator iter = find(pSamples->begin(), pSamples->end(), (DLS::Sample*) pSample);
6410          if (iter == pSamples->end()) throw gig::Exception("Could not delete sample, could not find given sample");          if (iter == pSamples->end()) throw gig::Exception("Could not delete sample, could not find given sample");
6411          if (SamplesIterator != pSamples->end() && *SamplesIterator == pSample) ++SamplesIterator; // avoid iterator invalidation          const size_t idxIt = SamplesIterator - pSamples->begin();
6412          pSamples->erase(iter);          pSamples->erase(iter);
6413            SamplesIterator = pSamples->begin() + std::min(idxIt, pSamples->size()); // avoid iterator invalidation
6414          pSample->DeleteChunks();          pSample->DeleteChunks();
6415          delete pSample;          delete pSample;
6416    
# Line 6514  namespace { Line 6517  namespace {
6517              ExtensionFiles.push_back(pExtFile);              ExtensionFiles.push_back(pExtFile);
6518          }          }
6519    
6520          // load samples from extension files (if required)          // load all samples (both from this/main .gig file as well as from
6521            // extension files if required)
6522          for (int i = 0; i < poolFiles.size(); i++) {          for (int i = 0; i < poolFiles.size(); i++) {
6523              RIFF::File* file = poolFiles[i];              RIFF::File* file = poolFiles[i];
6524              RIFF::List* wvpl = file->GetSubList(LIST_TYPE_WVPL);              RIFF::List* wvpl = file->GetSubList(LIST_TYPE_WVPL);

Legend:
Removed from v.3969  
changed lines
  Added in v.3975

  ViewVC Help
Powered by ViewVC