27 #define SMTG_CPP11_CAT_PRIVATE_DONT_USE(a,b) a ## b
28 #define STR16(x) SMTG_CPP11_CAT_PRIVATE_DONT_USE(u,x)
31 #define STR16(x) Steinberg::ConstStringTable::instance ()->getString (x)
35 #define STR(x) STR16(x)
36 #define tStrBufferSize(buffer) (sizeof(buffer)/sizeof(Steinberg::tchar))
40 #define tStrBufferSize(buffer) (sizeof(buffer))
43#define str8BufferSize(buffer) (sizeof(buffer)/sizeof(Steinberg::char8))
44#define str16BufferSize(buffer) (sizeof(buffer)/sizeof(Steinberg::char16))
47#define FORMAT_INT64A "I64d"
48#define FORMAT_UINT64A "I64u"
50#elif SMTG_OS_MACOS || SMTG_OS_LINUX
51#define FORMAT_INT64A "lld"
52#define FORMAT_UINT64A "llu"
53#define stricmp strcasecmp
54#define strnicmp strncasecmp
58#define FORMAT_INT64W STR(FORMAT_INT64A)
59#define FORMAT_UINT64W STR(FORMAT_UINT64A)
61#define FORMAT_INT64 FORMAT_INT64W
62#define FORMAT_UINT64 FORMAT_UINT64W
64#define FORMAT_INT64 FORMAT_INT64A
65#define FORMAT_UINT64 FORMAT_UINT64A
73#define ENDLINE_A "\r\n"
74#define ENDLINE_W STR ("\r\n")
77#define ENDLINE_W STR ("\r")
80#define ENDLINE_W STR ("\n")
84#define ENDLINE ENDLINE_W
86#define ENDLINE ENDLINE_A
89#if SMTG_OS_WINDOWS && !defined(__GNUC__) && defined(_MSC_VER) && (_MSC_VER < 1900)
90#define stricmp _stricmp
91#define strnicmp _strnicmp
92#define snprintf _snprintf
98static SMTG_CONSTEXPR
const tchar kEmptyString[] = { 0 };
99static SMTG_CONSTEXPR
const char8 kEmptyString8[] = { 0 };
100static SMTG_CONSTEXPR
const char16 kEmptyString16[] = { 0 };
103static SMTG_CONSTEXPR
const tchar kInfiniteSymbol[] = { 0x221E, 0 };
105static SMTG_CONSTEXPR
const tchar*
const kInfiniteSymbol = STR (
"oo");
110inline SMTG_CONSTEXPR14 int32 _tstrlen (
const T* wcs)
117 return (int32) (eos - wcs - 1);
120inline SMTG_CONSTEXPR14 int32 tstrlen (
const tchar* str) {
return _tstrlen (str);}
121inline SMTG_CONSTEXPR14 int32 strlen8 (
const char8* str) {
return _tstrlen (str);}
122inline SMTG_CONSTEXPR14 int32 strlen16 (
const char16* str) {
return _tstrlen (str);}
126inline SMTG_CONSTEXPR14 int32 _tstrcmp (
const T* src,
const T* dst)
128 while (*src == *dst && *dst)
134 if (*src == 0 && *dst == 0)
140 return (int32) (*src - *dst);
143inline SMTG_CONSTEXPR14 int32 tstrcmp (
const tchar* src,
const tchar* dst) {
return _tstrcmp (src, dst);}
144inline SMTG_CONSTEXPR14 int32 strcmp8 (
const char8* src,
const char8* dst) {
return _tstrcmp (src, dst);}
145inline SMTG_CONSTEXPR14 int32 strcmp16 (
const char16* src,
const char16* dst) {
return _tstrcmp (src, dst);}
148inline SMTG_CONSTEXPR14 int32 strcmpT (
const T* first,
const T* last);
151inline SMTG_CONSTEXPR14 int32 strcmpT<char8> (
const char8* first,
const char8* last) {
return _tstrcmp (first, last); }
154inline SMTG_CONSTEXPR14 int32 strcmpT<char16> (
const char16* first,
const char16* last) {
return _tstrcmp (first, last); }
158inline SMTG_CONSTEXPR14 int32 _tstrncmp (
const T* first,
const T* last, uint32 count)
163 while (--count && *first && *first == *last)
169 if (*first == 0 && *last == 0)
175 return (int32) (*first - *last);
178inline SMTG_CONSTEXPR14 int32 tstrncmp (
const tchar* first,
const tchar* last, uint32 count) {
return _tstrncmp (first, last, count);}
179inline SMTG_CONSTEXPR14 int32 strncmp8 (
const char8* first,
const char8* last, uint32 count) {
return _tstrncmp (first, last, count);}
180inline SMTG_CONSTEXPR14 int32 strncmp16 (
const char16* first,
const char16* last, uint32 count) {
return _tstrncmp (first, last, count);}
183inline SMTG_CONSTEXPR14 int32 strncmpT (
const T* first,
const T* last, uint32 count);
186inline SMTG_CONSTEXPR14 int32 strncmpT<char8> (
const char8* first,
const char8* last, uint32 count) {
return _tstrncmp (first, last, count); }
189inline SMTG_CONSTEXPR14 int32 strncmpT<char16> (
const char16* first,
const char16* last, uint32 count) {
return _tstrncmp (first, last, count); }
193inline SMTG_CONSTEXPR14 T* _tstrcpy (T* dst,
const T* src)
196 while ((*cp++ = *src++) != 0)
200inline SMTG_CONSTEXPR14 tchar* tstrcpy (tchar* dst,
const tchar* src) {
return _tstrcpy (dst, src);}
201inline SMTG_CONSTEXPR14 char8* strcpy8 (char8* dst,
const char8* src) {
return _tstrcpy (dst, src);}
202inline SMTG_CONSTEXPR14 char16* strcpy16 (char16* dst,
const char16* src) {
return _tstrcpy (dst, src);}
206inline SMTG_CONSTEXPR14 T* _tstrncpy (T* dest,
const T* source, uint32 count)
209 while (count && (*dest++ = *source++) != 0)
220inline SMTG_CONSTEXPR14 tchar* tstrncpy (tchar* dest,
const tchar* source, uint32 count) {
return _tstrncpy (dest, source, count);}
221inline SMTG_CONSTEXPR14 char8* strncpy8 (char8* dest,
const char8* source, uint32 count) {
return _tstrncpy (dest, source, count);}
222inline SMTG_CONSTEXPR14 char16* strncpy16 (char16* dest,
const char16* source, uint32 count) {
return _tstrncpy (dest, source, count);}
226inline SMTG_CONSTEXPR14 T* _tstrcat (T* dst,
const T* src)
233 while ((*cp++ = *src++) != 0)
239inline SMTG_CONSTEXPR14 tchar* tstrcat (tchar* dst,
const tchar* src) {
return _tstrcat (dst, src); }
240inline SMTG_CONSTEXPR14 char8* strcat8 (char8* dst,
const char8* src) {
return _tstrcat (dst, src); }
241inline SMTG_CONSTEXPR14 char16* strcat16 (char16* dst,
const char16* src) {
return _tstrcat (dst, src); }
244inline SMTG_CONSTEXPR14
void str8ToStr16 (char16* dst,
const char8* src, int32 n = -1)
255#if BYTEORDER == kBigEndian
256 char8* pChr = (char8*)&dst[i];
260 dst[i] =
static_cast<char16
> (src[i]);
275inline SMTG_CONSTEXPR14
bool FIDStringsEqual (FIDString id1, FIDString id2)
277 return (id1 && id2) ? (strcmp8 (id1, id2) == 0) :
false;
280static SMTG_CONSTEXPR
const uint32 kPrintfBufferSize = 4096;
284inline wchar_t* wscast (char16* s) {
static_assert (
sizeof (wchar_t) ==
sizeof (char16),
"");
return reinterpret_cast<wchar_t*
> (s); }
285inline char16* wscast (
wchar_t* s) {
static_assert (
sizeof (wchar_t) ==
sizeof (char16),
"");
return reinterpret_cast<char16*
> (s);}
286inline const wchar_t* wscast (
const char16* s) {
static_assert (
sizeof (wchar_t) ==
sizeof (char16),
"");
return reinterpret_cast<const wchar_t*
> (s); }
287inline const char16* wscast (
const wchar_t* s) {
static_assert (
sizeof (wchar_t) ==
sizeof (char16),
"");
return reinterpret_cast<const char16*
> (s); }