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 |
} |
} |
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 |
} |
} |
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; |