void PubSubKeepAllTransientReader::read(uint16_t lastvalue, const std::chrono::seconds &seconds) { std::unique_lock<std::mutex> lock(mutex_); lastvalue_ = lastvalue; while(!msgs_.empty() && lastvalue_ == *msgs_.rbegin()) { if(data_received_) { HelloWorld hello; SampleInfo_t info; if(subscriber_->takeNextData((void*)&hello, &info)) { if(info.sampleKind == ALIVE) { newNumber(hello.index()); } } --data_received_; } else { if(cv_.wait_for(lock, seconds) == std::cv_status::timeout) break; } } }
Number::Number(QScriptEnginePrivate *eng): Core(eng, QLatin1String("Number"), QScriptClassInfo::NumberType) { newNumber(&publicPrototype, 0); eng->newConstructor(&ctor, this, publicPrototype); addPrototypeFunction(QLatin1String("toString"), method_toString, 0); addPrototypeFunction(QLatin1String("toLocaleString"), method_toLocaleString, 0); addPrototypeFunction(QLatin1String("valueOf"), method_valueOf, 0); addPrototypeFunction(QLatin1String("toFixed"), method_toFixed, 0); addPrototypeFunction(QLatin1String("toExponential"), method_toExponential, 0); addPrototypeFunction(QLatin1String("toPrecision"), method_toPrecision, 0); QScriptValue::PropertyFlags flags = QScriptValue::Undeletable | QScriptValue::ReadOnly | QScriptValue::SkipInEnumeration; ctor.setProperty(QLatin1String("NaN"), QScriptValueImpl(eng, qSNaN()), flags); ctor.setProperty(QLatin1String("NEGATIVE_INFINITY"), QScriptValueImpl(eng, -qInf()), flags); ctor.setProperty(QLatin1String("POSITIVE_INFINITY"), QScriptValueImpl(eng, qInf()), flags); ctor.setProperty(QLatin1String("MAX_VALUE"), QScriptValueImpl(eng, 1.7976931348623158e+308), flags); #ifdef __INTEL_COMPILER # pragma warning( push ) # pragma warning(disable: 239) #endif ctor.setProperty(QLatin1String("MIN_VALUE"), QScriptValueImpl(eng, 5e-324), flags); #ifdef __INTEL_COMPILER # pragma warning( pop ) #endif }
void QuoteLine::setId(int pId) { if (pId == _id) return; XSqlQuery quhead; quhead.prepare( "SELECT quhead_number, quhead_cust_id, quhead_billtoname " "FROM quhead, cust " "WHERE ( (quhead_cust_id=cust_id)" " AND (quhead_id=:sohead_id) );" ); quhead.bindValue(":sohead_id", pId); quhead.exec(); if (quhead.first()) { _id = pId; _number = quhead.value("quhead_number").toInt(); _custid = quhead.value("quhead_cust_id").toInt(); _valid = TRUE; emit newNumber(quhead.value("quhead_number").toString()); emit newCustName(quhead.value("quhead_billtoname").toString()); setText(quhead.value("quhead_number").toString()); } else { _id = -1; _number = -1; _custid = -1; _valid = FALSE; emit newNumber(""); emit newCustName(""); setText(""); } emit newId(_id); emit newCustId(_custid); emit newNumber(_number); emit valid(_valid); _parsed = TRUE; }
sExpression *cloneList(sExpression *exp){ if(isList(exp)){ sList *temp = toList(exp); return cons(cloneList(car(temp)), cloneList(cdr(temp))); } if(isSymbol(exp)){ return newSymbol(toSymb(exp)->name); } if(isNumber(exp)){ return newNumber(toNum(exp)->value); } if(isString(exp)){ return newString(toString(exp)->value); } return exp; }
void TriangleMesherInterface :: simplifyPSLG(Triangle_PSLG &coarse, const Triangle_PSLG &pslg, double limit, double minlen) { int segments = pslg.segment_a.giveSize(); int nodes = pslg.nx.giveSize(); // Calculate the inverted connection node->element std :: set< int > *connectivity = new std :: set< int > [ nodes ]; for ( int i = 0; i < segments; i++ ) { connectivity [ pslg.segment_a[i] - 1 ].insert(i + 1); connectivity [ pslg.segment_b[i] - 1 ].insert(i + 1); } // Some conservative error measure IntArray nodeRemoval(nodes); IntArray edgeRemoval(segments); edgeRemoval.zero(); IntArray seg_a = pslg.segment_a; IntArray seg_b = pslg.segment_b; nodeRemoval.zero(); FloatArray error_x(nodes), error_y(nodes), ab(2), ac(2), bc(2), err_vec(2); error_x.zero(); error_y.zero(); for ( int j = 0; j < 2; ++j ) { double allowed = j * limit / 2; for ( int i = 1; i <= nodes; i++ ) { std :: set< int > &elems = connectivity [ i - 1 ]; #if 1 if ( elems.size() < 2 ) { // Lone nodes or edges are removed. It is up for discussion whether or not this is a wanted. nodeRemoval.at(i) = true; if ( elems.size() == 1 ) { int e0 = * elems.begin(); edgeRemoval.at(e0) = true; // Find the other node and remove segment e0 from it; int n1 = seg_a.at(e0) == i ? seg_b.at(e0) : seg_a.at(e0); connectivity [ n1 - 1 ].erase(e0); elems.clear(); /*printf("Removing edge %d and node = %d\n", e0, n1); * while (connectivity[n1-1].size() < 2) { * nodeRemoval.at(n1) = true; * if (connectivity[n1-1].size() == 1) { * e0 = *connectivity[n1-1].begin(); * edgeRemoval.at(e0) = true; * connectivity[n1-1].clear(); * n1 = seg_a.at(e0) == i ? seg_b.at(e0) : seg_a.at(e0); * connectivity[n1-1].erase(e0); * } else { * OOFEM_WARNING("HAPPENS ONCE!"); * break; * } * }*/ } } else #endif if ( elems.size() == 2 ) { int e0 = * elems.begin(); int e1 = * ( ++elems.begin() ); if ( pslg.segment_marker.at(e0) == pslg.segment_marker.at(e1) ) { double abac, acac; int n0, n1, n2; n0 = seg_a.at(e0) == i ? seg_b.at(e0) : seg_a.at(e0); n1 = i; n2 = seg_a.at(e1) == i ? seg_b.at(e1) : seg_a.at(e1); ab[0] = pslg.nx.at(n1) - pslg.nx.at(n0); ab[1] = pslg.ny.at(n1) - pslg.ny.at(n0); ac[0] = pslg.nx.at(n2) - pslg.nx.at(n0); ac[1] = pslg.ny.at(n2) - pslg.ny.at(n0); abac = ab.dotProduct(ac); acac = ac.computeSquaredNorm(); // Find the error (how far the point would be moved to obtain the following line without it). if ( abac <= 0 || acac == 0 ) { // then -ab err_vec[0] = -ab[0]; err_vec[1] = -ab[1]; } else if ( abac >= acac ) { // then bc err_vec[0] = pslg.nx.at(n2) - pslg.nx.at(n1); err_vec[1] = pslg.ny.at(n2) - pslg.ny.at(n1); } else { err_vec = ac; err_vec.times(abac / acac); err_vec.subtract(ab); } double ev_norm = err_vec.computeNorm(); // Max of new or old error; double real_error = 0.0; if ( ev_norm == 0 ) { real_error = 0.0; } else { error_x.at(n1) += err_vec[0]; error_y.at(n1) += err_vec[1]; real_error = sqrt( error_x.at(n1) * error_x.at(n1) + error_y.at(n1) * error_y.at(n1) ); } if ( real_error <= allowed ) { // Mark node for removal, remove second edge, more first edge connection to next node; nodeRemoval.at(i) = true; edgeRemoval.at(e1) = true; connectivity [ n2 - 1 ].erase(e1); connectivity [ n2 - 1 ].insert(e0); if ( seg_a.at(e0) == n1 ) { // Doing the bothersome way to preserve direction of segments. seg_a.at(e0) = n2; } else { seg_b.at(e0) = n2; } elems.clear(); // Accumulate the error vector error_x.at(n0) += error_x.at(n1); error_y.at(n0) += error_y.at(n1); error_x.at(n2) += error_x.at(n1); error_y.at(n2) += error_y.at(n1); } } } } } // Deleting the elements which are too short. bool edgeRemoved = true; while ( edgeRemoved ) { edgeRemoved = false; for ( int i = 1; i <= nodes; i++ ) { std :: set< int > &elems = connectivity [ i - 1 ]; if ( elems.size() == 2 ) { int e0 = * elems.begin(); int e1 = * ( ++elems.begin() ); if ( pslg.segment_marker.at(e0) == pslg.segment_marker.at(e1) ) { int n0, n1, n2; n0 = seg_a.at(e0) == i ? seg_b.at(e0) : seg_a.at(e0); n1 = i; n2 = seg_a.at(e1) == i ? seg_b.at(e1) : seg_a.at(e1); ab[0] = pslg.nx.at(n1) - pslg.nx.at(n0); ab[1] = pslg.ny.at(n1) - pslg.ny.at(n0); bc[0] = pslg.nx.at(n2) - pslg.nx.at(n1); bc[1] = pslg.ny.at(n2) - pslg.ny.at(n1); if ( ab.computeSquaredNorm() < minlen * minlen || bc.computeSquaredNorm() < minlen * minlen ) { // Mark node for removal, remove second edge, more first edge connection to next node; nodeRemoval.at(i) = true; edgeRemoval.at(e1) = true; connectivity [ n2 - 1 ].erase(e1); connectivity [ n2 - 1 ].insert(e0); if ( seg_a.at(e0) == n1 ) { // Doing the bothersome way to preserve direction of segments. seg_a.at(e0) = n2; } else { seg_b.at(e0) = n2; } elems.clear(); edgeRemoved = true; } } } } } // Remove simple double-connections like o<--->o for ( int i = 1; i <= nodes; i++ ) { std :: set< int > &elems = connectivity [ i - 1 ]; if ( elems.size() == 2 ) { int e0 = * elems.begin(); int e1 = * ( ++elems.begin() ); int n0 = seg_a.at(e0) == i ? seg_b.at(e0) : seg_a.at(e0); int n1 = i; int n2 = seg_a.at(e1) == i ? seg_b.at(e1) : seg_a.at(e1); if ( n0 == n2 ) { // Then we have a simple double connection. We get rid of this node and the two edges. nodeRemoval.at(n1) = true; edgeRemoval.at(e0) = true; edgeRemoval.at(e1) = true; connectivity [ n1 - 1 ].erase(e0); connectivity [ n1 - 1 ].erase(e1); connectivity [ n2 - 1 ].erase(e0); connectivity [ n2 - 1 ].erase(e1); if ( connectivity [ n1 - 1 ].size() == 0 ) { nodeRemoval.at(n2) = true; } } } } delete[] connectivity; // Cleanup int newNodes = 0; IntArray newNumber(nodes); newNumber.zero(); coarse.nx.resize(nodes); coarse.ny.resize(nodes); for ( int i = 1; i <= nodes; i++ ) { if ( !nodeRemoval.at(i) ) { newNodes++; coarse.nx.at(newNodes) = pslg.nx.at(i); coarse.ny.at(newNodes) = pslg.ny.at(i); newNumber.at(i) = newNodes; } } coarse.nx.resize(newNodes); coarse.ny.resize(newNodes); int newSegments = 0; coarse.segment_a.resize(segments); coarse.segment_b.resize(segments); coarse.segment_marker.resize(segments); for ( int i = 1; i <= segments; i++ ) { if ( !edgeRemoval.at(i) ) { newSegments++; coarse.segment_a.at(newSegments) = newNumber.at( seg_a.at(i) ); coarse.segment_b.at(newSegments) = newNumber.at( seg_b.at(i) ); coarse.segment_marker.at(newSegments) = pslg.segment_marker.at(i); } } coarse.segment_a.resize(newSegments); coarse.segment_b.resize(newSegments); coarse.segment_marker.resize(newSegments); }
void Camera_INDIClass::newProperty(INDI::Property *property) { // Here we receive a list of all the properties after the connection // Updated values are not received here but in the newTYPE() functions above. // We keep the vector for each interesting property to send some data later. //const char* DeviName = property->getDeviceName(); const char* PropName = property->getName(); #ifdef INDI_PRE_1_1_0 INDI_TYPE Proptype = property->getType(); #else INDI_PROPERTY_TYPE Proptype = property->getType(); #endif //printf("Camera Property: %s\n",PropName); if (Proptype == INDI_BLOB) { //printf("Found BLOB property for %s %s\n", DeviName, PropName); has_blob = 1; } else if ((strcmp(PropName, INDICameraCCDCmd+"EXPOSURE") == 0) && Proptype == INDI_NUMBER) { //printf("Found CCD_EXPOSURE for %s %s\n", DeviName, PropName); expose_prop = property->getNumber(); } else if ((strcmp(PropName, INDICameraCCDCmd+"FRAME") == 0) && Proptype == INDI_NUMBER) { //printf("Found CCD_FRAME for %s %s\n", DeviName, PropName); frame_prop = property->getNumber(); frame_x = IUFindNumber(frame_prop,"X"); frame_y = IUFindNumber(frame_prop,"Y"); frame_width = IUFindNumber(frame_prop,"WIDTH"); frame_height = IUFindNumber(frame_prop,"HEIGHT"); } else if ((strcmp(PropName, INDICameraCCDCmd+"FRAME_TYPE") == 0) && Proptype == INDI_SWITCH) { //printf("Found CCD_FRAME_TYPE for %s %s\n", DeviName, PropName); frame_type_prop = property->getSwitch(); } else if ((strcmp(PropName, INDICameraCCDCmd+"BINNING") == 0) && Proptype == INDI_NUMBER) { //printf("Found CCD_BINNING for %s %s\n",DeviName, PropName); binning_prop = property->getNumber(); binning_x = IUFindNumber(binning_prop,"HOR_BIN"); binning_y = IUFindNumber(binning_prop,"VER_BIN"); newNumber(binning_prop); } else if ((strcmp(PropName, "VIDEO_STREAM") == 0) && Proptype == INDI_SWITCH) { //printf("Found Video %s %s\n",DeviName, PropName); video_prop = property->getSwitch(); } else if (strcmp(PropName, "DEVICE_PORT") == 0 && Proptype == INDI_TEXT) { //printf("Found device port for %s \n",DeviName); camera_port = property->getText(); } else if (strcmp(PropName, "CONNECTION") == 0 && Proptype == INDI_SWITCH) { //printf("Found CONNECTION for %s %s\n",DeviName, PropName); // Check the value here in case the device is already connected ISwitch *connectswitch = IUFindSwitch(property->getSwitch(),"CONNECT"); Connected = (connectswitch->s == ISS_ON); } else if ((strcmp(PropName, "TELESCOPE_TIMED_GUIDE_NS") == 0) && Proptype == INDI_NUMBER) { pulseGuideNS_prop = property->getNumber(); pulseN_prop = IUFindNumber(pulseGuideNS_prop,"TIMED_GUIDE_N"); pulseS_prop = IUFindNumber(pulseGuideNS_prop,"TIMED_GUIDE_S"); } else if ((strcmp(PropName, "TELESCOPE_TIMED_GUIDE_WE") == 0) && Proptype == INDI_NUMBER) { pulseGuideEW_prop = property->getNumber(); pulseW_prop = IUFindNumber(pulseGuideEW_prop,"TIMED_GUIDE_W"); pulseE_prop = IUFindNumber(pulseGuideEW_prop,"TIMED_GUIDE_E"); } else if (strcmp(PropName, INDICameraCCDCmd+"INFO") == 0 && Proptype == INDI_NUMBER) { ccdinfo_prop = property->getNumber(); newNumber(ccdinfo_prop); } CheckState(); }