Beispiel #1
0
 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;
 }
Beispiel #2
0
  // 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++;
//     }
  }
Beispiel #3
0
 // 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;
   }
 }