Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
0
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);
    }
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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));
}
Ejemplo n.º 7
0
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 
}