[WINCE] Add wtf_bsearch()
authorparoga@webkit.org <paroga@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 27 May 2013 01:25:52 +0000 (01:25 +0000)
committerparoga@webkit.org <paroga@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 27 May 2013 01:25:52 +0000 (01:25 +0000)
https://bugs.webkit.org/show_bug.cgi?id=116528

Reviewed by Darin Adler.

r149833 introduced usage of ::bsearch(), which does not exist on Windwos CE.
Add our own implementation of this function as wtf_bsearch and define
bsearch as wtf_bsearch to fix compilation on Windwos CE.

* wtf/StdLibExtras.h:
(wtf_bsearch):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@150729 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/StdLibExtras.h

index 7d59fafc17085561d7de3bf1f019e9ae0878f0b9..7550f1719a3fbf73dd152884064730b62f3d0970 100644 (file)
@@ -1,3 +1,17 @@
+2013-05-26  Patrick Gansterer  <paroga@webkit.org>
+
+        [WINCE] Add wtf_bsearch()
+        https://bugs.webkit.org/show_bug.cgi?id=116528
+
+        Reviewed by Darin Adler.
+
+        r149833 introduced usage of ::bsearch(), which does not exist on Windwos CE.
+        Add our own implementation of this function as wtf_bsearch and define
+        bsearch as wtf_bsearch to fix compilation on Windwos CE.
+
+        * wtf/StdLibExtras.h:
+        (wtf_bsearch):
+
 2013-05-26  Kent Tamura  <tkent@chromium.org>
 
         Remove ENABLE_CALENDAR_PICKER
index 605f98ec82c51f1c27bd737204f10266634dcdbe..e4dbe7cdbcfbece7df354d948071788bacf05b50 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2013 Patrick Gansterer <paroga@paroga.com>
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -261,6 +262,31 @@ inline ArrayElementType* approximateBinarySearch(const ArrayType& array, size_t
 
 } // namespace WTF
 
+#if OS(WINCE)
+// Windows CE CRT has does not implement bsearch().
+inline void* wtf_bsearch(const void* key, const void* base, size_t count, size_t size, int (*compare)(const void *, const void *))
+{
+    const char* first = static_cast<const char*>(base);
+
+    while (count) {
+        size_t pos = (count - 1) >> 1;
+        const char* item = first + pos * size;
+        int compareResult = compare(item, key);
+        if (!compareResult)
+            return const_cast<char*>(item);
+        if (compareResult < 0) {
+            count -= (pos + 1);
+            first += (pos + 1) * size;
+        } else
+            count = pos;
+    }
+
+    return 0;
+}
+
+#define bsearch(key, base, count, size, compare) wtf_bsearch(key, base, count, size, compare)
+#endif
+
 // This version of placement new omits a 0 check.
 enum NotNullTag { NotNull };
 inline void* operator new(size_t, NotNullTag, void* location)