Changeset View
Changeset View
Standalone View
Standalone View
src/kitemviews/kfileitemmodel.cpp
Show First 20 Lines • Show All 992 Lines • ▼ Show 20 Line(s) | 1697 | if (m_sortDirsFirst || m_sortRole == SizeRole) { | |||
---|---|---|---|---|---|
1704 | } | 1704 | } | ||
1705 | } | 1705 | } | ||
1706 | 1706 | | |||
1707 | result = sortRoleCompare(a, b, collator); | 1707 | result = sortRoleCompare(a, b, collator); | ||
1708 | 1708 | | |||
1709 | return (sortOrder() == Qt::AscendingOrder) ? result < 0 : result > 0; | 1709 | return (sortOrder() == Qt::AscendingOrder) ? result < 0 : result > 0; | ||
1710 | } | 1710 | } | ||
1711 | 1711 | | |||
1712 | /** | | |||
1713 | * Helper class for KFileItemModel::sort(). | | |||
1714 | */ | | |||
1715 | class KFileItemModelLessThan | | |||
1716 | { | | |||
1717 | public: | | |||
1718 | KFileItemModelLessThan(const KFileItemModel* model, const QCollator& collator) : | | |||
1719 | m_model(model), | | |||
1720 | m_collator(collator) | | |||
1721 | { | | |||
1722 | } | | |||
1723 | | ||||
1724 | KFileItemModelLessThan(const KFileItemModelLessThan& other) : | | |||
1725 | m_model(other.m_model), | | |||
1726 | m_collator() | | |||
1727 | { | | |||
1728 | m_collator.setCaseSensitivity(other.m_collator.caseSensitivity()); | | |||
1729 | m_collator.setIgnorePunctuation(other.m_collator.ignorePunctuation()); | | |||
1730 | m_collator.setLocale(other.m_collator.locale()); | | |||
1731 | m_collator.setNumericMode(other.m_collator.numericMode()); | | |||
1732 | } | | |||
1733 | | ||||
1734 | ~KFileItemModelLessThan() = default; | | |||
1735 | //We do not delete m_model as the pointer was passed from outside ant it will be deleted elsewhere. | | |||
1736 | | ||||
1737 | KFileItemModelLessThan& operator=(const KFileItemModelLessThan& other) | | |||
1738 | { | | |||
1739 | m_model = other.m_model; | | |||
1740 | m_collator = other.m_collator; | | |||
1741 | return *this; | | |||
1742 | } | | |||
1743 | | ||||
1744 | bool operator()(const KFileItemModel::ItemData* a, const KFileItemModel::ItemData* b) const | | |||
1745 | { | | |||
1746 | return m_model->lessThan(a, b, m_collator); | | |||
1747 | } | | |||
1748 | | ||||
1749 | private: | | |||
1750 | const KFileItemModel* m_model; | | |||
1751 | QCollator m_collator; | | |||
1752 | }; | | |||
1753 | | ||||
1754 | void KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator begin, | 1712 | void KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator begin, | ||
1755 | QList<KFileItemModel::ItemData*>::iterator end) const | 1713 | QList<KFileItemModel::ItemData*>::iterator end) const | ||
1756 | { | 1714 | { | ||
1757 | KFileItemModelLessThan lessThan(this, m_collator); | 1715 | auto lambdaLessThan = [&] (const KFileItemModel::ItemData* a, const KFileItemModel::ItemData* b) | ||
1716 | { | ||||
1717 | return lessThan(a, b, m_collator); | ||||
1718 | }; | ||||
apol: it's "lambda". | |||||
1758 | 1719 | | |||
1759 | if (m_sortRole == NameRole) { | 1720 | if (m_sortRole == NameRole) { | ||
1760 | // Sorting by name can be expensive, in particular if natural sorting is | 1721 | // Sorting by name can be expensive, in particular if natural sorting is | ||
1761 | // enabled. Use all CPU cores to speed up the sorting process. | 1722 | // enabled. | ||
1762 | static const int numberOfThreads = QThread::idealThreadCount(); | 1723 | parallelMergeSort(begin, end, lambdaLessThan, numberOfThreads); | ||
1763 | parallelMergeSort(begin, end, lessThan, numberOfThreads); | | |||
1764 | } else { | 1724 | } else { | ||
1765 | // Sorting by other roles is quite fast. Use only one thread to prevent | 1725 | // Sorting by other roles is quite fast. Use only one thread to prevent | ||
1766 | // problems caused by non-reentrant comparison functions, see | 1726 | // problems caused by non-reentrant comparison functions, see | ||
1767 | // https://bugs.kde.org/show_bug.cgi?id=312679 | 1727 | // https://bugs.kde.org/show_bug.cgi?id=312679 | ||
1768 | mergeSort(begin, end, lessThan); | 1728 | mergeSort(begin, end, lambdaLessThan); | ||
1769 | } | 1729 | } | ||
1770 | } | 1730 | } | ||
1771 | 1731 | | |||
1772 | int KFileItemModel::sortRoleCompare(const ItemData* a, const ItemData* b, const QCollator& collator) const | 1732 | int KFileItemModel::sortRoleCompare(const ItemData* a, const ItemData* b, const QCollator& collator) const | ||
1773 | { | 1733 | { | ||
1774 | const KFileItem& itemA = a->item; | 1734 | const KFileItem& itemA = a->item; | ||
1775 | const KFileItem& itemB = b->item; | 1735 | const KFileItem& itemB = b->item; | ||
1776 | 1736 | | |||
▲ Show 20 Lines • Show All 635 Lines • Show Last 20 Lines |
it's "lambda".