17 #ifndef INC_KY_Kernel_Std_H
18 #define INC_KY_Kernel_Std_H
27 #if !defined(KY_OS_WINCE) && defined(KY_CC_MSVC) && (KY_CC_MSVC >= 1400)
28 #define KY_MSVC_SAFESTRING
33 #if !defined(KY_OS_SYMBIAN) && !defined(KY_CC_RENESAS) && !defined(KY_OS_PS2)
37 #if !defined(KY_OS_SYMBIAN) && !defined(KY_CC_RENESAS) && !defined(KY_OS_PS2) && !defined(KY_CC_SNC)
43 #if defined(KY_OS_WIN32)
44 inline char* KY_CDECL SFitoa(
int val,
char *dest, UPInt destsize,
int radix)
46 #if defined(KY_MSVC_SAFESTRING)
47 _itoa_s(val, dest, destsize, radix);
51 return itoa(val, dest, radix);
55 inline char* SFitoa(
int val,
char* dest,
unsigned int len,
int radix)
69 unsigned int sign = 0;
77 while ((val != 0) && (i < (len - 1 - sign)))
105 dest[i] = (char)(
'0' + cur);
111 dest[i] = (char)(
'0' + cur);
121 for (
unsigned int j = 0; j < i / 2; ++j)
124 dest[j] = dest[i - 1 - j];
125 dest[i - 1 - j] = tmp;
137 inline UPInt KY_CDECL SFstrlen(
const char* str)
142 inline char* KY_CDECL SFstrcpy(
char* dest, UPInt destsize,
const char* src)
144 #if defined(KY_MSVC_SAFESTRING)
145 strcpy_s(dest, destsize, src);
149 return strcpy(dest, src);
155 inline char* KY_CDECL SFstrncpy(
char* dest, UPInt destsize,
const char* src, UPInt count)
157 #if defined(KY_MSVC_SAFESTRING)
158 strncpy_s(dest, destsize, src, count);
162 return strncpy(dest, src, count);
166 inline char * KY_CDECL SFstrcat(
char* dest, UPInt destsize,
const char* src)
168 #if defined(KY_MSVC_SAFESTRING)
169 strcat_s(dest, destsize, src);
173 return strcat(dest, src);
177 inline int KY_CDECL SFstrcmp(
const char* dest,
const char* src)
179 return strcmp(dest, src);
182 inline const char* KY_CDECL SFstrchr(
const char* str,
char c)
184 return strchr(str, c);
187 inline char* KY_CDECL SFstrchr(
char* str,
char c)
189 return strchr(str, c);
192 inline const char* SFstrrchr(
const char* str,
char c)
194 UPInt len = SFstrlen(str);
195 for (UPInt i=len; i>0; i--)
201 inline const UByte* KY_CDECL SFmemrchr(
const UByte* str, UPInt size, UByte c)
203 for (SPInt i = (SPInt)size - 1; i >= 0; i--)
211 inline char* KY_CDECL SFstrrchr(
char* str,
char c)
213 UPInt len = SFstrlen(str);
214 for (UPInt i=len; i>0; i--)
221 double KY_CDECL SFstrtod(
const char*
string,
char** tailptr);
223 inline long KY_CDECL SFstrtol(
const char*
string,
char** tailptr,
int radix)
225 return strtol(
string, tailptr, radix);
228 inline long KY_CDECL SFstrtoul(
const char*
string,
char** tailptr,
int radix)
230 return strtoul(
string, tailptr, radix);
233 inline int KY_CDECL SFstrncmp(
const char* ws1,
const char* ws2, UPInt size)
235 return strncmp(ws1, ws2, size);
238 inline UInt64 KY_CDECL SFstrtouq(
const char *nptr,
char **endptr,
int base)
240 #if defined(KY_CC_MSVC) && !defined(KY_OS_WINCE)
241 return _strtoui64(nptr, endptr, base);
243 return strtoull(nptr, endptr, base);
247 inline SInt64 KY_CDECL SFstrtoq(
const char *nptr,
char **endptr,
int base)
249 #if defined(KY_CC_MSVC) && !defined(KY_OS_WINCE)
250 return _strtoi64(nptr, endptr, base);
252 return strtoll(nptr, endptr, base);
257 inline SInt64 KY_CDECL SFatoq(
const char*
string)
259 #if defined(KY_CC_MSVC) && !defined(KY_OS_WINCE)
260 return _atoi64(
string);
262 return atoll(
string);
266 inline UInt64 KY_CDECL SFatouq(
const char*
string)
268 return SFstrtouq(
string, NULL, 10);
273 int KY_CDECL SFstricmp(
const char* dest,
const char* src);
274 int KY_CDECL SFstrnicmp(
const char* dest,
const char* src, UPInt count);
276 inline UPInt KY_CDECL SFsprintf(
char *dest, UPInt destsize,
const char* format, ...)
279 va_start(argList,format);
281 #if defined(KY_CC_MSVC)
282 #if defined(KY_MSVC_SAFESTRING)
283 ret = _vsnprintf_s(dest, destsize, _TRUNCATE, format, argList);
284 KY_ASSERT(ret != -1);
287 ret = _vsnprintf(dest, destsize - 1, format, argList);
288 KY_ASSERT(ret != -1);
289 dest[destsize-1] = 0;
293 ret = vsprintf(dest, format, argList);
294 KY_ASSERT(ret < destsize);
300 inline UPInt KY_CDECL SFvsprintf(
char *dest, UPInt destsize,
const char * format, va_list argList)
303 #if defined(KY_CC_MSVC)
304 #if defined(KY_MSVC_SAFESTRING)
306 int rv = vsnprintf_s(dest, destsize, _TRUNCATE, format, argList);
309 dest[destsize - 1] =
'\0';
316 int rv = _vsnprintf(dest, destsize - 1, format, argList);
319 dest[destsize-1] = 0;
323 ret = (UPInt)vsprintf(dest, format, argList);
324 KY_ASSERT(ret < destsize);
329 wchar_t* KY_CDECL SFwcscpy(
wchar_t* dest, UPInt destsize,
const wchar_t* src);
330 wchar_t* KY_CDECL SFwcsncpy(
wchar_t* dest, UPInt destsize,
const wchar_t* src, UPInt count);
331 wchar_t* KY_CDECL SFwcscat(
wchar_t* dest, UPInt destsize,
const wchar_t* src);
332 UPInt KY_CDECL SFwcslen(
const wchar_t* str);
333 int KY_CDECL SFwcscmp(
const wchar_t* a,
const wchar_t* b);
334 int KY_CDECL SFwcsicmp(
const wchar_t* a,
const wchar_t* b);
336 inline int KY_CDECL SFwcsicoll(
const wchar_t* a,
const wchar_t* b)
338 #if defined(KY_OS_WIN32) || defined(KY_OS_XBOX) || defined(KY_OS_XBOX360) || defined(KY_OS_WII)
339 #if defined(KY_CC_MSVC) && (KY_CC_MSVC >= 1400)
340 return ::_wcsicoll(a, b);
342 return ::wcsicoll(a, b);
346 return SFwcsicmp(a, b);
350 inline int KY_CDECL SFwcscoll(
const wchar_t* a,
const wchar_t* b)
352 #if defined(KY_OS_WIN32) || defined(KY_OS_XBOX) || defined(KY_OS_XBOX360) || defined(KY_OS_PS3) || defined(KY_OS_WII) || defined(KY_OS_LINUX)
353 return wcscoll(a, b);
356 return SFwcscmp(a, b);
362 inline int KY_CDECL UnicodeCharIs(
const UInt16* table,
wchar_t charCode)
364 unsigned offset = table[charCode >> 8];
365 if (offset == 0)
return 0;
366 if (offset == 1)
return 1;
367 return (table[offset + ((charCode >> 4) & 15)] & (1 << (charCode & 15))) != 0;
370 extern const UInt16 UnicodeAlnumBits[];
371 extern const UInt16 UnicodeAlphaBits[];
372 extern const UInt16 UnicodeDigitBits[];
373 extern const UInt16 UnicodeSpaceBits[];
374 extern const UInt16 UnicodeXDigitBits[];
384 inline int KY_CDECL SFiswalnum (
wchar_t charCode) {
return UnicodeCharIs(UnicodeAlnumBits, charCode); }
385 inline int KY_CDECL SFiswalpha (
wchar_t charCode) {
return UnicodeCharIs(UnicodeAlphaBits, charCode); }
386 inline int KY_CDECL SFiswdigit (
wchar_t charCode) {
return UnicodeCharIs(UnicodeDigitBits, charCode); }
387 inline int KY_CDECL SFiswspace (
wchar_t charCode) {
return UnicodeCharIs(UnicodeSpaceBits, charCode); }
388 inline int KY_CDECL SFiswxdigit(
wchar_t charCode) {
return UnicodeCharIs(UnicodeXDigitBits, charCode); }
398 int KY_CDECL SFtowupper(
wchar_t charCode);
399 int KY_CDECL SFtowlower(
wchar_t charCode);
401 #else // KY_NO_WCTYPE
403 inline int KY_CDECL SFiswspace(
wchar_t c)
405 #if defined(KY_OS_WII) || defined(KY_CC_SNC)
406 return ((c) < 128 ? isspace((
char)c) : 0);
412 inline int KY_CDECL SFiswdigit(
wchar_t c)
414 #if defined(KY_OS_WII) || defined(KY_CC_SNC)
415 return ((c) < 128 ? isdigit((
char)c) : 0);
421 inline int KY_CDECL SFiswxdigit(
wchar_t c)
423 #if defined(KY_OS_WII) || defined(KY_CC_SNC)
424 return ((c) < 128 ? isxdigit((
char)c) : 0);
430 inline int KY_CDECL SFiswalpha(
wchar_t c)
432 #if defined(KY_OS_WII) || defined(KY_CC_SNC)
433 return ((c) < 128 ? isalpha((
char)c) : 0);
439 inline int KY_CDECL SFiswalnum(
wchar_t c)
441 #if defined(KY_OS_WII) || defined(KY_CC_SNC)
442 return ((c) < 128 ? isalnum((
char)c) : 0);
448 inline wchar_t KY_CDECL SFtowlower(
wchar_t c)
450 #if (defined(KY_OS_PS3) && defined(KY_CC_SNC))
451 return (
wchar_t)tolower((
char)c);
453 return (
wchar_t)towlower(c);
457 inline wchar_t SFtowupper(
wchar_t c)
459 #if (defined(KY_OS_PS3) && defined(KY_CC_SNC))
460 return (
wchar_t)toupper((
char)c);
462 return (
wchar_t)towupper(c);
466 #endif // KY_NO_WCTYPE
469 inline int KY_CDECL SFtolower(
int c)
471 return (c >=
'A' && c <=
'Z') ? c -
'A' +
'a' : c;
474 inline int KY_CDECL SFtoupper(
int c)
476 return (c >=
'a' && c <=
'z') ? c -
'a' +
'A' : c;
481 inline double KY_CDECL SFwcstod(
const wchar_t*
string,
wchar_t** tailptr)
483 #if defined(KY_OS_OTHER)
487 UPInt max = SFwcslen(
string);
488 if (max > 63) max = 63;
490 for (UPInt i=0; i < max; i++)
492 c = (
unsigned char)
string[i];
493 buffer[i] = ((c) < 128 ? (
char)c :
'!');
496 return SFstrtod(buffer, &tp);
498 return wcstod(
string, tailptr);
502 inline long KY_CDECL SFwcstol(
const wchar_t*
string,
wchar_t** tailptr,
int radix)
504 #if defined(KY_OS_OTHER)
508 UPInt max = SFwcslen(
string);
509 if (max > 63) max = 63;
511 for (UPInt i=0; i < max; i++)
513 c = (
unsigned char)
string[i];
514 buffer[i] = ((c) < 128 ? (
char)c :
'!');
517 return strtol(buffer, &tp, radix);
519 return wcstol(
string, tailptr, radix);
Definition: gamekitcrowddispersion.h:20