Sort GL extension strings and search to find.
Review URL: https://codereview.chromium.org/12316141
git-svn-id: http://skia.googlecode.com/svn/trunk@7889 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGLExtensions.cpp b/src/gpu/gl/GrGLExtensions.cpp
index 9f31a05..2d87414 100644
--- a/src/gpu/gl/GrGLExtensions.cpp
+++ b/src/gpu/gl/GrGLExtensions.cpp
@@ -9,6 +9,15 @@
#include "gl/GrGLDefines.h"
#include "gl/GrGLUtil.h"
+#include "SkTSearch.h"
+#include "SkTSort.h"
+
+namespace {
+inline int extension_compare(const SkString* a, const SkString* b) {
+ return strcmp(a->c_str(), b->c_str());
+}
+}
+
bool GrGLExtensions::init(GrGLBinding binding,
GrGLGetStringProc getString,
GrGLGetStringiProc getStringi,
@@ -64,16 +73,16 @@
}
GrAssert(i == extensionCnt);
}
+ SkTSearchCompareLTFunctor<SkString, extension_compare> cmp;
+ SkTQSort(&fStrings.front(), &fStrings.back(), cmp);
return true;
}
bool GrGLExtensions::has(const char* ext) const {
- // TODO: Sort the extensions and binary search.
- int count = fStrings.count();
- for (int i = 0; i < count; ++i) {
- if (fStrings[i].equals(ext)) {
- return true;
- }
- }
- return false;
+ SkString extensionStr(ext);
+ int idx = SkTSearch<SkString, extension_compare>(&fStrings.front(),
+ fStrings.count(),
+ extensionStr,
+ sizeof(SkString));
+ return idx >= 0;
}