Bike-X  0.8
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
OVR_Std.h
Go to the documentation of this file.
1 /************************************************************************************
2 
3 PublicHeader: OVR.h
4 Filename : OVR_Std.h
5 Content : Standard C function interface
6 Created : September 19, 2012
7 Notes :
8 
9 Copyright : Copyright 2014 Oculus VR, Inc. All Rights reserved.
10 
11 Licensed under the Oculus VR Rift SDK License Version 3.1 (the "License");
12 you may not use the Oculus VR Rift SDK except in compliance with the License,
13 which is provided at the time of installation or download, or which
14 otherwise accompanies this software in either electronic or hard copy form.
15 
16 You may obtain a copy of the License at
17 
18 http://www.oculusvr.com/licenses/LICENSE-3.1
19 
20 Unless required by applicable law or agreed to in writing, the Oculus VR SDK
21 distributed under the License is distributed on an "AS IS" BASIS,
22 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23 See the License for the specific language governing permissions and
24 limitations under the License.
25 
26 ************************************************************************************/
27 
28 #ifndef OVR_Std_h
29 #define OVR_Std_h
30 
31 #include "OVR_Types.h"
32 #include <stdarg.h> // for va_list args
33 #include <string.h>
34 #include <stdio.h>
35 #include <stdlib.h>
36 #include <ctype.h>
37 
38 #if !defined(OVR_OS_WINCE) && defined(OVR_CC_MSVC) && (OVR_CC_MSVC >= 1400)
39 #define OVR_MSVC_SAFESTRING
40 #include <errno.h>
41 #endif
42 
43 // Wide-char funcs
44 #include <wchar.h>
45 #include <wctype.h>
46 
47 namespace OVR {
48 
49 #if defined(OVR_OS_WIN32)
50 inline char* OVR_CDECL OVR_itoa(int val, char *dest, UPInt destsize, int radix)
51 {
52 #if defined(OVR_MSVC_SAFESTRING)
53  _itoa_s(val, dest, destsize, radix);
54  return dest;
55 #else
56  OVR_UNUSED(destsize);
57  return itoa(val, dest, radix);
58 #endif
59 }
60 #else // OVR_OS_WIN32
61 inline char* OVR_itoa(int val, char* dest, unsigned int len, int radix)
62 {
63  if (val == 0)
64  {
65  if (len > 1)
66  {
67  dest[0] = '0';
68  dest[1] = '\0';
69  }
70  return dest;
71  }
72 
73  int cur = val;
74  unsigned int i = 0;
75  unsigned int sign = 0;
76 
77  if (val < 0)
78  {
79  val = -val;
80  sign = 1;
81  }
82 
83  while ((val != 0) && (i < (len - 1 - sign)))
84  {
85  cur = val % radix;
86  val /= radix;
87 
88  if (radix == 16)
89  {
90  switch(cur)
91  {
92  case 10:
93  dest[i] = 'a';
94  break;
95  case 11:
96  dest[i] = 'b';
97  break;
98  case 12:
99  dest[i] = 'c';
100  break;
101  case 13:
102  dest[i] = 'd';
103  break;
104  case 14:
105  dest[i] = 'e';
106  break;
107  case 15:
108  dest[i] = 'f';
109  break;
110  default:
111  dest[i] = (char)('0' + cur);
112  break;
113  }
114  }
115  else
116  {
117  dest[i] = (char)('0' + cur);
118  }
119  ++i;
120  }
121 
122  if (sign)
123  {
124  dest[i++] = '-';
125  }
126 
127  for (unsigned int j = 0; j < i / 2; ++j)
128  {
129  char tmp = dest[j];
130  dest[j] = dest[i - 1 - j];
131  dest[i - 1 - j] = tmp;
132  }
133  dest[i] = '\0';
134 
135  return dest;
136 }
137 
138 #endif
139 
140 
141 // String functions
142 
143 inline UPInt OVR_CDECL OVR_strlen(const char* str)
144 {
145  return strlen(str);
146 }
147 
148 inline char* OVR_CDECL OVR_strcpy(char* dest, UPInt destsize, const char* src)
149 {
150 #if defined(OVR_MSVC_SAFESTRING)
151  strcpy_s(dest, destsize, src);
152  return dest;
153 #else
154  OVR_UNUSED(destsize);
155  return strcpy(dest, src);
156 #endif
157 }
158 
159 inline char* OVR_CDECL OVR_strncpy(char* dest, UPInt destsize, const char* src, UPInt count)
160 {
161 #if defined(OVR_MSVC_SAFESTRING)
162  strncpy_s(dest, destsize, src, count);
163  return dest;
164 #else
165  OVR_UNUSED(destsize);
166  return strncpy(dest, src, count);
167 #endif
168 }
169 
170 inline char * OVR_CDECL OVR_strcat(char* dest, UPInt destsize, const char* src)
171 {
172 #if defined(OVR_MSVC_SAFESTRING)
173  strcat_s(dest, destsize, src);
174  return dest;
175 #else
176  OVR_UNUSED(destsize);
177  return strcat(dest, src);
178 #endif
179 }
180 
181 inline int OVR_CDECL OVR_strcmp(const char* dest, const char* src)
182 {
183  return strcmp(dest, src);
184 }
185 
186 inline const char* OVR_CDECL OVR_strchr(const char* str, char c)
187 {
188  return strchr(str, c);
189 }
190 
191 inline char* OVR_CDECL OVR_strchr(char* str, char c)
192 {
193  return strchr(str, c);
194 }
195 
196 inline const char* OVR_strrchr(const char* str, char c)
197 {
198  UPInt len = OVR_strlen(str);
199  for (UPInt i=len; i>0; i--)
200  if (str[i]==c)
201  return str+i;
202  return 0;
203 }
204 
205 inline const UByte* OVR_CDECL OVR_memrchr(const UByte* str, UPInt size, UByte c)
206 {
207  for (SPInt i = (SPInt)size - 1; i >= 0; i--)
208  {
209  if (str[i] == c)
210  return str + i;
211  }
212  return 0;
213 }
214 
215 inline char* OVR_CDECL OVR_strrchr(char* str, char c)
216 {
217  UPInt len = OVR_strlen(str);
218  for (UPInt i=len; i>0; i--)
219  if (str[i]==c)
220  return str+i;
221  return 0;
222 }
223 
224 
225 double OVR_CDECL OVR_strtod(const char* string, char** tailptr);
226 
227 inline long OVR_CDECL OVR_strtol(const char* string, char** tailptr, int radix)
228 {
229  return strtol(string, tailptr, radix);
230 }
231 
232 inline long OVR_CDECL OVR_strtoul(const char* string, char** tailptr, int radix)
233 {
234  return strtoul(string, tailptr, radix);
235 }
236 
237 inline int OVR_CDECL OVR_strncmp(const char* ws1, const char* ws2, UPInt size)
238 {
239  return strncmp(ws1, ws2, size);
240 }
241 
242 inline UInt64 OVR_CDECL OVR_strtouq(const char *nptr, char **endptr, int base)
243 {
244 #if defined(OVR_CC_MSVC) && !defined(OVR_OS_WINCE)
245  return _strtoui64(nptr, endptr, base);
246 #else
247  return strtoull(nptr, endptr, base);
248 #endif
249 }
250 
251 inline SInt64 OVR_CDECL OVR_strtoq(const char *nptr, char **endptr, int base)
252 {
253 #if defined(OVR_CC_MSVC) && !defined(OVR_OS_WINCE)
254  return _strtoi64(nptr, endptr, base);
255 #else
256  return strtoll(nptr, endptr, base);
257 #endif
258 }
259 
260 
261 inline SInt64 OVR_CDECL OVR_atoq(const char* string)
262 {
263 #if defined(OVR_CC_MSVC) && !defined(OVR_OS_WINCE)
264  return _atoi64(string);
265 #else
266  return atoll(string);
267 #endif
268 }
269 
270 inline UInt64 OVR_CDECL OVR_atouq(const char* string)
271 {
272  return OVR_strtouq(string, NULL, 10);
273 }
274 
275 
276 // Implemented in GStd.cpp in platform-specific manner.
277 int OVR_CDECL OVR_stricmp(const char* dest, const char* src);
278 int OVR_CDECL OVR_strnicmp(const char* dest, const char* src, UPInt count);
279 
280 inline UPInt OVR_CDECL OVR_sprintf(char *dest, UPInt destsize, const char* format, ...)
281 {
282  va_list argList;
283  va_start(argList,format);
284  UPInt ret;
285 #if defined(OVR_CC_MSVC)
286  #if defined(OVR_MSVC_SAFESTRING)
287  ret = _vsnprintf_s(dest, destsize, _TRUNCATE, format, argList);
288  OVR_ASSERT(ret != -1);
289  #else
290  OVR_UNUSED(destsize);
291  ret = _vsnprintf(dest, destsize - 1, format, argList); // -1 for space for the null character
292  OVR_ASSERT(ret != -1);
293  dest[destsize-1] = 0;
294  #endif
295 #else
296  OVR_UNUSED(destsize);
297  ret = vsprintf(dest, format, argList);
298  OVR_ASSERT(ret < destsize);
299 #endif
300  va_end(argList);
301  return ret;
302 }
303 
304 inline UPInt OVR_CDECL OVR_vsprintf(char *dest, UPInt destsize, const char * format, va_list argList)
305 {
306  UPInt ret;
307 #if defined(OVR_CC_MSVC)
308  #if defined(OVR_MSVC_SAFESTRING)
309  dest[0] = '\0';
310  int rv = vsnprintf_s(dest, destsize, _TRUNCATE, format, argList);
311  if (rv == -1)
312  {
313  dest[destsize - 1] = '\0';
314  ret = destsize - 1;
315  }
316  else
317  ret = (UPInt)rv;
318  #else
319  OVR_UNUSED(destsize);
320  int rv = _vsnprintf(dest, destsize - 1, format, argList);
321  OVR_ASSERT(rv != -1);
322  ret = (UPInt)rv;
323  dest[destsize-1] = 0;
324  #endif
325 #else
326  OVR_UNUSED(destsize);
327  ret = (UPInt)vsprintf(dest, format, argList);
328  OVR_ASSERT(ret < destsize);
329 #endif
330  return ret;
331 }
332 
333 // Returns the number of characters in the formatted string.
334 inline UPInt OVR_CDECL OVR_vscprintf(const char * format, va_list argList)
335 {
336  UPInt ret;
337 #if defined(OVR_CC_MSVC)
338  ret = (UPInt) _vscprintf(format, argList);
339 #else
340  ret = (UPInt) vsnprintf(NULL, 0, format, argList);
341 #endif
342  return ret;
343 }
344 
345 
346 wchar_t* OVR_CDECL OVR_wcscpy(wchar_t* dest, UPInt destsize, const wchar_t* src);
347 wchar_t* OVR_CDECL OVR_wcsncpy(wchar_t* dest, UPInt destsize, const wchar_t* src, UPInt count);
348 wchar_t* OVR_CDECL OVR_wcscat(wchar_t* dest, UPInt destsize, const wchar_t* src);
349 UPInt OVR_CDECL OVR_wcslen(const wchar_t* str);
350 int OVR_CDECL OVR_wcscmp(const wchar_t* a, const wchar_t* b);
351 int OVR_CDECL OVR_wcsicmp(const wchar_t* a, const wchar_t* b);
352 
353 inline int OVR_CDECL OVR_wcsicoll(const wchar_t* a, const wchar_t* b)
354 {
355 #if defined(OVR_OS_WIN32)
356 #if defined(OVR_CC_MSVC) && (OVR_CC_MSVC >= 1400)
357  return ::_wcsicoll(a, b);
358 #else
359  return ::wcsicoll(a, b);
360 #endif
361 #else
362  // not supported, use regular wcsicmp
363  return OVR_wcsicmp(a, b);
364 #endif
365 }
366 
367 inline int OVR_CDECL OVR_wcscoll(const wchar_t* a, const wchar_t* b)
368 {
369 #if defined(OVR_OS_WIN32) || defined(OVR_OS_LINUX)
370  return wcscoll(a, b);
371 #else
372  // not supported, use regular wcscmp
373  return OVR_wcscmp(a, b);
374 #endif
375 }
376 
377 #ifndef OVR_NO_WCTYPE
378 
379 inline int OVR_CDECL UnicodeCharIs(const UInt16* table, wchar_t charCode)
380 {
381  unsigned offset = table[charCode >> 8];
382  if (offset == 0) return 0;
383  if (offset == 1) return 1;
384  return (table[offset + ((charCode >> 4) & 15)] & (1 << (charCode & 15))) != 0;
385 }
386 
387 extern const UInt16 UnicodeAlnumBits[];
388 extern const UInt16 UnicodeAlphaBits[];
389 extern const UInt16 UnicodeDigitBits[];
390 extern const UInt16 UnicodeSpaceBits[];
391 extern const UInt16 UnicodeXDigitBits[];
392 
393 // Uncomment if necessary
394 //extern const UInt16 UnicodeCntrlBits[];
395 //extern const UInt16 UnicodeGraphBits[];
396 //extern const UInt16 UnicodeLowerBits[];
397 //extern const UInt16 UnicodePrintBits[];
398 //extern const UInt16 UnicodePunctBits[];
399 //extern const UInt16 UnicodeUpperBits[];
400 
401 inline int OVR_CDECL OVR_iswalnum (wchar_t charCode) { return UnicodeCharIs(UnicodeAlnumBits, charCode); }
402 inline int OVR_CDECL OVR_iswalpha (wchar_t charCode) { return UnicodeCharIs(UnicodeAlphaBits, charCode); }
403 inline int OVR_CDECL OVR_iswdigit (wchar_t charCode) { return UnicodeCharIs(UnicodeDigitBits, charCode); }
404 inline int OVR_CDECL OVR_iswspace (wchar_t charCode) { return UnicodeCharIs(UnicodeSpaceBits, charCode); }
405 inline int OVR_CDECL OVR_iswxdigit(wchar_t charCode) { return UnicodeCharIs(UnicodeXDigitBits, charCode); }
406 
407 // Uncomment if necessary
408 //inline int OVR_CDECL OVR_iswcntrl (wchar_t charCode) { return UnicodeCharIs(UnicodeCntrlBits, charCode); }
409 //inline int OVR_CDECL OVR_iswgraph (wchar_t charCode) { return UnicodeCharIs(UnicodeGraphBits, charCode); }
410 //inline int OVR_CDECL OVR_iswlower (wchar_t charCode) { return UnicodeCharIs(UnicodeLowerBits, charCode); }
411 //inline int OVR_CDECL OVR_iswprint (wchar_t charCode) { return UnicodeCharIs(UnicodePrintBits, charCode); }
412 //inline int OVR_CDECL OVR_iswpunct (wchar_t charCode) { return UnicodeCharIs(UnicodePunctBits, charCode); }
413 //inline int OVR_CDECL OVR_iswupper (wchar_t charCode) { return UnicodeCharIs(UnicodeUpperBits, charCode); }
414 
415 int OVR_CDECL OVR_towupper(wchar_t charCode);
416 int OVR_CDECL OVR_towlower(wchar_t charCode);
417 
418 #else // OVR_NO_WCTYPE
419 
420 inline int OVR_CDECL OVR_iswspace(wchar_t c)
421 {
422  return iswspace(c);
423 }
424 
425 inline int OVR_CDECL OVR_iswdigit(wchar_t c)
426 {
427  return iswdigit(c);
428 }
429 
430 inline int OVR_CDECL OVR_iswxdigit(wchar_t c)
431 {
432  return iswxdigit(c);
433 }
434 
435 inline int OVR_CDECL OVR_iswalpha(wchar_t c)
436 {
437  return iswalpha(c);
438 }
439 
440 inline int OVR_CDECL OVR_iswalnum(wchar_t c)
441 {
442  return iswalnum(c);
443 }
444 
445 inline wchar_t OVR_CDECL OVR_towlower(wchar_t c)
446 {
447  return (wchar_t)towlower(c);
448 }
449 
450 inline wchar_t OVR_towupper(wchar_t c)
451 {
452  return (wchar_t)towupper(c);
453 }
454 
455 #endif // OVR_NO_WCTYPE
456 
457 // ASCII versions of tolower and toupper. Don't use "char"
458 inline int OVR_CDECL OVR_tolower(int c)
459 {
460  return (c >= 'A' && c <= 'Z') ? c - 'A' + 'a' : c;
461 }
462 
463 inline int OVR_CDECL OVR_toupper(int c)
464 {
465  return (c >= 'a' && c <= 'z') ? c - 'a' + 'A' : c;
466 }
467 
468 
469 
470 inline double OVR_CDECL OVR_wcstod(const wchar_t* string, wchar_t** tailptr)
471 {
472 #if defined(OVR_OS_OTHER)
473  OVR_UNUSED(tailptr);
474  char buffer[64];
475  char* tp = NULL;
476  UPInt max = OVR_wcslen(string);
477  if (max > 63) max = 63;
478  unsigned char c = 0;
479  for (UPInt i=0; i < max; i++)
480  {
481  c = (unsigned char)string[i];
482  buffer[i] = ((c) < 128 ? (char)c : '!');
483  }
484  buffer[max] = 0;
485  return OVR_strtod(buffer, &tp);
486 #else
487  return wcstod(string, tailptr);
488 #endif
489 }
490 
491 inline long OVR_CDECL OVR_wcstol(const wchar_t* string, wchar_t** tailptr, int radix)
492 {
493 #if defined(OVR_OS_OTHER)
494  OVR_UNUSED(tailptr);
495  char buffer[64];
496  char* tp = NULL;
497  UPInt max = OVR_wcslen(string);
498  if (max > 63) max = 63;
499  unsigned char c = 0;
500  for (UPInt i=0; i < max; i++)
501  {
502  c = (unsigned char)string[i];
503  buffer[i] = ((c) < 128 ? (char)c : '!');
504  }
505  buffer[max] = 0;
506  return strtol(buffer, &tp, radix);
507 #else
508  return wcstol(string, tailptr, radix);
509 #endif
510 }
511 
512 } // OVR
513 
514 #endif // OVR_Std_h
const UInt16 UnicodeXDigitBits[]
Definition: OVR_Std.cpp:466
long OVR_CDECL OVR_wcstol(const wchar_t *string, wchar_t **tailptr, int radix)
Definition: OVR_Std.h:491
UPInt OVR_CDECL OVR_vsprintf(char *dest, UPInt destsize, const char *format, va_list argList)
Definition: OVR_Std.h:304
wchar_t *OVR_CDECL OVR_wcsncpy(wchar_t *dest, UPInt destsize, const wchar_t *src, UPInt count)
Definition: OVR_Std.cpp:83
int OVR_CDECL OVR_tolower(int c)
Definition: OVR_Std.h:458
#define OVR_CDECL
int OVR_CDECL OVR_towupper(wchar_t charCode)
Definition: OVR_Std.cpp:998
#define NULL
uint64_t UInt64
Definition: OVR_Types.h:255
__END_NAMESPACE_STD __BEGIN_NAMESPACE_STD char * strcpy(char *__restrict __dest, const char *__restrict __src) __THROW __nonnull((1
UInt64 OVR_CDECL OVR_atouq(const char *string)
Definition: OVR_Std.h:270
uint16_t UInt16
Definition: OVR_Types.h:251
int OVR_CDECL OVR_toupper(int c)
Definition: OVR_Std.h:463
int OVR_CDECL OVR_towlower(wchar_t charCode)
Definition: OVR_Std.cpp:1016
__END_NAMESPACE_STD char char __BEGIN_NAMESPACE_STD size_t strlen(const char *__s) __THROW __attribute_pure__ __nonnull((1))
#define OVR_UNUSED(a)
double OVR_CDECL OVR_wcstod(const wchar_t *string, wchar_t **tailptr)
Definition: OVR_Std.h:470
size_t UPInt
Definition: OVR_Types.h:218
int OVR_CDECL OVR_wcscoll(const wchar_t *a, const wchar_t *b)
Definition: OVR_Std.h:367
int OVR_CDECL OVR_iswdigit(wchar_t charCode)
Definition: OVR_Std.h:403
int OVR_CDECL OVR_iswalnum(wchar_t charCode)
Definition: OVR_Std.h:401
SInt64 OVR_CDECL OVR_atoq(const char *string)
Definition: OVR_Std.h:261
uint8_t UByte
Definition: OVR_Types.h:249
int OVR_CDECL OVR_iswspace(wchar_t charCode)
Definition: OVR_Std.h:404
__END_NAMESPACE_STD __BEGIN_NAMESPACE_STD char char * strncpy(char *__restrict __dest, const char *__restrict __src, size_t __n) __THROW __nonnull((1
char *OVR_CDECL OVR_strcpy(char *dest, UPInt destsize, const char *src)
Definition: OVR_Std.h:148
long OVR_CDECL OVR_strtol(const char *string, char **tailptr, int radix)
Definition: OVR_Std.h:227
SInt64 OVR_CDECL OVR_strtoq(const char *nptr, char **endptr, int base)
Definition: OVR_Std.h:251
__END_NAMESPACE_STD __BEGIN_NAMESPACE_STD char char char char int strcmp(const char *__s1, const char *__s2) __THROW __attribute_pure__ __nonnull((1
int OVR_CDECL OVR_wcscmp(const wchar_t *a, const wchar_t *b)
Definition: OVR_Std.cpp:135
wchar_t *OVR_CDECL OVR_wcscpy(wchar_t *dest, UPInt destsize, const wchar_t *src)
Definition: OVR_Std.cpp:66
int OVR_CDECL OVR_iswalpha(wchar_t charCode)
Definition: OVR_Std.h:402
__BEGIN_NAMESPACE_STD char * strchr(const char *__s, int __c) __THROW __attribute_pure__ __nonnull((1))
#define OVR_ASSERT(p)
__END_NAMESPACE_STD __BEGIN_NAMESPACE_STD char char char char int int strncmp(const char *__s1, const char *__s2, size_t __n) __THROW __attribute_pure__ __nonnull((1
const UByte *OVR_CDECL OVR_memrchr(const UByte *str, UPInt size, UByte c)
Definition: OVR_Std.h:205
int64_t SInt64
Definition: OVR_Types.h:254
int OVR_CDECL OVR_wcsicoll(const wchar_t *a, const wchar_t *b)
Definition: OVR_Std.h:353
int OVR_CDECL OVR_strncmp(const char *ws1, const char *ws2, UPInt size)
Definition: OVR_Std.h:237
wchar_t *OVR_CDECL OVR_wcscat(wchar_t *dest, UPInt destsize, const wchar_t *src)
Definition: OVR_Std.cpp:105
int OVR_CDECL UnicodeCharIs(const UInt16 *table, wchar_t charCode)
Definition: OVR_Std.h:379
char * OVR_itoa(int val, char *dest, unsigned int len, int radix)
Definition: OVR_Std.h:61
int OVR_CDECL OVR_stricmp(const char *a, const char *b)
Definition: OVR_Std.cpp:38
char *OVR_CDECL OVR_strcat(char *dest, UPInt destsize, const char *src)
Definition: OVR_Std.h:170
int OVR_CDECL OVR_strcmp(const char *dest, const char *src)
Definition: OVR_Std.h:181
char *OVR_CDECL OVR_strncpy(char *dest, UPInt destsize, const char *src, UPInt count)
Definition: OVR_Std.h:159
const char * OVR_strrchr(const char *str, char c)
Definition: OVR_Std.h:196
const UInt16 UnicodeAlphaBits[]
Definition: OVR_Std.cpp:357
const char *OVR_CDECL OVR_strchr(const char *str, char c)
Definition: OVR_Std.h:186
const UInt16 UnicodeSpaceBits[]
Definition: OVR_Std.cpp:444
int OVR_CDECL OVR_wcsicmp(const wchar_t *a, const wchar_t *b)
Definition: OVR_Std.cpp:162
ptrdiff_t SPInt
Definition: OVR_Types.h:219
int OVR_CDECL OVR_iswxdigit(wchar_t charCode)
Definition: OVR_Std.h:405
UPInt OVR_CDECL OVR_sprintf(char *dest, UPInt destsize, const char *format,...)
Definition: OVR_Std.h:280
UPInt OVR_CDECL OVR_wcslen(const wchar_t *str)
Definition: OVR_Std.cpp:123
int OVR_CDECL OVR_strnicmp(const char *a, const char *b, UPInt count)
Definition: OVR_Std.cpp:52
__END_NAMESPACE_STD __BEGIN_NAMESPACE_STD char char char * strcat(char *__restrict __dest, const char *__restrict __src) __THROW __nonnull((1
UPInt OVR_CDECL OVR_vscprintf(const char *format, va_list argList)
Definition: OVR_Std.h:334
UInt64 OVR_CDECL OVR_strtouq(const char *nptr, char **endptr, int base)
Definition: OVR_Std.h:242
double OVR_CDECL OVR_strtod(const char *string, char **tailptr)
Definition: OVR_Std.cpp:196
UPInt OVR_CDECL OVR_strlen(const char *str)
Definition: OVR_Std.h:143
long OVR_CDECL OVR_strtoul(const char *string, char **tailptr, int radix)
Definition: OVR_Std.h:232
const UInt16 UnicodeAlnumBits[]
Definition: OVR_Std.cpp:302
const UInt16 UnicodeDigitBits[]
Definition: OVR_Std.cpp:412