aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/core/SkTSearch.h6
-rw-r--r--src/core/SkRegion_path.cpp3
-rw-r--r--src/core/SkTSearch.cpp64
-rw-r--r--src/gpu/gl/GrGLCaps.cpp6
-rw-r--r--tests/SortTest.cpp5
-rw-r--r--tools/skdiff_main.cpp22
6 files changed, 15 insertions, 91 deletions
diff --git a/include/core/SkTSearch.h b/include/core/SkTSearch.h
index 1a4eb80fc5..df0146700e 100644
--- a/include/core/SkTSearch.h
+++ b/include/core/SkTSearch.h
@@ -167,10 +167,8 @@ private:
char fStorage[STORAGE+1];
};
-extern "C" {
- typedef int (*SkQSortCompareProc)(const void*, const void*);
- void SkQSort(void* base, size_t count, size_t elemSize, SkQSortCompareProc);
-}
+// Helper when calling qsort with a compare proc that has typed its arguments
+#define SkCastForQSort(compare) reinterpret_cast<int (*)(const void*, const void*)>(compare)
#endif
diff --git a/src/core/SkRegion_path.cpp b/src/core/SkRegion_path.cpp
index 62acc32f25..85fd6bfb43 100644
--- a/src/core/SkRegion_path.cpp
+++ b/src/core/SkRegion_path.cpp
@@ -462,8 +462,7 @@ bool SkRegion::getBoundaryPath(SkPath* path) const {
edge[0].set(r.fLeft, r.fBottom, r.fTop);
edge[1].set(r.fRight, r.fTop, r.fBottom);
}
- SkQSort(edges.begin(), edges.count(), sizeof(Edge),
- (SkQSortCompareProc)EdgeProc);
+ qsort(edges.begin(), edges.count(), sizeof(Edge), SkCastForQSort(EdgeProc));
int count = edges.count();
Edge* start = edges.begin();
diff --git a/src/core/SkTSearch.cpp b/src/core/SkTSearch.cpp
index ccdcecb9b9..a48820d01d 100644
--- a/src/core/SkTSearch.cpp
+++ b/src/core/SkTSearch.cpp
@@ -113,67 +113,3 @@ SkAutoAsciiToLC::~SkAutoAsciiToLC()
}
}
-//////////////////////////////////////////////////////////////////////////////
-
-#define SK_QSortTempSize 16
-
-static inline void sk_qsort_swap(char a[], char b[], size_t elemSize)
-{
- char tmp[SK_QSortTempSize];
-
- while (elemSize > 0)
- {
- size_t size = elemSize;
- if (size > SK_QSortTempSize)
- size = SK_QSortTempSize;
- elemSize -= size;
-
- memcpy(tmp, a, size);
- memcpy(a, b, size);
- memcpy(b, tmp, size);
- a += size;
- b += size;
- }
-}
-
-static void SkQSort_Partition(char* first, char* last, size_t elemSize, SkQSortCompareProc compare)
-{
- char* left = first;
- char* rite = last;
- char* pivot = left;
-
- while (left <= rite)
- {
- while (left < last && compare(left, pivot) < 0)
- left += elemSize;
- while (first < rite && compare(rite, pivot) > 0)
- rite -= elemSize;
- if (left <= rite)
- {
- if (left < rite)
- {
- SkASSERT(compare(left, rite) >= 0);
- sk_qsort_swap(left, rite, elemSize);
- }
- left += elemSize;
- rite -= elemSize;
- }
- }
- if (first < rite)
- SkQSort_Partition(first, rite, elemSize, compare);
- if (left < last)
- SkQSort_Partition(left, last, elemSize, compare);
-}
-
-void SkQSort(void* base, size_t count, size_t elemSize, SkQSortCompareProc compare)
-{
- SkASSERT(base);
- SkASSERT(compare);
- SkASSERT(elemSize > 0);
-
- if (count <= 1)
- return;
-
- SkQSort_Partition((char*)base, (char*)base + (count - 1) * elemSize, elemSize, compare);
-}
-
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index 797abb4d80..6031c7359d 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -200,12 +200,10 @@ void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo) {
(int*)&fMSAACoverageModes[0]);
// The NV driver seems to return the modes already sorted but the
// spec doesn't require this. So we sort.
- SkQSortCompareProc compareProc =
- reinterpret_cast<SkQSortCompareProc>(&coverage_mode_compare);
- SkQSort(&fMSAACoverageModes[0],
+ qsort(&fMSAACoverageModes[0],
count,
sizeof(MSAACoverageMode),
- compareProc);
+ SkCastForQSort(coverage_mode_compare));
}
}
if (kNone_MSFBOType != fMSFBOType) {
diff --git a/tests/SortTest.cpp b/tests/SortTest.cpp
index 9b4642fe2a..166cff280b 100644
--- a/tests/SortTest.cpp
+++ b/tests/SortTest.cpp
@@ -7,7 +7,6 @@
*/
#include "Test.h"
#include "SkRandom.h"
-#include "SkTSearch.h"
#include "SkTSort.h"
extern "C" {
@@ -42,10 +41,6 @@ static void TestSort(skiatest::Reporter* reporter) {
int count = rand.nextRangeU(1, SK_ARRAY_COUNT(array));
rand_array(rand, array, count);
- SkQSort(array, count, sizeof(int), compare_int);
- check_sort(reporter, "Quick", array, count);
-
- rand_array(rand, array, count);
SkTHeapSort<int>(array, count);
check_sort(reporter, "Heap", array, count);
}
diff --git a/tools/skdiff_main.cpp b/tools/skdiff_main.cpp
index 6fb3326c0c..f0930beb96 100644
--- a/tools/skdiff_main.cpp
+++ b/tools/skdiff_main.cpp
@@ -572,8 +572,6 @@ static void create_diff_images (DiffMetricProc dmp,
DiffSummary* summary) {
SkASSERT(!baseDir.isEmpty());
SkASSERT(!comparisonDir.isEmpty());
- SkQSortCompareProc sortFileProc =
- (SkQSortCompareProc)compare_file_name_metrics;
FileArray baseFiles;
FileArray comparisonFiles;
@@ -583,12 +581,12 @@ static void create_diff_images (DiffMetricProc dmp,
&comparisonFiles);
if (!baseFiles.isEmpty()) {
- SkQSort(baseFiles.begin(), baseFiles.count(),
- sizeof(SkString*), sortFileProc);
+ qsort(baseFiles.begin(), baseFiles.count(), sizeof(SkString*),
+ SkCastForQSort(compare_file_name_metrics));
}
if (!comparisonFiles.isEmpty()) {
- SkQSort(comparisonFiles.begin(), comparisonFiles.count(),
- sizeof(SkString*), sortFileProc);
+ qsort(comparisonFiles.begin(), comparisonFiles.count(),
+ sizeof(SkString*), SkCastForQSort(compare_file_name_metrics));
}
int i = 0;
@@ -1002,7 +1000,7 @@ argv0, argv0);
int main (int argc, char ** argv) {
DiffMetricProc diffProc = compute_diff_pmcolor;
- SkQSortCompareProc sortProc = (SkQSortCompareProc) compare_diff_metrics;
+ int (*sortProc)(const void*, const void*) = SkCastForQSort(compare_diff_metrics);
// Maximum error tolerated in any one color channel in any one pixel before
// a difference is reported.
@@ -1045,15 +1043,15 @@ int main (int argc, char ** argv) {
continue;
}
if (!strcmp(argv[i], "--sortbymismatch")) {
- sortProc = (SkQSortCompareProc) compare_diff_mean_mismatches;
+ sortProc = SkCastForQSort(compare_diff_mean_mismatches);
continue;
}
if (!strcmp(argv[i], "--sortbymaxmismatch")) {
- sortProc = (SkQSortCompareProc) compare_diff_max_mismatches;
+ sortProc = SkCastForQSort(compare_diff_max_mismatches);
continue;
}
if (!strcmp(argv[i], "--weighted")) {
- sortProc = (SkQSortCompareProc) compare_diff_weighted;
+ sortProc = SkCastForQSort(compare_diff_weighted);
continue;
}
if (!strcmp(argv[i], "--chromium-release")) {
@@ -1158,8 +1156,8 @@ int main (int argc, char ** argv) {
summary.print();
if (differences.count()) {
- SkQSort(differences.begin(), differences.count(),
- sizeof(DiffRecord*), sortProc);
+ qsort(differences.begin(), differences.count(),
+ sizeof(DiffRecord*), sortProc);
}
if (generateDiffs) {