void NormalizingReader::PostBlockReadingHook(NxsBlock & block) { //cerr << "PostBlockReadingHook for " << GetBlockIDTitleString(block) << endl; NxsBlock * toStore; if (this->storingBlocks) { try { toStore = block.CloneBlock(blockMapper); } catch (...) { cerr << "CloneBlock of " << GetBlockIDTitleString(block) << " failed with an exception. Only Clonable blocks can be normalized." << endl; throw; } blocksToDelete.push_back(toStore); blockMapper[block.GetInstanceIdentifier()] = toStore; } else toStore = █ VecBlockPtr impliedBlocks = toStore->GetImpliedBlocks(); for (VecBlockPtr::const_iterator ibIt = impliedBlocks.begin(); ibIt != impliedBlocks.end(); ++ibIt) { const BlockUniqueID currBlockID = (*ibIt)->GetInstanceIdentifier(); if ((!this->supportingSharedImpliedBlocks) || writtenBlocks.find(currBlockID) == writtenBlocks.end()) { if (this->storingBlocks) blocksToDelete.push_back(*ibIt); try { if (outf != 0L) (*ibIt)->WriteAsNexus(*outf); } catch (...) { cerr << block.GetInstanceName() << "raised an exception when writing as NEXUS." << endl; throw; } if (this->supportingSharedImpliedBlocks) writtenBlocks.insert(currBlockID); } } const BlockUniqueID toStoreBlockID = toStore->GetInstanceIdentifier(); try { if (outf != 0L) toStore->WriteAsNexus(*outf); } catch (...) { cerr << GetBlockIDTitleString(block) << " raised an exception when writing as NEXUS." << endl; throw; } writtenBlocks.insert(toStoreBlockID); }
VecBlockPtr NxsTaxaBlockSurrogate::GetCreatedTaxaBlocks() { VecBlockPtr vbp; if (newtaxa && taxa) { vbp.push_back(taxa); passedRefOfOwnedBlock = true; } return vbp; }