int Set_List<DataType>::isSubsetOf(const Set_List<DataType> &set) const { // check if this set is a subset of another set ListIterator<DataType> subIter(list); ListIterator<DataType> setIter(set.list); while (!subIter.done() && !setIter.done()) { if (subIter() == setIter()) { // both are equal, increment both iterators setIter++; subIter++; } else if (subIter() > setIter()) { // increment set to match sub. setIter++; } else { // a member was not found return(0); } } if (subIter.done()) return(1); else return(0); }
btSIter *btSetFullRangeIter(btSIter *iter, bt *btr, bool asc, cswc_t *w) { cswc_t W; // used in setHigh() if (!btr->root || !btr->numkeys) return NULL; if (!w) w = &W; ai_obj *aL = &w->wf.alow, *aH = &w->wf.ahigh; if (!assignMinKey(btr, aL) || !assignMaxKey(btr, aH)) return NULL; btk_t btk; bool med; uint32 ksize; SETITER8R(iter, btr, asc, iter_leaf, iter_leaf_rev, iter_node, iter_node_rev); siter->scan = 1; setHigh(siter, asc ? aH : aL, btr->s.ktype); char *bkey = createBTKey(asc ? aL : aH, &med, &ksize, btr, &btk); //DEST 030 if (!bkey) goto frangeiter_err; bt_n *x = NULL; int i = -1; uchar *stream = setIter(btr, bkey, siter, asc ? aL : aH, &x, &i, asc); destroyBTKey(bkey, med); /* DESTROYED 030 */ if (!stream && siter->missed) return siter;//IILMISS if (!streamToBTEntry(stream, siter, x, i)) goto frangeiter_err; if (btr->dirty_left) siter->missed = 1; // FULL means 100% FULL return siter; frangeiter_err: btReleaseRangeIterator(siter); return NULL; }
static void appendUnicodeSetToUVector(UVector &dest, const UnicodeSet &source, UErrorCode &status) { UnicodeSetIterator setIter(source); while (setIter.next()) { const UnicodeString &str = setIter.getString(); dest.addElement(str.clone(), status); } }
static bool XthIterFind(btSIter *siter, ai_obj *alow, ai_obj *ahigh, long ofst, bool asc, bt *btr) { btk_t btk; bool med; uint32 ksize; btIterator *iter = &siter->x; char *bkey = createBTKey(asc ? alow : ahigh, &med, &ksize, btr, &btk); // DEST 031 if (!bkey) return 0; bt_n *x = NULL; int i = -1; bool d = btr->dirty; uchar *stream = setIter(btr, bkey, siter, asc ? alow : ahigh, &x, &i, asc); destroyBTKey(bkey, med); // DESTROYED 031 if (!streamToBTEntry(stream, siter, x, i)) return 0; fol_t fl; bzero(&fl, sizeof(fol_t)); fl.ofst = ofst; fl.over = -1; // NEXT_LINE: Switch to SCION ITERATORS iter->iLeaf = asc ? (d ? iter_leaf_dirty_scion : iter_leaf_scion) : (d ? iter_leaf_dirty_scion_rev : iter_leaf_scion_rev); iter->iNode = asc ? iter_node_scion : iter_node_scion_rev; iter->data = &fl; while (1) { void *be = btNext(siter, NULL, NULL, asc); if (!be) break; if (fl.over != -1) { //printf("ik: %d ovr: %d\n",iter->bln->ik,fl.over); if (asc) { if (!d) iter->bln->ik += fl.over; // Dirty Iterators are exact if (iter->bln->ik == iter->bln->self->n) { iter->bln->ik--; toparentrecurse(iter); } } else { if (!d) iter->bln->ik -= fl.over; // Dirty Iterators are exact if (iter->bln->ik < 0) { iter->bln->in = iter->bln->ik = 0; toparentrecurserev(iter); } } break; } } INIT_ITER_BEENTRY(siter, btr, siter->x.bln->self, siter->x.bln->ik) siter->nim = siter->missed = 0; //DEBUG_XTH_ITER_FIND_POST_LOOP if (d && fl.over > 0 && getDR(btr, siter->x.bln->self, siter->x.bln->ik)) { siter->missed = 1; } //DEBUG_XTH_ITER_FIND_END iter->iLeaf = asc ? iter_leaf : iter_leaf_rev; // Back to NORMAL ITERATORS iter->iNode = asc ? iter_node : iter_node_rev; return 1; }
btSIter *btSetRangeIter(btSIter * iter, bt *btr, ai_obj *alow, ai_obj *ahigh, bool asc) { if (!btr->root || !btr->numkeys) return NULL; btk_t btk; bool med; uint32 ksize; //bt_dumptree(btr, btr->ktype); SETITER8R(iter, btr, asc, iter_leaf, iter_leaf_rev, iter_node, iter_node_rev); setHigh(siter, asc ? ahigh : alow, btr->s.ktype); char *bkey = createBTKey(asc ? alow : ahigh, &med, &ksize, btr, &btk); //D032 if (!bkey) goto rangeiter_err; bt_n *x = NULL; int i = -1; uchar *stream = setIter(btr, bkey, siter, asc ? alow : ahigh, &x, &i, asc); destroyBTKey(bkey, med); /* DESTROYED 032 */ if (!streamToBTEntry(stream, siter, x, i)) goto rangeiter_err; return siter; rangeiter_err: btReleaseRangeIterator(siter); return NULL; }
void TransportLayerLegacy::_handleNewConnection(std::unique_ptr<AbstractMessagingPort> amp) { if (!Listener::globalTicketHolder.tryAcquire()) { log() << "connection refused because too many open connections: " << Listener::globalTicketHolder.used(); amp->shutdown(); return; } amp->setLogLevel(logger::LogSeverity::Debug(1)); auto session = LegacySession::create(std::move(amp), this); stdx::list<std::weak_ptr<LegacySession>> list; auto it = list.emplace(list.begin(), session); { // Add the new session to our list stdx::lock_guard<stdx::mutex> lk(_sessionsMutex); session->setIter(it); _sessions.splice(_sessions.begin(), list, it); } invariant(_sep); _sep->startSession(std::move(session)); }
void SimuliaODB::openFile() { #ifdef SIMULIA_ODB_API try { #ifdef DEBUG_OUTPUT_SIMULIA_ODB infoOut << "Open OBD file: " << myFileName << std::endl; #endif odb_Odb& odb = openOdb(odb_String(myFileName.c_str())); #ifdef DEBUG_OUTPUT_SIMULIA_ODB infoOut << odb.name().CStr() << " '__________" << std::endl; infoOut << "analysisTitle: " << odb.analysisTitle().CStr() << std::endl; infoOut << "description: " << odb.description().CStr() << std::endl; #endif odb_InstanceRepository& instanceRepo = odb.rootAssembly().instances(); odb_InstanceRepositoryIT iter(instanceRepo); for (iter.first(); !iter.isDone(); iter.next()) { odb_Instance& inst = instanceRepo[iter.currentKey()]; const odb_SequenceNode& nodes = inst.nodes(); int numOfNodes = nodes.size(); const odb_SequenceElement& elements = inst.elements(); int numOfElements = elements.size(); // Check for Imports STACCATO_XML::PARTS_const_iterator iterParts(MetaDatabase::getInstance()->xmlHandle->PARTS().begin()); for (int iImport = 0; iImport < iterParts->PART()[myPartId].FILEIMPORT().begin()->IMPORT().size(); iImport++) { std::string importType = iterParts->PART()[myPartId].FILEIMPORT().begin()->IMPORT()[iImport].Type()->c_str(); if (importType == "Nodes") { if (std::string(iterParts->PART()[myPartId].FILEIMPORT().begin()->IMPORT()[iImport].LIST()->c_str()) == "ALL") { //Nodes #ifdef DEBUG_OUTPUT_SIMULIA_ODB infoOut << "Total number of nodes: " << numOfNodes << std::endl; #endif for (int i = 0; i < numOfNodes; i++) { const odb_Node aNode = nodes.node(i); const float * const coords = aNode.coordinates(); #ifdef DEBUG_OUTPUT_SIMULIA_ODB char formattedOut[256]; sprintf(formattedOut, " %9d [%10.6f %10.6f %10.6f]", aNode.label(), coords[0], coords[1], coords[2]); infoOut << formattedOut << std::endl; #endif myHMesh->addNode(aNode.label(), coords[0], coords[1], coords[2]); } } else std::cerr << "Unrecognized Node Import List.\n"; } else if (importType == "Elements") { std::string translateSource = iterParts->PART()[myPartId].FILEIMPORT().begin()->IMPORT()[iImport].TRANSLATETO().begin()->Source()->c_str(); std::string translateTarget = iterParts->PART()[myPartId].FILEIMPORT().begin()->IMPORT()[iImport].TRANSLATETO().begin()->Target()->c_str(); if (std::string(iterParts->PART()[myPartId].FILEIMPORT().begin()->IMPORT()[iImport].LIST()->c_str()) == "ALL") { //Elements #ifdef DEBUG_OUTPUT_SIMULIA_ODB infoOut << "Total number of elements: " << numOfElements << std::endl; #endif for (int i = 0; i < numOfElements; i++) { const odb_Element aElement = elements.element(i); #ifdef DEBUG_OUTPUT_SIMULIA_ODB infoOut << aElement.label() << " " << aElement.type().CStr() << " ["; #endif int elemConSize; const int* const conn = aElement.connectivity(elemConSize); std::vector<int> elementTopo; elementTopo.resize(elemConSize); for (int j = 0; j < elemConSize; j++) { #ifdef DEBUG_OUTPUT_SIMULIA_ODB infoOut << " " << conn[j]; #endif elementTopo[j] = conn[j]; } #ifdef DEBUG_OUTPUT_SIMULIA_ODB infoOut << " ] " << std::endl; #endif if (std::string(aElement.type().CStr()) == translateSource) { if (translateTarget == "STACCATO_Tetrahedron10Node3D") myHMesh->addElement(aElement.label(), STACCATO_Tetrahedron10Node3D, elementTopo); else if (translateTarget == "STACCATO_PlainStress4Node2D") myHMesh->addElement(aElement.label(), STACCATO_PlainStress4Node2D, elementTopo); else std::cerr << "STACCATO cannot recognize this element: " << translateTarget << std::endl; } } } else std::cerr << "Unrecognized Element Import List.\n"; } else if (importType == "Sets") { // SETS // NODES std::cout << ">> Found Odb sets: "; for (int i = 0; i < iterParts->PART()[myPartId].FILEIMPORT().begin()->IMPORT()[iImport].NODE().begin()->TRANSLATETO().size(); i++) { std::string translateSource = iterParts->PART()[myPartId].FILEIMPORT().begin()->IMPORT()[iImport].NODE().begin()->TRANSLATETO()[i].Source()->c_str(); std::string translateTarget = iterParts->PART()[myPartId].FILEIMPORT().begin()->IMPORT()[iImport].NODE().begin()->TRANSLATETO()[i].Target()->c_str(); odb_SetRepositoryIT setIter(odb.rootAssembly().nodeSets()); for (setIter.first(); !setIter.isDone() && setIter.currentValue().type() == odb_Enum::NODE_SET; setIter.next()) { odb_Set set = setIter.currentValue(); int setSize = set.size(); if (std::string(set.name().CStr()) == translateSource) { odb_SequenceString names = set.instanceNames(); int numInstances = names.size(); int i; for (i = 0; i < numInstances; i++) { odb_String name = names.constGet(i); const odb_SequenceNode& nodesInMySet = set.nodes(name); int n_max = nodesInMySet.size(); std::vector<int> nodeLabels; for (int n = 0; n < n_max; n++) { nodeLabels.push_back(nodesInMySet.node(n).label()); } std::cout << translateTarget << " with " << nodeLabels.size() << " nodes. "; myHMesh->addNodeSet(translateTarget, nodeLabels); } } } } std::cout << std::endl; // ELEMENTS for (int i = 0; i < iterParts->PART()[myPartId].FILEIMPORT().begin()->IMPORT()[iImport].ELEMENT().begin()->TRANSLATETO().size(); i++) { std::string translateSource = iterParts->PART()[myPartId].FILEIMPORT().begin()->IMPORT()[iImport].ELEMENT().begin()->TRANSLATETO()[i].Source()->c_str(); std::string translateTarget = iterParts->PART()[myPartId].FILEIMPORT().begin()->IMPORT()[iImport].ELEMENT().begin()->TRANSLATETO()[i].Target()->c_str(); odb_SetRepositoryIT setIter(odb.rootAssembly().nodeSets()); for (setIter.first(); !setIter.isDone() && setIter.currentValue().type() == odb_Enum::ELEMENT_SET; setIter.next()) { odb_Set set = setIter.currentValue(); int setSize = set.size(); if (std::string(set.name().CStr()) == translateSource) { odb_SequenceString names = set.instanceNames(); int numInstances = names.size(); int i; for (i = 0; i < numInstances; i++) { odb_String name = names.constGet(i); const odb_SequenceElement& elemsInMySet = set.elements(name); int n_max = elemsInMySet.size(); for (int n = 0; n < n_max; n++) { int elemConSize; const int* const conn = elemsInMySet.element(n).connectivity(elemConSize); std::vector<int> elemLabels; for (int j = 0; j < elemConSize; j++) elemLabels.push_back(elemsInMySet.element(n).label()); myHMesh->addElemSet(translateTarget, elemLabels); } } } } } } else std::cerr << importType << " is not yet Supported or is Incorrect.\n"; } } debugOut << "SimuliaODB::openODBFile: " << "Current physical memory consumption: " << memWatcher.getCurrentUsedPhysicalMemory() / 1000000 << " Mb" << std::endl; odb.close();//Change datastrc here HMesh should node be a member of odb } catch (odb_BaseException& exc) { errorOut << "odbBaseException caught" << std::endl; errorOut << "Abaqus error message: " << exc.UserReport().CStr() << std::endl; qFatal(exc.UserReport().CStr()); //ToDo add error handling } catch (...) { errorOut << "Unknown Exception." << std::endl; } #endif }