void drawStitchLengthes(const struct EmbStitchList_ * start, const struct EmbStitchList_ * stop = 0) { if (NULL == start || NULL == start->next) { return; } struct EmbStitchList_ * currentStitch = start->next; draw(start, start->next, distance(start, start->next)); for (;NULL != currentStitch && NULL != currentStitch->next && stop != currentStitch->next && stop != currentStitch; currentStitch = currentStitch->next) { struct EmbStitchList_ * nextStitch = currentStitch->next; if (isNormal(currentStitch) && isNormal(nextStitch)) { draw(currentStitch, nextStitch, distance(currentStitch, nextStitch)); continue; } if (TRIM == nextStitch->stitch.flags) { continue; } if (isNormal(currentStitch)) { for (size_t ii = 0; ii < 1; ++ii) { nextStitch = nextStitch->next; if (isNormal(nextStitch) && distance(currentStitch, nextStitch) < 20) { draw(currentStitch, nextStitch, distance(currentStitch, nextStitch)); continue; } } } } }
void lcdDisplaySensors(unsigned int fd,struct sGENERAL patient){ //while(GPIORead(changeDisplay)!=HIGH){ char Nokia_Temp[10],Nokia_BPM[10]; Sensors.BPM = (unsigned int)serialGetchar(fd); Sensors.Temp = ((float)serialGetchar(fd)*5/(1023))/0.01; Sensors.BPMState = healthState(patient,Sensors.BPM); Sensors.TempState = isNormal(Sensors.Temp); snprintf(Nokia_Temp,10,"%.1f*C",Sensors.Temp); snprintf(Nokia_BPM,10,"%dBPM",Sensors.BPM); LCDclear(); printf("Temp:%.1f\n",Sensors.Temp); printf("BPM:%d\n",Sensors.BPM); LCDdrawstring(20,0,"SENSORES"); LCDdrawstring(25,10,Nokia_Temp); LCDdrawstring(20,20,Sensors.TempState); LCDdrawstring(25,30,Nokia_BPM); LCDdrawstring(20,40,Sensors.BPMState); LCDdisplay(); //} }
void MMD_Polynomial::getCoef( CDSRArray<CDSRComplex>& dest ) { dest.erase( 0, dest.size() ); if( !isNormal() ) Normalize(); for( long i = getTermCount() - 1; i >= 0 ; i-- ) dest.push_back( term_coef[ i ].getComplex() ); }
void MMD_Polynomial::getValue( UniWord& result, const UniWord& x ) { long i; UniWord ret; if( !isNormal() ) Normalize(); if( !getTermCount() ) return; ret = term_coef[ getTermCount() - 1 ]; switch( getType() ) { case DSRDATA_TYPE_INTEGER: for( i = getTermCount() - 2; i >= 0; i-- ) { _dsrop_Mul_integer( ret, ret, x ); _dsrop_Add_integer( ret, ret, term_coef[ i ] ); } break; case DSRDATA_TYPE_REAL: for( i = getTermCount() - 2; i >= 0; i-- ) { _dsrop_Mul_real( ret, ret, x ); _dsrop_Add_real( ret, ret, term_coef[ i ] ); } break; case DSRDATA_TYPE_COMPLEX: for( i = getTermCount() - 2; i >= 0; i-- ) { _dsrop_Mul_complex( ret, ret, x ); _dsrop_Add_complex( ret, ret, term_coef[ i ] ); } break; default: break; } result = ret; }
bool ImageInstance::getPixmap(QPixmap &pixmap) { bool retval = true; if (rawType && (!rawImage)) rawImage = new DicomImage(rawFile.toLocal8Bit().data()); if (isNormal()) { if (rawType) { if (rawWidth < 1) rawWidth = 1; if (rawCenter != cachedRawCenter || rawWidth != cachedRawWidth) { cachedRawCenter = rawCenter; cachedRawWidth = rawWidth; rawImage->setWindow(rawCenter, rawWidth); retval = dcm2bmpHelper(*rawImage, cachedRawPixmap); } pixmap = cachedRawPixmap; } else { if (winWidth < 1) winWidth = 1; if (winCenter != cachedCenter || winWidth != cachedWidth) { cachedCenter = winCenter; cachedWidth = winWidth; dcmImage->setWindow(winCenter, winWidth); retval = dcm2bmpHelper(*dcmImage, cachedPixmap); } pixmap = cachedPixmap; } } else retval = false; return retval; }
void draw(const struct EmbStitchList_ * a, const struct EmbStitchList_ * b, const float intensity) { if (EM_NORMAL != a->stitch.flags && EM_NORMAL != b->stitch.flags) { return; } // The circles for the two stitches are only drawn if the flag is "EM_NORMAL", // thereby we avoid drawing circles for intermediate jumps, trims etc. if (isNormal(a)) { cv::circle(img, getPos(a), std::round(radius*scale), cv::Scalar(intensity), -1); cv::circle(mask, getPos(a), std::round(radius*scale), 255, 0); } if (isNormal(b)) { cv::circle(img, getPos(b), std::round(radius*scale), cv::Scalar(intensity), -1); cv::circle(mask, getPos(b), std::round(radius*scale), 255, -1); } cv::line(img, getPos(a), getPos(b), cv::Scalar(intensity), std::round(scale * lineWidth)); cv::line(mask, getPos(a), getPos(b), 255, std::round(scale * lineWidth)); }
void MMD_Polynomial::getCoef( CDSRArray<CDSRInteger>& dest ) { dest.erase( 0, dest.size() ); if( !isNormal() ) Normalize(); //for( long i = 0; i < getTermCount(); i++ ) for( long i = getTermCount() - 1; i >= 0 ; i-- ) dest.push_back( term_coef[ i ].getInteger() ); }
bool ImageInstance::getPixSpacing(double &spacingX, double &spacingY) const { if (isNormal()) { spacingX = pixelSpacingX; spacingY = pixelSpacingY; return true; } else return false; }
void cgLdStaticLoc(IRLS& env, const IRInstruction* inst) { auto const extra = inst->extra<LdStaticLoc>(); auto const link = rds::bindStaticLocal(extra->func, extra->name); assertx(link.isNormal()); auto const dst = dstLoc(env, inst, 0).reg(); auto& v = vmain(env); v << lea{rvmtl()[link.handle() + rds::StaticLocalData::ref_offset()], dst}; }
void BinaryDigit::changeMode() { if (isNormal()) { setMode(BinaryDigit::Checked); setIcon(QIcon(UNIT_IMG_FILE_CHKED)); emit checked(); } else { setMode(BinaryDigit::Normal); setIcon(QIcon(UNIT_IMG_FILE_NORMAL)); emit normal(); } }
bool CDBTRule::isBigger(const std::vector<int>& cards_per, std::vector<int>& cards_now) { if (cards_per.size() == 0) return true; if (!checkCards(cards_now) || cards_now.size() == 0) return false; auto per = getType(cards_per); auto now = getType(cards_now); //前一次最大或本次类型不对 if (now.first == type_unknow || per.second == 54) return false; if (cards_per.size() == 0) return true; if (isNormal(per.first) && isNormal(now.first)){ //必须类型数量一样 if (per.first == now.first && cards_per.size() == cards_now.size()) return now.second > per.second; return false; } if (!isNormal(per.first) && !isNormal(now.first)) { if ((per.first == type_boom && now.first == type_boom) || (per.first == type_atom && now.first == type_atom)){ //数量多的大 if (cards_per.size() == cards_now.size()) return now.second > per.second; return cards_now.size() > cards_per.size(); } if (per.first == type_atom && now.first == type_boom) return false; return true; } if (!isNormal(per.first) && isNormal(now.first)) return false; return true; }
void cgInitStaticLoc(IRLS& env, const IRInstruction* inst) { auto const extra = inst->extra<InitStaticLoc>(); auto const link = rds::bindStaticLocal(extra->func, extra->name); assertx(link.isNormal()); auto& v = vmain(env); // Initialize the RefData by storing the new value into it's TypedValue and // incrementing the RefData reference count (which will set it to 1). auto mem = rvmtl()[link.handle() + rds::StaticLocalData::ref_offset()]; storeTV(v, mem + RefData::tvOffset(), srcLoc(env, inst, 0), inst->src(0)); emitStoreRefCount(v, OneReference, mem); v << storebi{uint8_t(HeaderKind::Ref), mem + (int)HeaderKindOffset}; markRDSHandleInitialized(v, link.handle()); static_assert(sizeof(HeaderKind) == 1, ""); }
bool CAButton::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent) { CCPoint point = pTouch->getLocation(); point = this->convertToNodeSpace(point); do { CC_BREAK_IF(!this->isVisible()); CC_BREAK_IF(!m_bTouchEnabled); CC_BREAK_IF(!isNormal()); CC_BREAK_IF(!getBounds().containsPoint(point)); return this->setTouchBegin(point); } while (0); return false; }
void Rect::clipRect(const Rect &rect) { const Vector2 topLeft = getTopLeft(), bottomRight = getBottomRight(), clipTopLeft = rect.getTopLeft(), clipBottomRight = rect.getBottomRight(); const Vector2 newTopLeft = Vector2( std::max(topLeft.x, clipTopLeft.x), std::max(topLeft.y, clipTopLeft.y)); const Vector2 newBottomRight = Vector2( std::min(bottomRight.x, clipBottomRight.x), std::min(bottomRight.y, clipBottomRight.y)); pos = newTopLeft; diagonal = newBottomRight - newTopLeft; if (!isNormal()) pos = diagonal = Vector2(); }
///converts the move to a human readable string so that it can be printed std::string toString() const { if (mType == MOVE_WW) return "WW"; if (mType == MOVE_RW) return "RW"; if (mType == MOVE_DRAW) return "DRAW"; if (mType == MOVE_BOG) return "BOG"; if (isNull()) return "NULL"; std::ostringstream lStream; char delimiter = isNormal() ? '-' : 'x'; assert(mData.size() > 0); // Concatenate all the cell numbers lStream << (int)mData[0]; for(unsigned i=1; i<mData.size(); ++i) lStream << delimiter << (int)mData[i]; return lStream.str(); }
DCEL DivideAndConquerFor3DCH::BruceForceCH( vector<VERTEX*>* pVertex, const unsigned int offset ) { vector<TRIANGLE> triangleSet, finalTriangleSet; // Generate all possible triangles int pointSetSize = pVertex->size(); for( int i = 0; i < pointSetSize; i++ ) { for( int j = i + 1; j < pointSetSize; j++ ) { for( int k = j + 1; k < pointSetSize; k++ ) { // Forming face TRIANGLE face; face.p1.pointOneIndex = i; face.p2.pointTwoIndex = j; face.p3.pointThreeIndex = k; triangleSet.push_back( face ); } } } // Find the CH for this point set by using RayAndTriangleIntersection method for( int i = 0; i < triangleSet.size(); i++ ) { // Create a ray from this surface TRIANGLE triangle = triangleSet[ i ]; // Point2 - point1 //D3DXVECTOR3 edge1( triangle.pointTwo.x - triangle.pointOne.x, triangle.pointTwo.y - triangle.pointOne.y, triangle.pointTwo.z - triangle.pointOne.z ); VERTEX* pointOne = (*pVertex)[ triangle.p1.pointOneIndex ]; VERTEX* pointTwo = (*pVertex)[ triangle.p2.pointTwoIndex ]; VERTEX* pointThree = (*pVertex)[ triangle.p3.pointThreeIndex ]; D3DXVECTOR3 edge1( pointTwo->x - pointOne->x, pointTwo->y - pointOne->y, pointTwo->z - pointOne->z ); D3DXVECTOR3 edge2( pointThree->x - pointOne->x, pointThree->y - pointOne->y, pointThree->z - pointOne->z ); // point3 - point1 //D3DXVECTOR3 edge2( triangle.pointThree.x - triangle.pointOne.x, triangle.pointThree.y - triangle.pointOne.y, triangle.pointThree.z - triangle.pointOne.z ); D3DXVECTOR3 triangleNormal; D3DXVec3Cross( &triangleNormal, &edge1, &edge2 ); D3DXVECTOR3 rayStartPoint( ( pointOne->x + pointTwo->x + pointThree->x ) / 3.0f, ( pointOne->y + pointTwo->y + pointThree->y ) / 3.0f, ( pointOne->z + pointTwo->z + pointThree->z ) / 3.0f ); Ray ray, invRay; D3DXVec3Normalize( &ray.direction, &triangleNormal ); ray.position = rayStartPoint; invRay = ray; invRay.direction *= -1.0; bool rayIntersect = !isNormal(ray, triangleSet[i], pVertex); bool invRayIntersect = !isNormal(invRay, triangleSet[i], pVertex); // This is the face that contribute to the convex hull and find its vertices order if( rayIntersect == false && invRayIntersect == true ) { finalTriangleSet.push_back( triangleSet[ i ] ); } else if( rayIntersect == true && invRayIntersect == false ) { TRIANGLE tmpTri = triangleSet[ i ]; int tmpVerIndex = tmpTri.p2.pointTwoIndex; tmpTri.p2.pointTwoIndex = tmpTri.p3.pointThreeIndex; tmpTri.p3.pointThreeIndex = tmpVerIndex; finalTriangleSet.push_back( tmpTri ); } } DCEL dcel; dcel.createDCEL( &finalTriangleSet, pVertex, offset ); return dcel; }
MArray<UniWord>& MMD_Polynomial::getNormalCoef( void ) { if( !isNormal() ) Normalize(); return term_coef; }
/** * Evaluates the given mathematical expression and returns the result. * Angles may be expressed in degrees (default), rad (#r), gon (#g) * or as surveyors angles (N#d#'#"E). */ double RMath::eval(const QString& expression, bool* ok) { lastError = ""; if (expression.isEmpty()) { if (ok!=NULL) { *ok = false; } lastError = "Expression is empty"; //qDebug() << "RMath::evel: error: " << lastError; return RNANDOUBLE; } if (ok!=NULL) { *ok = true; } QString expr = expression; // 'correct' commas in numbers to points: if (RSettings::getNumberLocale().decimalPoint()==',') { expr.replace(QRegExp("(\\d*),(\\d+)"), "\\1.\\2"); } int idx = -1; // convert surveyor type angles (e.g. N10d30'12.5"E) to degrees: if (expr.contains(QRegExp("[NESW]", Qt::CaseInsensitive))) { // \b(?:(?:([NS])(?:([+-]?)(?:(?:(\d*\.?\d*)[d°])?(?:(\d*\.?\d*)')?(?:(\d*\.?\d*)")?|(\d*))([EW]))?)|([EW]))\b QRegExp re( "\\b" // a word "(?:" "(?:" "([NS])" // expression starts with nord or south "(?:" "([+-]?)" // sign "(?:" "(?:(\\d*\\.?\\d*)[d°])?" // degrees with d "(?:(\\d*\\.?\\d*)')?" // minutes with ' "(?:(\\d*\\.?\\d*)\")?" // seconds with " "|" // or... "(\\d*)" // degrees without d ")" "([EW])" // east or west ")?" ")" "|" // or... "([EW])" // only east (0d) or west (180d) ")" "\\b", Qt::CaseInsensitive, QRegExp::RegExp2); do { idx = re.indexIn(expr); if (idx==-1) { break; } double angle = 0.0; QString sign; // "E" or "W": if (!re.cap(8).isEmpty()) { if (re.cap(8).toUpper()=="E") { angle = 0.0; } else if (re.cap(8).toUpper()=="W") { angle = 180.0; } else { if (ok!=NULL) { *ok = false; } lastError = "Invalid cardinal direction found (valid values are: N,E,S,W)"; return RNANDOUBLE; } } // "[NS]...[EW]": else { bool north = re.cap(1).toUpper()=="N"; bool south = re.cap(1).toUpper()=="S"; sign = re.cap(2); double degrees = 0.0; double minutes = 0.0; double seconds = 0.0; if (!re.cap(6).isEmpty()) { degrees = re.cap(6).toDouble(ok); } else { degrees = re.cap(3).toDouble(ok); minutes = re.cap(4).toDouble(ok); seconds = re.cap(5).toDouble(ok); } bool east = re.cap(7).toUpper()=="E"; bool west = re.cap(7).toUpper()=="W"; double base = (north ? 90.0 : 270.0); int dir = ((north && west) || (south && east) ? 1 : -1); angle = base + dir * (degrees + minutes/60.0 + seconds/3600.0); } expr.replace( re.cap(), QString("%1%2").arg(sign).arg(angle, 0, 'g', 16) ); } while(idx!=-1); } //qDebug() << "RMath::eval: expression 001 is: " << expr; // convert radiant angles (e.g. "1.2r") to degrees: { QRegExp re("((?:\\.\\d+)|(?:\\d+\\.\\d*)|(?:\\d+))r\\b", Qt::CaseInsensitive, QRegExp::RegExp2); do { idx = re.indexIn(expr); if (idx==-1) { break; } QString match = re.cap(1); //qDebug() << "RMath::eval: match 001a is: " << match; expr.replace( re, QString("%1").arg(rad2deg(match.toDouble(ok)), 0, 'g', 16) ); //qDebug() << "RMath::eval: expression 001a is: " << expr; } while(idx!=-1); } //qDebug() << "RMath::eval: expression 002 is: " << expr; // convert grad angles (e.g. "100g") to degrees: { QRegExp re("((?:\\.\\d+)|(?:\\d+\\.\\d*)|(?:\\d+))g\\b", Qt::CaseInsensitive, QRegExp::RegExp2); do { idx = re.indexIn(expr); if (idx==-1) { break; } QString match = re.cap(1); expr.replace( re, QString("%1").arg(gra2deg(match.toDouble(ok)), 0, 'g', 16) ); } while(idx!=-1); } //qDebug() << "RMath::eval: expression 003 is: " << expr; // convert explicitely indicated degree angles (e.g. "90d") to degrees: { QRegExp re("((?:\\.\\d+)|(?:\\d+\\.\\d*)|(?:\\d+))d\\b", Qt::CaseInsensitive, QRegExp::RegExp2); do { idx = re.indexIn(expr); if (idx==-1) { break; } QString match = re.cap(1); expr.replace( re, QString("%1").arg(match.toDouble(ok), 0, 'g', 16) ); } while(idx!=-1); } // convert fraction notation to formula: // e.g. 7 3/32 to 7+3/32 { QRegExp re("(\\d+)[ ]+(\\d+/\\d+)", Qt::CaseInsensitive, QRegExp::RegExp2); do { idx = re.indexIn(expr); if (idx==-1) { break; } QString numberString = re.cap(1); QString fractionString = re.cap(2); expr.replace( re, QString("%1+%2").arg(numberString).arg(fractionString) ); } while(idx!=-1); } // convert foot indication to a factor of 12 // e.g. "10'" to 10*12 and "10' " to 10*12+ { QRegExp re("(\\d+)'[ ]*(\\d*)", Qt::CaseInsensitive, QRegExp::RegExp2); do { idx = re.indexIn(expr); if (idx==-1) { break; } QString feetString = re.cap(1); //QString spacesString = re.cap(2); QString inchString = re.cap(2); expr.replace( re, QString("%1*12%2%3") .arg(feetString) .arg(inchString.isEmpty() ? "" : "+") .arg(inchString) ); } while(idx!=-1); } //qDebug() << "RMath::eval: expression is: " << expr; QScriptEngine e; if (mathExt.isNull()) { QString inputJs = "scripts/input.js"; QFile file(inputJs); if (file.exists()) { if (file.open(QIODevice::ReadOnly|QIODevice::Text)) { mathExt = QString(file.readAll()); file.close(); } } else { qDebug() << "file not found: input.js"; } } e.evaluate(mathExt); QScriptValue res = e.evaluate(expr); if (res.isError()) { if (ok!=NULL) { *ok = false; } lastError = res.toString(); //qDebug() << "RMath::evel: error: " << lastError; return RNANDOUBLE; } if (!res.isNumber()) { if (ok != NULL) { *ok = false; } lastError = expr + " is not a number"; //qDebug() << "RMath::evel: error: " << lastError; return RNANDOUBLE; } //qDebug() << "res.toNumber(): " << res.toNumber(); //qDebug() << "fpclassify: " << std::fpclassify(res.toNumber()); if (!isNormal(res.toNumber())) { if (ok != NULL) { *ok = false; } lastError = expr + " is not a normal number"; //qDebug() << "RMath::evel: error: " << lastError; return RNANDOUBLE; } return res.toNumber(); }
/** * Evaluates the given mathematical expression and returns the result. * Angles may be expressed in degrees (default), rad (#r), gon (#g) * or as surveyors angles (N#d#'#"E). */ double RMath::eval(const QString& expression, bool* ok) { lastError = ""; if (expression.isEmpty()) { if (ok!=NULL) { *ok = false; } lastError = "Expression is empty"; //qDebug() << "RMath::evel: error: " << lastError; return RNANDOUBLE; } if (ok!=NULL) { *ok = true; } QString expr = expression; // 'correct' commas to points: if (RSettings::getNumberLocale().decimalPoint()==',') { expr.replace(',', '.'); } if (expr.contains(',') || expr.contains(';')) { if (ok!=NULL) { *ok = false; } lastError = "Multiple expressions"; return RNANDOUBLE; } int idx = -1; // convert surveyor type angles (e.g. N10d30'12.5"E) to degrees: if (expr.contains(QRegExp("[NESW]", Qt::CaseInsensitive))) { // \b(?:(?:([NS])(?:([+-]?)(?:(?:(\d*\.?\d*)[d°])?(?:(\d*\.?\d*)')?(?:(\d*\.?\d*)")?|(\d*))([EW]))?)|([EW]))\b QRegExp re( "\\b" // a word "(?:" "(?:" "([NS])" // expression starts with nord or south "(?:" "([+-]?)" // sign "(?:" "(?:(\\d*\\.?\\d*)[d°])?" // degrees with d "(?:(\\d*\\.?\\d*)')?" // minutes with ' "(?:(\\d*\\.?\\d*)\")?" // seconds with " "|" // or... "(\\d*)" // degrees without d ")" "([EW])" // east or west ")?" ")" "|" // or... "([EW])" // only east (0d) or west (180d) ")" "\\b", Qt::CaseInsensitive, QRegExp::RegExp2); do { idx = re.indexIn(expr); if (idx==-1) { break; } double angle = 0.0; QString sign; // "E" or "W": if (!re.cap(8).isEmpty()) { if (re.cap(8).toUpper()=="E") { angle = 0.0; } else if (re.cap(8).toUpper()=="W") { angle = 180.0; } else { if (ok!=NULL) { *ok = false; } lastError = "Invalid cardinal direction found (valid values are: N,E,S,W)"; return RNANDOUBLE; } } // "[NS]...[EW]": else { bool north = re.cap(1).toUpper()=="N"; bool south = re.cap(1).toUpper()=="S"; sign = re.cap(2); double degrees = 0.0; double minutes = 0.0; double seconds = 0.0; if (!re.cap(6).isEmpty()) { degrees = re.cap(6).toDouble(ok); } else { degrees = re.cap(3).toDouble(ok); minutes = re.cap(4).toDouble(ok); seconds = re.cap(5).toDouble(ok); } bool east = re.cap(7).toUpper()=="E"; bool west = re.cap(7).toUpper()=="W"; double base = (north ? 90.0 : 270.0); int dir = ((north && west) || (south && east) ? 1 : -1); angle = base + dir * (degrees + minutes/60.0 + seconds/3600.0); } expr.replace( re.cap(), QString("%1%2").arg(sign).arg(angle, 0, 'g', 16) ); } while(idx!=-1); } //qDebug() << "RMath::eval: expression 001 is: " << expr; // convert radiant angles (e.g. "1.2r") to degrees: { QRegExp re("((?:\\.\\d+)|(?:\\d+\\.\\d*)|(?:\\d+))r\\b", Qt::CaseInsensitive, QRegExp::RegExp2); do { idx = re.indexIn(expr); if (idx==-1) { break; } QString match = re.cap(1); //qDebug() << "RMath::eval: match 001a is: " << match; expr.replace( re, QString("%1").arg(rad2deg(match.toDouble(ok)), 0, 'g', 16) ); //qDebug() << "RMath::eval: expression 001a is: " << expr; } while(idx!=-1); } //qDebug() << "RMath::eval: expression 002 is: " << expr; // convert grad angles (e.g. "100g") to degrees: { QRegExp re("((?:\\.\\d+)|(?:\\d+\\.\\d*)|(?:\\d+))g\\b", Qt::CaseInsensitive, QRegExp::RegExp2); do { idx = re.indexIn(expr); if (idx==-1) { break; } QString match = re.cap(1); expr.replace( re, QString("%1").arg(gra2deg(match.toDouble(ok)), 0, 'g', 16) ); } while(idx!=-1); } //qDebug() << "RMath::eval: expression 003 is: " << expr; // convert explicitely indicated degree angles (e.g. "90d") to degrees: { QRegExp re("((?:\\.\\d+)|(?:\\d+\\.\\d*)|(?:\\d+))d\\b", Qt::CaseInsensitive, QRegExp::RegExp2); do { idx = re.indexIn(expr); if (idx==-1) { break; } QString match = re.cap(1); expr.replace( re, QString("%1").arg(match.toDouble(ok), 0, 'g', 16) ); } while(idx!=-1); } // convert fraction notation to formula: // e.g. 7 3/32 to 7+3/32 { QRegExp re("(\\d+)[ ]+(\\d+/\\d+)", Qt::CaseInsensitive, QRegExp::RegExp2); do { idx = re.indexIn(expr); if (idx==-1) { break; } QString numberString = re.cap(1); QString fractionString = re.cap(2); expr.replace( re, QString("%1+%2").arg(numberString).arg(fractionString) ); } while(idx!=-1); } //qDebug() << "RMath::eval: expression is: " << expr; QScriptEngine e; // add common functions of Math to global scope for use in math input fields: QStringList mathProp; mathProp << "PI" << "LN2" << "LN10" << "LOG2E" << "LOG10E" << "SQRT1_2" << "SQRT2" << "abs" //<< "cos" << "sin" << "tan" //<< "acos" << "asin" << "atan" << "atan2" << "ceil" << "floor" << "exp" << "log" << "max" << "min" << "pow" << "sqrt" << "random" << "round"; for (int i=0; i<mathProp.length(); i++) { e.evaluate(mathProp[i] + " = Math." + mathProp[i]); } e.evaluate("rad2deg = function(a) { return a / (2.0 * Math.PI) * 360.0; }"); e.evaluate("deg2rad = function(a) { return (a / 360.0) * (2.0 * Math.PI); }"); e.evaluate("sin = function(v) { return Math.sin(deg2rad(v)); }"); e.evaluate("cos = function(v) { return Math.cos(deg2rad(v)); }"); e.evaluate("tan = function(v) { return Math.tan(deg2rad(v)); }"); e.evaluate("asin = function(v) { return rad2deg(Math.asin(v)); }"); e.evaluate("acos = function(v) { return rad2deg(Math.acos(v)); }"); e.evaluate("atan = function(v) { return rad2deg(Math.atan(v)); }"); //e.evaluate("atan2 = function(y,x) { return rad2deg(Math.atan2(y,x)); }"); QScriptValue res = e.evaluate(expr); if (res.isError()) { if (ok!=NULL) { *ok = false; } lastError = res.toString(); //qDebug() << "RMath::evel: error: " << lastError; return RNANDOUBLE; } if (!res.isNumber()) { if (ok != NULL) { *ok = false; } lastError = expr + " is not a number"; //qDebug() << "RMath::evel: error: " << lastError; return RNANDOUBLE; } //qDebug() << "res.toNumber(): " << res.toNumber(); //qDebug() << "fpclassify: " << std::fpclassify(res.toNumber()); if (!isNormal(res.toNumber())) { if (ok != NULL) { *ok = false; } lastError = expr + " is not a normal number"; //qDebug() << "RMath::evel: error: " << lastError; return RNANDOUBLE; } return res.toNumber(); }
IRequestStatus IRequestParser::consume(IRequest& request, char input) { switch (state) { case IParserState::IREQUEST_TYPE_START: if (isNormal(input)) { state = IParserState::IREQUEST_TYPE; request.getType() += input; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::IREQUEST_TYPE: if (input == FormatConst::COMP_SEPERATOR) { state = IParserState::IREQUEST_ID_START; return IRequestStatus::INDETERMINATE; } else if (isNormal(input)) { request.getType() += input; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::IREQUEST_ID_START: if (isNormal(input)) { state = IParserState::IREQUEST_ID; request.getId() += input; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::IREQUEST_ID: if (input == FormatConst::COMP_SEPERATOR) { state = IParserState::AUTO_VERSION_A; return IRequestStatus::INDETERMINATE; } else if (isNormal(input)) { request.getId() += input; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::AUTO_VERSION_A: if (input == 'A') { state = IParserState::AUTO_VERSION_U; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::AUTO_VERSION_U: if (input == 'U') { state = IParserState::AUTO_VERSION_T; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::AUTO_VERSION_T: if (input == 'T') { state = IParserState::AUTO_VERSION_O; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::AUTO_VERSION_O: if (input == 'O') { state = IParserState::AUTO_VERSION_SLASH; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::AUTO_VERSION_SLASH: if (input == '/') { state = IParserState::VERSION_MAJOR_START; request.setAutoVersionMajor(0); request.setAutoVersionMinor(0); return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::VERSION_MAJOR_START: if (isDigit(input)) { request.setAutoVersionMajor( request.getAutoVersionMajor() * 10 + input - '0'); state = IParserState::VERSION_MAJOR; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::VERSION_MAJOR: if (input == '.') { state = IParserState::VERSION_NINOR_START; return IRequestStatus::INDETERMINATE; } else if (isDigit(input)) { request.setAutoVersionMajor( request.getAutoVersionMajor() * 10 + input - '0'); return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::VERSION_NINOR_START: if (isDigit(input)) { request.setAutoVersionMinor( request.getAutoVersionMinor() * 10 + input - '0'); state = IParserState::VERSION_NINOR; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::VERSION_NINOR: if (input == '\r') { state = IParserState::EXPECTING_NEWLINE_1; return IRequestStatus::INDETERMINATE; } else if (isDigit(input)) { request.setAutoVersionMinor( request.getAutoVersionMinor() * 10 + input - '0'); return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::EXPECTING_NEWLINE_1: if (input == '\n') { state = IParserState::PARAM_START; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::PARAM_START: if (input == '\r') { state = IParserState::EXPECTING_NEWLINE_END; return IRequestStatus::INDETERMINATE; } else if (isDigit(input)) { request.getParams().push_back(input - '0'); state = IParserState::PARAM_VALUE; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::PARAM_VALUE: if (input == FormatConst::COMP_SUB_SEPERATOR) { state = IParserState::PARAM_START; return IRequestStatus::INDETERMINATE; } else if (input == '\r') { state = IParserState::EXPECTING_NEWLINE_END; return IRequestStatus::INDETERMINATE; } else if (isDigit(input)) { request.getParams().back() = request.getParams().back() * 10 + input - '0'; return IRequestStatus::INDETERMINATE; } else { return IRequestStatus::BAD; } case IParserState::EXPECTING_NEWLINE_END: return (input == '\n') ? IRequestStatus::GOOD : IRequestStatus::BAD; default: return IRequestStatus::BAD; } }
/*! \fn QMediaTimeInterval::contains(qint64 time) const Returns true if the time interval contains the specified \a time. That is, start() <= time <= end(). \since 1.0 */ bool QMediaTimeInterval::contains(qint64 time) const { return isNormal() ? (s <= time && time <= e) : (e <= time && time <= s); }