Ticket #3986: 3986-regexp-v1.patch

File 3986-regexp-v1.patch, 1.6 KB (added by danielk, 13 years ago)

Shane suggested it might be the channel sorting that is taking a long time..

  • libs/libmythtv/channelutil.cpp

     
    13651365    return QString::localeAwareCompare(a.callsign, b.callsign) < 0;
    13661366}
    13671367
     1368static QMutex sepExprLock;
     1369static const QRegExp sepExpr("(_|-|#|\\.)");
     1370
    13681371inline bool lt_smart(const DBChannel &a, const DBChannel &b)
    13691372{
    13701373    int cmp = 0;
     
    13781381    int b_minor = b.minor_chan;
    13791382
    13801383    // Extract minor and major numbers from channum..
    1381     const QRegExp sepExpr("(_|-|#|\\.)");
    13821384    bool tmp1, tmp2;
    1383     int idx = a.channum.find(sepExpr);
    1384     if (idx >= 0)
     1385    int idxA, idxB;
    13851386    {
    1386         int major = a.channum.left(idx).toUInt(&tmp1);
    1387         int minor = a.channum.mid(idx+1).toUInt(&tmp2);
     1387        QMutexLocker locker(&sepExprLock);
     1388        idxA = a.channum.find(sepExpr);
     1389        idxB = b.channum.find(sepExpr);
     1390    }
     1391    if (idxA >= 0)
     1392    {
     1393        int major = a.channum.left(idxA).toUInt(&tmp1);
     1394        int minor = a.channum.mid(idxA+1).toUInt(&tmp2);
    13881395        if (tmp1 && tmp2)
    13891396            (a_major = major), (a_minor = minor), (isIntA = false);
    13901397    }
    13911398
    1392     idx = b.channum.find(sepExpr);
    1393     if (idx >= 0)
     1399    if (idxB >= 0)
    13941400    {
    1395         int major = b.channum.left(idx).toUInt(&tmp1);
    1396         int minor = b.channum.mid(idx+1).toUInt(&tmp2);
     1401        int major = b.channum.left(idxB).toUInt(&tmp1);
     1402        int minor = b.channum.mid(idxB+1).toUInt(&tmp2);
    13971403        if (tmp1 && tmp2)
    13981404            (b_major = major), (b_minor = minor), (isIntB = false);
    13991405    }