16 #ifndef INCLUDE_NN_NLIB_CSTRING_H_ 17 #define INCLUDE_NN_NLIB_CSTRING_H_ 25 #if defined(n_EXPORTS) 26 #undef NLIB_VIS_PUBLIC 27 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT 28 #elif defined(nx_misc_EXPORTS) 29 #undef NLIB_VIS_PUBLIC 30 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT 63 return strcmp(s1, s2);
66 return wcscmp(s1, s2);
69 for (; *s1 == *s2; ++s1, ++s2) {
72 return *s1 < *s2 ? -1 : 1;
75 for (; *s1 == *s2; ++s1, ++s2) {
78 return *s1 < *s2 ? -1 : 1;
82 return strncmp(s1, s2, n);
85 return wcsncmp(s1, s2, n);
88 for (; n > 0; ++s1, ++s2, --n) {
90 return *s1 < *s2 ? -1 : 1;
98 for (; n > 0; ++s1, ++s2, --n) {
100 return *s1 < *s2 ? -1 : 1;
121 template<
class T,
size_t N>
123 return StrCpy(&dest[0], N, src);
142 template<
class T,
size_t N>
144 return StrNcpy(&dest[0], N, src, n);
147 template<
class T,
size_t N>
149 return StrCat(&dest[0], N, src);
152 template<
class T,
size_t N>
154 return StrNcat(&dest[0], N, src, n);
159 VsnPrintfFallback(
char* buf,
size_t size, _Printf_format_string_
const char* fmt,
163 VsnPrintfFallback(
wchar_t* buf,
size_t size, _Printf_format_string_
const wchar_t* fmt,
175 NLIB_ALWAYS_INLINE int VsnPrintfFallback(
char (&buf)[N], _Printf_format_string_
const char* fmt,
177 return VsnPrintfFallback(buf, N, fmt, args);
180 inline int SnPrintfFallback(
char* buf,
size_t size, _Printf_format_string_
const char* fmt,
184 int rval = VsnPrintfFallback(buf, size, fmt, args);
191 SnPrintfFallback(
char (&buf)[N], _Printf_format_string_
const char* fmt, ...)
NLIB_NOEXCEPT {
206 inline int SnPrintfFallback(
wchar_t* buf,
size_t size, _Printf_format_string_
const wchar_t* fmt,
217 SnPrintfFallback(
wchar_t (&buf)[N], _Printf_format_string_
const wchar_t* fmt, ...)
NLIB_NOEXCEPT {
232 inline int SnPrintfFallback(
nlib_utf16_t* buf,
size_t size,
258 inline int SnPrintfFallback(
nlib_utf32_t* buf,
size_t size,
277 inline int VsnPrintf(
char* buf,
size_t size, _Printf_format_string_
const char* fmt,
281 if (e != 0) errno = e;
282 return (e == 0) ?
static_cast<int>(count) : -1;
285 inline int VsnPrintf(
wchar_t* buf,
size_t size, _Printf_format_string_
const wchar_t* fmt,
289 if (e != 0) errno = e;
290 return (e == 0) ?
static_cast<int>(count) : -1;
295 #if NLIB_WCHAR_SIZE == 2 298 reinterpret_cast<const wchar_t*>(fmt), args);
299 if (e != 0) errno = e;
300 return (e == 0) ?
static_cast<int>(count) : -1;
308 #if NLIB_WCHAR_SIZE == 4 311 reinterpret_cast<const wchar_t*>(fmt), args);
312 if (e != 0) errno = e;
313 return (e == 0) ?
static_cast<int>(count) : -1;
319 template<
size_t N,
class CH>
329 int rval =
VsnPrintf(buf, size, fmt, args);
334 template<
size_t N,
class CH>
345 #if defined(_MSC_VER) 346 #if defined(n_EXPORTS) 347 #undef NLIB_VIS_PUBLIC 348 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT 349 #elif defined(nx_misc_EXPORTS) 350 #undef NLIB_VIS_PUBLIC 351 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT 355 #endif // INCLUDE_NN_NLIB_CSTRING_H_
errno_t StrCpy(T(&dest)[N], const T *src) noexcept
上記関数のテンプレートオーバーロードです。
int VsnPrintf(CH(&buf)[N], const CH *fmt, va_list args) noexcept
上記関数のテンプレートオーバーロードです。
int VsnPrintfFallback(char *buf, size_t size, const char *fmt, va_list args) noexcept
VsnPrintfのフォールバックです。
int StrCmp(const nlib_utf32_t *s1, const nlib_utf32_t *s2) noexcept
UTF-32文字列をstrcmp()と同様に比較します。
int StrNcmp(const nlib_utf32_t *s1, const nlib_utf32_t *s2, size_t n) noexcept
UTF-32文字列をstrncmp()と同様に比較します。
int SnPrintf(CH(&buf)[N], const CH *fmt,...) noexcept
上記関数のテンプレートオーバーロードです。
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
errno_t CodePointCount(const wchar_t *str, size_t *count) noexcept
nlib_wcscplen()をラップします。
errno_t StrNcat(T(&dest)[N], const T *src, size_t n) noexcept
上記関数のテンプレートオーバーロードです。
size_t StrLen(const wchar_t *str) noexcept
nlib_wcslen()をラップします。
errno_t StrNcpy(T(&dest)[N], const T *src, size_t n) noexcept
上記関数のテンプレートオーバーロードです。
errno_t StrCat(T(&dest)[N], const T *src) noexcept
上記関数のテンプレートオーバーロードです。