PatchMapIt _add(const int eTag) { PatchMapIns insPatch = patch.insert(PatchMapVal(eTag, PatchDataListIt())); if(insPatch.second) { insPatch.first->second = patchData.insert(patchData.end(), PatchData(eTag)); } return insPatch.first; }
// Once all entity tags have been added, generate patch indices void generatePatchIndices() { // if(sharedPatch) { // Don't renumber if not shared to preserve entity // // numbers. Mostly useful for debugging. int c = 0; for(PatchDataListIt pDIt = patchData.begin(); pDIt != patchData.end(); ++pDIt) pDIt->index = c++; // } }
// Add two entity tags which must be given the same patch index void addPair(const int eTag1, const int eTag2) { sharedPatch = true; PatchMapIt patch1 = _add(eTag1); PatchMapIt patch2 = _add(eTag2); if(patch1->second != patch2->second) { PatchData &PD1 = *(patch1->second); PatchData &PD2 = *(patch2->second); const int nTag = PD2.eTagVec.size(); for(int iTag = 0; iTag != nTag; ++iTag) { // Move tag from PD2 to PD1 const int tag = PD2.eTagVec[iTag]; PD1.eTagVec.push_back(tag); // Update value in 'patch' for this tag if(tag != eTag2) patch[tag] = patch1->second; } patchData.erase(patch2->second); patch2->second = patch1->second; } }