Browse Source

Internals: using ImToUpper() since std one does too many things.

As a bonus side-effect may remove reliance on ctype.h (will see if CI complains)
ocornut 2 years ago
parent
commit
bc918404fe
3 changed files with 6 additions and 7 deletions
  1. 5 6
      imgui.cpp
  2. 1 0
      imgui_internal.h
  3. 0 1
      imgui_widgets.cpp

+ 5 - 6
imgui.cpp

@@ -860,7 +860,6 @@ CODE
 #include "imgui_internal.h"
 #include "imgui_internal.h"
 
 
 // System includes
 // System includes
-#include <ctype.h>      // toupper
 #include <stdio.h>      // vsnprintf, sscanf, printf
 #include <stdio.h>      // vsnprintf, sscanf, printf
 #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
 #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
 #include <stddef.h>     // intptr_t
 #include <stddef.h>     // intptr_t
@@ -1613,14 +1612,14 @@ ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c,
 int ImStricmp(const char* str1, const char* str2)
 int ImStricmp(const char* str1, const char* str2)
 {
 {
     int d;
     int d;
-    while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; }
+    while ((d = ImToUpper(*str2) - ImToUpper(*str1)) == 0 && *str1) { str1++; str2++; }
     return d;
     return d;
 }
 }
 
 
 int ImStrnicmp(const char* str1, const char* str2, size_t count)
 int ImStrnicmp(const char* str1, const char* str2, size_t count)
 {
 {
     int d = 0;
     int d = 0;
-    while (count > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; count--; }
+    while (count > 0 && (d = ImToUpper(*str2) - ImToUpper(*str1)) == 0 && *str1) { str1++; str2++; count--; }
     return d;
     return d;
 }
 }
 
 
@@ -1687,14 +1686,14 @@ const char* ImStristr(const char* haystack, const char* haystack_end, const char
     if (!needle_end)
     if (!needle_end)
         needle_end = needle + strlen(needle);
         needle_end = needle + strlen(needle);
 
 
-    const char un0 = (char)toupper(*needle);
+    const char un0 = (char)ImToUpper(*needle);
     while ((!haystack_end && *haystack) || (haystack_end && haystack < haystack_end))
     while ((!haystack_end && *haystack) || (haystack_end && haystack < haystack_end))
     {
     {
-        if (toupper(*haystack) == un0)
+        if (ImToUpper(*haystack) == un0)
         {
         {
             const char* b = needle + 1;
             const char* b = needle + 1;
             for (const char* a = haystack + 1; b < needle_end; a++, b++)
             for (const char* a = haystack + 1; b < needle_end; a++, b++)
-                if (toupper(*a) != toupper(*b))
+                if (ImToUpper(*a) != ImToUpper(*b))
                     break;
                     break;
             if (b == needle_end)
             if (b == needle_end)
                 return haystack;
                 return haystack;

+ 1 - 0
imgui_internal.h

@@ -335,6 +335,7 @@ IMGUI_API const char*   ImStristr(const char* haystack, const char* haystack_end
 IMGUI_API void          ImStrTrimBlanks(char* str);
 IMGUI_API void          ImStrTrimBlanks(char* str);
 IMGUI_API const char*   ImStrSkipBlank(const char* str);
 IMGUI_API const char*   ImStrSkipBlank(const char* str);
 IM_MSVC_RUNTIME_CHECKS_OFF
 IM_MSVC_RUNTIME_CHECKS_OFF
+static inline char      ImToUpper(char c)               { return (c >= 'a' && c <= 'z') ? c &= ~32 : c; }
 static inline bool      ImCharIsBlankA(char c)          { return c == ' ' || c == '\t'; }
 static inline bool      ImCharIsBlankA(char c)          { return c == ' ' || c == '\t'; }
 static inline bool      ImCharIsBlankW(unsigned int c)  { return c == ' ' || c == '\t' || c == 0x3000; }
 static inline bool      ImCharIsBlankW(unsigned int c)  { return c == ' ' || c == '\t' || c == 0x3000; }
 IM_MSVC_RUNTIME_CHECKS_RESTORE
 IM_MSVC_RUNTIME_CHECKS_RESTORE

+ 0 - 1
imgui_widgets.cpp

@@ -41,7 +41,6 @@ Index of this file:
 #include "imgui_internal.h"
 #include "imgui_internal.h"
 
 
 // System includes
 // System includes
-#include <ctype.h>      // toupper
 #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
 #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
 #include <stddef.h>     // intptr_t
 #include <stddef.h>     // intptr_t
 #else
 #else