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

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

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

revision 3975 by schoenebeck, Fri Jul 16 16:53:13 2021 UTC revision 3976 by schoenebeck, Mon Jul 19 14:26:16 2021 UTC
# Line 1476  namespace DLS { Line 1476  namespace DLS {
1476          if (!lrgn)  lrgn = pCkInstrument->AddSubList(LIST_TYPE_LRGN);          if (!lrgn)  lrgn = pCkInstrument->AddSubList(LIST_TYPE_LRGN);
1477          RIFF::List* rgn = lrgn->AddSubList(LIST_TYPE_RGN);          RIFF::List* rgn = lrgn->AddSubList(LIST_TYPE_RGN);
1478          Region* pNewRegion = new Region(this, rgn);          Region* pNewRegion = new Region(this, rgn);
1479            const size_t idxIt = RegionsIterator - pRegions->begin();
1480          pRegions->push_back(pNewRegion);          pRegions->push_back(pNewRegion);
1481            RegionsIterator = pRegions->begin() + std::min(idxIt, pRegions->size()); // avoid iterator invalidation
1482          Regions = (uint32_t) pRegions->size();          Regions = (uint32_t) pRegions->size();
1483          return pNewRegion;          return pNewRegion;
1484      }      }
# Line 1486  namespace DLS { Line 1488  namespace DLS {
1488          lrgn->MoveSubChunk(pSrc->pCkRegion, (RIFF::Chunk*) (pDst ? pDst->pCkRegion : 0));          lrgn->MoveSubChunk(pSrc->pCkRegion, (RIFF::Chunk*) (pDst ? pDst->pCkRegion : 0));
1489          for (size_t i = 0; i < pRegions->size(); ++i) {          for (size_t i = 0; i < pRegions->size(); ++i) {
1490              if ((*pRegions)[i] == pSrc) {              if ((*pRegions)[i] == pSrc) {
1491                    const size_t idxIt = RegionsIterator - pRegions->begin();
1492                  pRegions->erase(pRegions->begin() + i);                  pRegions->erase(pRegions->begin() + i);
1493                  RegionList::iterator iter = find(pRegions->begin(), pRegions->end(), pDst);                  RegionList::iterator iter = find(pRegions->begin(), pRegions->end(), pDst);
1494                  pRegions->insert(iter, pSrc);                  pRegions->insert(iter, pSrc);
1495                    RegionsIterator = pRegions->begin() + std::min(idxIt, pRegions->size()); // avoid iterator invalidation
1496              }              }
1497          }          }
1498      }      }
# Line 1497  namespace DLS { Line 1501  namespace DLS {
1501          if (!pRegions) return;          if (!pRegions) return;
1502          RegionList::iterator iter = find(pRegions->begin(), pRegions->end(), pRegion);          RegionList::iterator iter = find(pRegions->begin(), pRegions->end(), pRegion);
1503          if (iter == pRegions->end()) return;          if (iter == pRegions->end()) return;
1504            const size_t idxIt = RegionsIterator - pRegions->begin();
1505          pRegions->erase(iter);          pRegions->erase(iter);
1506            RegionsIterator = pRegions->begin() + std::min(idxIt, pRegions->size()); // avoid iterator invalidation
1507          Regions = (uint32_t) pRegions->size();          Regions = (uint32_t) pRegions->size();
1508          pRegion->DeleteChunks();          pRegion->DeleteChunks();
1509          delete pRegion;          delete pRegion;

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

  ViewVC Help
Powered by ViewVC