gwnavruntime/kernel/SF_Std.h Source File

SF_Std.h
Go to the documentation of this file.
1 /*
2  * Copyright 2016 Autodesk, Inc. All rights reserved.
3  * Use of this software is subject to the terms of the Autodesk license agreement and any attachments or Appendices thereto provided at the time of installation or download,
4  * or which otherwise accompanies this software in either electronic or hard copy form, or which is signed by you and accepted by Autodesk.
5  */
6 
7 #pragma once
8 
10 #include <ctype.h>
11 #include <stdarg.h>
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <string.h>
15 
16 #if defined(KY_CC_MSVC)
17 #define KY_MSVC_SAFESTRING
18 #include <errno.h>
19 #endif
20 
21 // Wide-char funcs
22 #include <wchar.h>
23 #include <wctype.h>
24 
25 namespace Kaim
26 {
27 
28 inline UPInt SFstrlen(const char* str) { return strlen(str); }
29 
30 inline char* SFstrcpy(char* dest, UPInt destsize, const char* src)
31 {
32 #if defined(KY_MSVC_SAFESTRING)
33  strcpy_s(dest, destsize, src);
34  return dest;
35 #else
36  KY_UNUSED(destsize);
37  return strcpy(dest, src);
38 #endif
39 }
40 
41 // Note that when using strncpy no null-character is implicitly appended at the end of destination if source is longer than num
42 // (thus, in this case, destination may not be a null terminated C string).
43 inline char* SFstrncpy(char* dest, UPInt destsize, const char* src, UPInt count)
44 {
45 #if defined(KY_MSVC_SAFESTRING)
46  strncpy_s(dest, destsize, src, count);
47  return dest;
48 #else
49  KY_UNUSED(destsize);
50  return strncpy(dest, src, count);
51 #endif
52 }
53 
54 inline int SFstrcmp(const char* dest, const char* src) { return strcmp(dest, src); }
55 
56 inline char* SFstrchr(char* str, char c) { return strchr(str, c); }
57 
58 inline const char* SFstrrchr(const char* str, char c)
59 {
60  UPInt len = SFstrlen(str);
61  for (UPInt i = len; i > 0; i--)
62  {
63  if (str[i] == c)
64  return str + i;
65  }
66  return 0;
67 }
68 
69 inline char* SFstrrchr(char* str, char c)
70 {
71  UPInt len = SFstrlen(str);
72  for (UPInt i = len; i > 0; i--)
73  {
74  if (str[i] == c)
75  return str + i;
76  }
77  return 0;
78 }
79 
80 inline long SFstrtol(const char* string, char** tailptr, int radix) { return strtol(string, tailptr, radix); }
81 
82 inline long SFstrtoul(const char* string, char** tailptr, int radix) { return strtoul(string, tailptr, radix); }
83 
84 inline int SFstrncmp(const char* ws1, const char* ws2, UPInt size) { return strncmp(ws1, ws2, size); }
85 
86 inline UInt64 SFstrtouq(const char* nptr, char** endptr, int base)
87 {
88 #if defined(KY_CC_MSVC)
89  return _strtoui64(nptr, endptr, base);
90 #else
91  return strtoull(nptr, endptr, base);
92 #endif
93 }
94 
95 inline SInt64 SFstrtoq(const char* nptr, char** endptr, int base)
96 {
97 #if defined(KY_CC_MSVC)
98  return _strtoi64(nptr, endptr, base);
99 #else
100  return strtoll(nptr, endptr, base);
101 #endif
102 }
103 
104 inline SInt64 SFatoq(const char* string)
105 {
106 #if defined(KY_CC_MSVC)
107  return _atoi64(string);
108 #else
109  return atoll(string);
110 #endif
111 }
112 
113 inline UInt64 SFatouq(const char* string) { return SFstrtouq(string, NULL, 10); }
114 
115 int SFstricmp(const char* dest, const char* src);
116 
117 int SFstrnicmp(const char* dest, const char* src, UPInt count);
118 
119 inline UPInt SFsprintf(char* dest, UPInt destsize, const char* format, ...)
120 {
121  va_list argList;
122  va_start(argList, format);
123  UPInt ret = vsnprintf(dest, destsize, format, argList);
124  va_end(argList);
125  return ret;
126 }
127 
128 inline UPInt SFvsprintf(char* dest, UPInt destsize, const char* format, va_list argList) { return vsnprintf(dest, destsize, format, argList); }
129 
130 inline wchar_t SFtowlower(wchar_t c) { return (wchar_t)towlower(c); }
131 
132 inline wchar_t SFtowupper(wchar_t c) { return (wchar_t)towupper(c); }
133 
134 // ASCII versions of tolower and toupper. Don't use "char"
135 inline int SFtolower(int c) { return (c >= 'A' && c <= 'Z') ? c - 'A' + 'a' : c; }
136 
137 }
std::int64_t SInt64
int64_t
Definition: SF_Types.h:132
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
std::uint64_t UInt64
uint64_t
Definition: SF_Types.h:138