本文整理汇总了C++中QLinkedList::size方法的典型用法代码示例。如果您正苦于以下问题:C++ QLinkedList::size方法的具体用法?C++ QLinkedList::size怎么用?C++ QLinkedList::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QLinkedList
的用法示例。
在下文中一共展示了QLinkedList::size方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main ()
{
QLinkedList<QString> list;
list << "A" << "B" << "C" << "D" << "E" << "F";
assert(list.takeFirst() == "A");
assert(list.size() == 5);
return 0;
}
示例2: UpdateHistory
void BatteryHistoryDialog::UpdateHistory (const QLinkedList<BatteryHistory>& hist)
{
QVector<double> xdata (hist.size ());
QVector<double> percents (hist.size ());
QVector<double> energy (hist.size ());
int i = 0;
std::for_each (hist.begin (), hist.end (),
[&xdata, &percents, &energy, &i] (const BatteryHistory& bh)
{
percents [i] = bh.Percentage_;
energy [i] = bh.EnergyRate_;
xdata [i] = i;
++i;
});
Percent_->setSamples (xdata, percents);
Energy_->setSamples (xdata, energy);
Ui_.PercentPlot_->replot ();
}
示例3: main
int main() {
cout << "Methods of finding function roots.\nPodkopaev Anton, SPbSU, 2011\n";
cout << "f(x) = x^2 - sin(5x)\n\n";
double A = -10;
double B = 10;
double eps = 0.000001;
cout << "Enter interval\n";
cout << "Left border: ";
cin >> A;
cout << "Right border: ";
cin >> B;
cout << "Enter accurancy: ";
cin >> eps;
double step = eps * 1000;
cout << "Enter first step: ";
cin >> step;
QLinkedList<Interval> intervals = rootDividing<CurFunc>(A, B, step);
int oldRootNumber = intervals.size();
do {
step /= 2;
intervals = rootDividing<CurFunc>(A, B, step);
} while((step > 2 * eps) && (oldRootNumber != intervals.size()));
cout << "Result tabulation step: " << step << "\n";
cout << "Interval number: " << intervals.size() << "\n\n";
cin.get();
foreach (Interval curInterval, intervals) {
cout << "\n\t\t\tInterval: " << curInterval.toString().toStdString();
bisectionMethod<CurFunc>(curInterval, eps);
newtonMethod<CurFunc>(curInterval, eps);
secantMethod<CurFunc>(curInterval, eps);
cin.get();
}
示例4: setPatientItems
/**
* Set the items of the Patient list, removes the old ones
* Rows containing Patient Name and Health Card Number and optionally Bed Type
*
* @param patientItems map of patient's health card number to a Patient pointer
* @param includeBeds True if beds should be included, False otherwise
*/
void MovePatientForm::setPatientItems(const QLinkedList<Patient*> &patientItems, bool includeBeds)
{
_patientList->clear();
if (patientItems.size() > 0)
{
QList<QTreeWidgetItem*> items;
foreach (Patient* patient, patientItems)
{
// Store the name first, then the hcn
QStringList info = QStringList() << patient->getName() << patient->getHealthCardNumber();
// Optionally store the bed type
if (includeBeds) { info << Convenience::careTypeToQString(patient->getOccupiedCare()); }
items.append(new QTreeWidgetItem((QTreeWidget*)0, info));
}
示例5: exceptionLinkedList
void tst_ExceptionSafety::exceptionLinkedList() {
{
QLinkedList<FlexibleThrowerSmall> list;
QLinkedList<FlexibleThrowerSmall> list2;
QLinkedList<FlexibleThrowerSmall> list3;
for( int i = 0; i<10; i++ )
list.append( FlexibleThrowerSmall(i) );
try {
throwType = ThrowAtCopy;
list.append( FlexibleThrowerSmall(10));
} catch (...) {
}
QCOMPARE( list.size(), 10 );
try {
throwType = ThrowAtCopy;
list.prepend( FlexibleThrowerSmall(10));
} catch (...) {
}
QCOMPARE( list.first().value(), 0 );
QCOMPARE( list.size(), 10 );
try {
throwType = ThrowAtCopy;
list3 = list;
list3.append( FlexibleThrowerSmall(11) );
} catch (...) {
}
QCOMPARE( list.first().value(), 0 );
QCOMPARE( list.size(), 10 );
QCOMPARE( list3.size(), 10 );
}
QCOMPARE(objCounter, 0 ); // check that every object has been freed
}
示例6: while
QLinkedList<const GEOSGeometry *> *unmulti( const GEOSGeometry *the_geom )
{
QLinkedList<const GEOSGeometry*> *queue = new QLinkedList<const GEOSGeometry*>;
QLinkedList<const GEOSGeometry*> *final_queue = new QLinkedList<const GEOSGeometry*>;
const GEOSGeometry *geom;
queue->append( the_geom );
int nGeom;
int i;
while ( queue->size() > 0 )
{
geom = queue->takeFirst();
GEOSContextHandle_t geosctxt = geosContext();
switch ( GEOSGeomTypeId_r( geosctxt, geom ) )
{
case GEOS_MULTIPOINT:
case GEOS_MULTILINESTRING:
case GEOS_MULTIPOLYGON:
nGeom = GEOSGetNumGeometries_r( geosctxt, geom );
for ( i = 0; i < nGeom; i++ )
{
queue->append( GEOSGetGeometryN_r( geosctxt, geom, i ) );
}
break;
case GEOS_POINT:
case GEOS_LINESTRING:
case GEOS_POLYGON:
final_queue->append( geom );
break;
default:
delete final_queue;
delete queue;
return NULL;
}
}
delete queue;
return final_queue;
}
示例7: removeResources
void RDFGraphBasic::removeResources(RDFVariable const &variable)
{
QLinkedList<RDFVariable> removes;
removes << variable;
RDFTransactionPtr tx = createTransaction();
while(1)
{
RDFStatementList removed_statements;
executeQuery
(RDFUpdate(service_context_data_->update())
.addDeletion(*recurseRemoveResources
(&removed_statements, removes.front(), &removes)));
removes.pop_front();
tx->commit();
if(!removes.size())
return;
if(!(tx = createTransaction(RDFTransaction::Exclusive)))
{
warning() << "using recursive sharing removes requires that "
"no transaction is active on the service";
return;
}
}
}
示例8: trackdir
//.........这里部分代码省略.........
QString cLoc_filename = QString(trackdir % "/cover-test." % qFormat);
EXPECT_TRUE(img.scaled(500,500).save(cLoc_filename, format));
prefCovers << QFileInfo(cLoc_filename);
// 2. album_name.jpg
QString cLoc_albumName = QString(trackdir % "/album_name." % qFormat);
EXPECT_TRUE(img.scaled(500,500).save(cLoc_albumName, format));
prefCovers << QFileInfo(cLoc_albumName);
// 3. cover.jpg
QString cLoc_cover = QString(trackdir % "/" % "cover." % qFormat);
EXPECT_TRUE(img.scaled(400,400).save(cLoc_cover, format));
prefCovers << QFileInfo(cLoc_cover);
// 4. front.jpg
QString cLoc_front = QString(trackdir % "/" % "front." % qFormat);
EXPECT_TRUE(img.scaled(300,300).save(cLoc_front, format));
prefCovers << QFileInfo(cLoc_front);
// 5. album.jpg
QString cLoc_album = QString(trackdir % "/" % "album." % qFormat);
EXPECT_TRUE(img.scaled(100,100).save(cLoc_album, format));
prefCovers << QFileInfo(cLoc_album);
// 6. folder.jpg
QString cLoc_folder = QString(trackdir % "/" % "folder." % qFormat);
EXPECT_TRUE(img.scaled(100,100).save(cLoc_folder, format));
prefCovers << QFileInfo(cLoc_folder);
// 8. other1.jpg
QString cLoc_other1 = QString(trackdir % "/" % "other1." % qFormat);
EXPECT_TRUE(img.scaled(10,10).save(cLoc_other1, format));
prefCovers << QFileInfo(cLoc_other1);
// 7. other2.jpg
QString cLoc_other2 = QString(trackdir % "/" % "other2." % qFormat);
EXPECT_TRUE(img.scaled(10,10).save(cLoc_other2, format));
prefCovers << QFileInfo(cLoc_other2);
// we must find covers in the right order
EXPECT_EQ(8, prefCovers.size());
// Remove the covers one by one from the front, checking that each one is
// selected as we remove the previously-most-preferable cover.
while (!prefCovers.isEmpty()) {
QFileInfo cover = prefCovers.first();
// We expect no cover selected for other1 since there are 2 covers,
// neither of which match our preferred cover names. other2 will be
// selected once we get to it since it is the only cover available.
if (cover.baseName() == "other1") {
expected.image = QImage();
expected.info.type = CoverInfo::NONE;
expected.info.coverLocation = QString();
expected.info.hash = 0;
} else {
expected.image = QImage(cover.filePath());
expected.info.type = CoverInfo::FILE;
expected.info.coverLocation = cover.fileName();
expected.info.hash = CoverArtUtils::calculateHash(expected.image);
}
res = CoverArtUtils::selectCoverArtForTrack(trackBaseName, trackAlbum,
prefCovers);
EXPECT_QSTRING_EQ(expected.info.coverLocation, res.info.coverLocation);
EXPECT_QSTRING_EQ(expected.info.hash, res.info.hash);
EXPECT_EQ(expected, res);
QFile::remove(cover.filePath());
prefCovers.pop_front();
}
//
// Additional tests
示例9: search
void ClangSymbolSearcher::search(const QLinkedList<Symbol> &allSymbols)
{
QString findString = (m_parameters.flags & Find::FindRegularExpression
? m_parameters.text : QRegExp::escape(m_parameters.text));
if (m_parameters.flags & Find::FindWholeWords)
findString = QString::fromLatin1("\\b%1\\b").arg(findString);
QRegExp matcher(findString, (m_parameters.flags & Find::FindCaseSensitively
? Qt::CaseSensitive : Qt::CaseInsensitive));
const int chunkSize = 10;
QVector<Core::SearchResultItem> resultItems;
resultItems.reserve(100);
m_future->setProgressRange(0, allSymbols.size() % chunkSize);
m_future->setProgressValue(0);
int symbolNr = 0;
foreach (const Symbol &s, allSymbols) {
if (symbolNr % chunkSize == 0) {
m_future->setProgressValue(symbolNr / chunkSize);
m_future->reportResults(resultItems);
resultItems.clear();
if (m_future->isPaused())
m_future->waitForResume();
if (m_future->isCanceled())
return;
}
++symbolNr;
CppTools::ModelItemInfo info;
switch (s.m_kind) {
case Symbol::Enum:
if (m_parameters.types & SymbolSearcher::Enums) {
info.type = CppTools::ModelItemInfo::Enum;
info.symbolType = QLatin1String("enum");
break;
} else {
continue;
}
case Symbol::Class:
if (m_parameters.types & SymbolSearcher::Classes) {
info.type = CppTools::ModelItemInfo::Class;
info.symbolType = QLatin1String("class");
break;
} else {
continue;
}
case Symbol::Method:
case Symbol::Function:
case Symbol::Constructor:
case Symbol::Destructor:
if (m_parameters.types & SymbolSearcher::Functions) {
info.type = CppTools::ModelItemInfo::Function;
break;
} else {
continue;
}
case Symbol::Declaration:
if (m_parameters.types & SymbolSearcher::Declarations) {
info.type = CppTools::ModelItemInfo::Declaration;
break;
} else {
continue;
}
default: continue;
}
if (matcher.indexIn(s.m_name) == -1)
continue;
info.symbolName = s.m_name;
info.fullyQualifiedName = s.m_qualification.split(QLatin1String("::")) << s.m_name;
info.fileName = s.m_location.fileName();
info.icon = s.iconForSymbol();
info.line = s.m_location.line();
info.column = s.m_location.column() - 1;
Core::SearchResultItem item;
item.path << s.m_qualification;
item.text = s.m_name;
item.icon = info.icon;
item.textMarkPos = -1;
item.textMarkLength = 0;
item.lineNumber = -1;
item.userData = qVariantFromValue(info);
resultItems << item;
}
if (!resultItems.isEmpty())
m_future->reportResults(resultItems);
}
示例10: init
void ConditionalDialog::init()
{
QLinkedList<KCConditional> conditionList;
QLinkedList<KCConditional> otherList;
bool found;
int numCondition;
QLinkedList<KCConditional>::iterator it1;
QLinkedList<KCConditional>::iterator it2;
KCSheet* sheet = m_selection->activeSheet();
conditionList = KCCell(sheet, m_selection->marker()).conditions().conditionList();
/* this is the list, but only display the conditions common to all selected
cells*/
for (int x = m_selection->lastRange().left(); x <= m_selection->lastRange().right(); x++) {
for (int y = m_selection->lastRange().top(); y <= m_selection->lastRange().bottom(); y++) {
otherList = KCCell(sheet, x, y).conditions().conditionList();
it1 = conditionList.begin();
while (it1 != conditionList.end()) {
kDebug() << "Here";
found = false;
for (it2 = otherList.begin(); !found && it2 != otherList.end(); ++it2) {
kDebug() << "Found:" << found;
found = ((*it1).value1 == (*it2).value1 &&
(*it1).value2 == (*it2).value2 &&
(*it1).cond == (*it2).cond);
if (!found)
continue;
if ((*it1).styleName != (*it2).styleName)
found = false;
}
if (!found) { /* if it's not here, don't display this condition */
it1 = conditionList.erase(it1);
} else {
++it1;
}
}
}
}
kDebug() << "KCConditions:" << conditionList.size();
m_dlg->m_condition_2->setEnabled(false);
m_dlg->m_condition_3->setEnabled(false);
m_dlg->m_style_1->setEnabled(false);
m_dlg->m_style_2->setEnabled(false);
m_dlg->m_style_3->setEnabled(false);
numCondition = 0;
for (it1 = conditionList.begin(); numCondition < 3 && it1 != conditionList.end(); ++it1) {
init(*it1, numCondition);
++numCondition;
}
}
示例11: write
bool PlotIO::write(const QString& path, const ros::Time& start, const ros::Time& end)
{
FileFormat* io = 0;
if(path.endsWith(".bag"))
io = new BagFormat;
else if(path.endsWith(".csv"))
io = new CSVFormat;
if(!io)
{
fprintf(stderr, "Could not find output format\n");
return false;
}
if(!io->init(path, start))
return false;
QLinkedList<Plot::LinkedBufferIterator> its = m_rootPlot->iterators(io->defaultFlags());
io->writeHeader(its);
QVector<Plot::LinkedBufferIterator*> to_write(its.size(), 0);
while(1)
{
ros::Time stamp = ros::Time(0);
qFill(to_write, (Plot::LinkedBufferIterator*)0);
// Get a list of iterators with the next timestamp
int i = 0;
for(QLinkedList<Plot::LinkedBufferIterator>::iterator it = its.begin(); it != its.end(); ++it, ++i)
{
Plot::LinkedBufferIterator& buf_it = *it;
if(!buf_it.isValid())
continue;
const Plot::DataPoint& point = *buf_it;
if(point.time < stamp || stamp == ros::Time(0))
{
qFill(to_write, (Plot::LinkedBufferIterator*)0);
to_write[i] = &buf_it;
stamp = point.time;
}
else if(point.time == stamp)
to_write[i] = &buf_it;
}
if(stamp == ros::Time(0))
break;
if(end != ros::Time(0) && stamp > end)
break;
if(stamp >= start)
io->writeData(stamp, to_write);
// Advance all used iterators
Q_FOREACH(Plot::LinkedBufferIterator* it, to_write)
{
if(!it)
continue;
++(*it);
}
}
delete io;
return true;
}
示例12: registerFeature
bool Layer::registerFeature( const QString& geom_id, PalGeometry *userGeom, double label_x, double label_y, const QString &labelText,
double labelPosX, double labelPosY, bool fixedPos, double angle, bool fixedAngle,
int xQuadOffset, int yQuadOffset, double xOffset, double yOffset, bool alwaysShow, double repeatDistance )
{
if ( geom_id.isEmpty() || label_x < 0 || label_y < 0 )
return false;
mMutex.lock();
if ( hashtable->contains( geom_id ) )
{
mMutex.unlock();
//A feature with this id already exists. Don't throw an exception as sometimes,
//the same feature is added twice (dateline split with otf-reprojection)
return false;
}
// Split MULTI GEOM and Collection in simple geometries
const GEOSGeometry *the_geom = userGeom->getGeosGeometry();
Feature* f = new Feature( this, geom_id, userGeom, label_x, label_y );
if ( fixedPos )
{
f->setFixedPosition( labelPosX, labelPosY );
}
if ( xQuadOffset != 0 || yQuadOffset != 0 )
{
f->setQuadOffset( xQuadOffset, yQuadOffset );
}
if ( xOffset != 0.0 || yOffset != 0.0 )
{
f->setPosOffset( xOffset, yOffset );
}
if ( fixedAngle )
{
f->setFixedAngle( angle );
}
// use layer-level defined rotation, but not if position fixed
if ( !fixedPos && angle != 0.0 )
{
f->setFixedAngle( angle );
}
f->setRepeatDistance( repeatDistance );
f->setAlwaysShow( alwaysShow );
bool first_feat = true;
double geom_size = -1, biggest_size = -1;
FeaturePart* biggest_part = NULL;
// break the (possibly multi-part) geometry into simple geometries
QLinkedList<const GEOSGeometry*>* simpleGeometries = unmulti( the_geom );
if ( simpleGeometries == NULL ) // unmulti() failed?
{
mMutex.unlock();
throw InternalException::UnknownGeometry();
}
GEOSContextHandle_t geosctxt = geosContext();
while ( simpleGeometries->size() > 0 )
{
const GEOSGeometry* geom = simpleGeometries->takeFirst();
// ignore invalid geometries (e.g. polygons with self-intersecting rings)
if ( GEOSisValid_r( geosctxt, geom ) != 1 ) // 0=invalid, 1=valid, 2=exception
{
// std::cerr << "ignoring invalid feature " << geom_id << std::endl;
continue;
}
int type = GEOSGeomTypeId_r( geosctxt, geom );
if ( type != GEOS_POINT && type != GEOS_LINESTRING && type != GEOS_POLYGON )
{
mMutex.unlock();
throw InternalException::UnknownGeometry();
}
FeaturePart* fpart = new FeaturePart( f, geom );
// ignore invalid geometries
if (( type == GEOS_LINESTRING && fpart->nbPoints < 2 ) ||
( type == GEOS_POLYGON && fpart->nbPoints < 3 ) )
{
delete fpart;
continue;
}
// polygons: reorder coordinates
if ( type == GEOS_POLYGON && reorderPolygon( fpart->nbPoints, fpart->x, fpart->y ) != 0 )
{
delete fpart;
continue;
}
if ( mMode == LabelPerFeature && ( type == GEOS_POLYGON || type == GEOS_LINESTRING ) )
{
if ( type == GEOS_LINESTRING )
//.........这里部分代码省略.........
示例13: qSort
/*!
* @desc collects groups of concurrent items in the offset range
*/
QList< QLinkedList<QxtScheduleInternalItem *> > QxtScheduleViewPrivate::findConcurrentItems(const int from, const int to) const
{
QList< QLinkedList<QxtScheduleInternalItem *> > allConcurrentItems;
QList<QxtScheduleInternalItem *> allItemsSorted = m_Items;
if(m_Items.size() == 0)
return allConcurrentItems;
qSort(allItemsSorted.begin(), allItemsSorted.end(), qxtScheduleItemLessThan);
int startItem = 0;
int endItem = allItemsSorted.size() - 1;
//find the startitem that interferes with our range
for (int i = 0; i < allItemsSorted.size(); i++)
{
if (i > 0)
{
if (!(allItemsSorted.at(i - 1)->visualEndTableOffset() >= allItemsSorted.at(i)->visualStartTableOffset()
&& allItemsSorted.at(i - 1)->visualStartTableOffset() <= allItemsSorted.at(i)->visualEndTableOffset()))
startItem = i;
}
if (allItemsSorted.at(i)->visualEndTableOffset() >= from && allItemsSorted.at(i)->visualStartTableOffset() <= to)
break;
}
//find the last item that interferes with our range
for (int i = allItemsSorted.size() - 1; i >= 0 ; i--)
{
if (i < allItemsSorted.size() - 1)
{
if (!(allItemsSorted.at(i + 1)->visualEndTableOffset() >= allItemsSorted.at(i)->visualStartTableOffset()
&& allItemsSorted.at(i + 1)->visualStartTableOffset() <= allItemsSorted.at(i)->visualEndTableOffset()))
endItem = i;
}
if (allItemsSorted.at(i)->visualEndTableOffset() >= from && allItemsSorted.at(i)->visualStartTableOffset() <= to)
break;
}
int startOffset = allItemsSorted.at(startItem)->visualStartTableOffset();
int endOffset = allItemsSorted.at(endItem)->visualEndTableOffset();
/*now we have to populate a list with all items that interfere with our range */
QLinkedList<QxtScheduleInternalItem *> concurrentItems;
for (int iAllItemLoop = startItem; iAllItemLoop <= endItem; iAllItemLoop++)
{
int tempStartOffset = allItemsSorted.at(iAllItemLoop)->visualStartTableOffset();
int tempEndOffset = allItemsSorted.at(iAllItemLoop)->visualEndTableOffset();
if (tempEndOffset >= startOffset && tempStartOffset <= endOffset)
{
if (concurrentItems.size() >= 1)
{
bool bAppend = false;
/*check all items in the list if the current items interfers although the items are ordered by startIndex
*we can loose some of them if the endTime of the last Item is before the endTime of the pre last item
*/
for (QLinkedList<QxtScheduleInternalItem *>::iterator it = concurrentItems.begin(); it != concurrentItems.end(); ++it)
{
int lastStartOffset = (*it)->visualStartTableOffset();
int lastEndOffset = (*it)->visualEndTableOffset();
if (tempEndOffset >= lastStartOffset && tempStartOffset <= lastEndOffset)
{
bAppend = true;
break;
}
}
if (bAppend)
{
concurrentItems.append(allItemsSorted.at(iAllItemLoop));
}
else
{
allConcurrentItems.append(concurrentItems);
concurrentItems.clear();
concurrentItems.append(allItemsSorted.at(iAllItemLoop));
}
}
else
concurrentItems.append(allItemsSorted.at(iAllItemLoop));
if (tempStartOffset < startOffset)
startOffset = tempStartOffset;
if (tempEndOffset > endOffset)
endOffset = tempEndOffset;
}
}
if (concurrentItems.size() > 0)
allConcurrentItems.append(concurrentItems);
//.........这里部分代码省略.........
示例14: mapBoundaryGeos
std::unique_ptr<Problem> Pal::extract( const QgsRectangle &extent, const QgsGeometry &mapBoundary )
{
// to store obstacles
RTree<FeaturePart *, double, 2, double> *obstacles = new RTree<FeaturePart *, double, 2, double>();
std::unique_ptr< Problem > prob = qgis::make_unique< Problem >();
int i, j;
double bbx[4];
double bby[4];
double amin[2];
double amax[2];
int max_p = 0;
LabelPosition *lp = nullptr;
bbx[0] = bbx[3] = amin[0] = prob->bbox[0] = extent.xMinimum();
bby[0] = bby[1] = amin[1] = prob->bbox[1] = extent.yMinimum();
bbx[1] = bbx[2] = amax[0] = prob->bbox[2] = extent.xMaximum();
bby[2] = bby[3] = amax[1] = prob->bbox[3] = extent.yMaximum();
prob->pal = this;
QLinkedList<Feats *> *fFeats = new QLinkedList<Feats *>;
FeatCallBackCtx context;
// prepare map boundary
geos::unique_ptr mapBoundaryGeos( QgsGeos::asGeos( mapBoundary ) );
geos::prepared_unique_ptr mapBoundaryPrepared( GEOSPrepare_r( QgsGeos::getGEOSHandler(), mapBoundaryGeos.get() ) );
context.fFeats = fFeats;
context.obstacles = obstacles;
context.candidates = prob->candidates;
context.mapBoundary = mapBoundaryPrepared.get();
ObstacleCallBackCtx obstacleContext;
obstacleContext.obstacles = obstacles;
obstacleContext.obstacleCount = 0;
// first step : extract features from layers
int previousFeatureCount = 0;
int previousObstacleCount = 0;
QStringList layersWithFeaturesInBBox;
mMutex.lock();
const auto constMLayers = mLayers;
for ( Layer *layer : constMLayers )
{
if ( !layer )
{
// invalid layer name
continue;
}
// only select those who are active
if ( !layer->active() )
continue;
// check for connected features with the same label text and join them
if ( layer->mergeConnectedLines() )
layer->joinConnectedFeatures();
layer->chopFeaturesAtRepeatDistance();
layer->mMutex.lock();
// find features within bounding box and generate candidates list
context.layer = layer;
layer->mFeatureIndex->Search( amin, amax, extractFeatCallback, static_cast< void * >( &context ) );
// find obstacles within bounding box
layer->mObstacleIndex->Search( amin, amax, extractObstaclesCallback, static_cast< void * >( &obstacleContext ) );
layer->mMutex.unlock();
if ( context.fFeats->size() - previousFeatureCount > 0 || obstacleContext.obstacleCount > previousObstacleCount )
{
layersWithFeaturesInBBox << layer->name();
}
previousFeatureCount = context.fFeats->size();
previousObstacleCount = obstacleContext.obstacleCount;
}
mMutex.unlock();
prob->nbLabelledLayers = layersWithFeaturesInBBox.size();
prob->labelledLayersName = layersWithFeaturesInBBox;
if ( fFeats->isEmpty() )
{
delete fFeats;
delete obstacles;
return nullptr;
}
prob->nbft = fFeats->size();
//.........这里部分代码省略.........
示例15: selectCoverArtForTrack
//static
CoverArt CoverArtUtils::selectCoverArtForTrack(
const QString& trackBaseName,
const QString& albumName,
const QLinkedList<QFileInfo>& covers) {
CoverArt art;
art.info.source = CoverInfo::GUESSED;
if (covers.isEmpty()) {
return art;
}
PreferredCoverType bestType = NONE;
const QFileInfo* bestInfo = NULL;
// If there is a single image then we use it unconditionally. Otherwise
// we use the priority order described in PreferredCoverType. Notably,
// if there are multiple image files in the folder we require they match
// one of the name patterns -- otherwise we run the risk of picking an
// arbitrary image that happens to be in the same folder as some of the
// user's music files.
if (covers.size() == 1) {
bestInfo = &covers.first();
} else {
// TODO(XXX) Sort instead so that we can fall-back if one fails to
// open?
foreach (const QFileInfo& file, covers) {
const QString coverBaseName = file.baseName();
if (bestType > TRACK_BASENAME &&
coverBaseName.compare(trackBaseName,
Qt::CaseInsensitive) == 0) {
bestType = TRACK_BASENAME;
bestInfo = &file;
// This is the best type so we know we're done.
break;
} else if (bestType > ALBUM_NAME &&
coverBaseName.compare(albumName,
Qt::CaseInsensitive) == 0) {
bestType = ALBUM_NAME;
bestInfo = &file;
} else if (bestType > COVER &&
coverBaseName.compare(QLatin1String("cover"),
Qt::CaseInsensitive) == 0) {
bestType = COVER;
bestInfo = &file;
} else if (bestType > FRONT &&
coverBaseName.compare(QLatin1String("front"),
Qt::CaseInsensitive) == 0) {
bestType = FRONT;
bestInfo = &file;
} else if (bestType > ALBUM &&
coverBaseName.compare(QLatin1String("album"),
Qt::CaseInsensitive) == 0) {
bestType = ALBUM;
bestInfo = &file;
} else if (bestType > FOLDER &&
coverBaseName.compare(QLatin1String("folder"),
Qt::CaseInsensitive) == 0) {
bestType = FOLDER;
bestInfo = &file;
}
}
}
if (bestInfo != NULL) {
art.image = QImage(bestInfo->filePath());
if (!art.image.isNull()) {
art.info.source = CoverInfo::GUESSED;
art.info.type = CoverInfo::FILE;
// TODO() here we may introduce a duplicate hash code
art.info.hash = CoverArtUtils::calculateHash(art.image);
art.info.coverLocation = bestInfo->fileName();
return art;
}
}
return art;
}