nlib
|
Cリンケージを持つnlib
の最も基本的なAPIです。
[詳解]
ファイル | |
ファイル | Platform.h |
基本的なAPIがCベースで宣言されています。 | |
クラス | |
struct | nlib_mq_attr |
メッセージキューの設定や現在の状態を格納する構造体です。 [詳解] | |
マクロ定義 | |
#define | RSIZE_MAX 0x7FFFFFFFL |
size_t の最大値よりいくらか小さい値が定義されています。 [詳解] | |
型定義 | |
typedef int | errno_t |
int のtypedef で、戻り値としてPOSIXのエラー値を返すことを示します。 | |
typedef int32_t | nlib_long_compatible_t |
long と互換性のある整数型がtypedef されています。 | |
typedef uint32_t | nlib_ulong_compatible_t |
unsigned long と互換性のある整数型がtypedef されています。 | |
関数 | |
const char * | nlib_error_string (errno_t e) |
nlib のエラー値に対応する文字列リテラルを返します。 [詳解] | |
unsigned int | nlib_get_native_last_error (void) |
最後に発生したネイティブのエラーコードを返します。 [詳解] | |
errno_t | nlib_memcpy (void *s1, size_t s1max, const void *s2, size_t n) |
N1078のmemcpy_sに相当する実装です。 [詳解] | |
errno_t | nlib_memmove (void *s1, size_t s1max, const void *s2, size_t n) |
N1078のmemmove_sに相当する実装です。 [詳解] | |
errno_t | nlib_memset (void *buf, int ch, size_t n) |
内部でmemset(buf, ch, n)相当の関数を呼び出します。 [詳解] | |
int | nlib_memcmp (const void *buf1, const void *buf2, size_t n) |
buf1 とbuf2 を先頭からn バイト分unsigned charとして比較します。 [詳解] | |
const void * | nlib_memchr (const void *s, int c, size_t n) |
メモリ領域[s, s + n) の先頭からn バイトを検索して、バイトc があるポインタを返します。 [詳解] | |
const void * | nlib_memrchr (const void *s, int c, size_t n) |
メモリ領域[s, s + n) の後方からn バイトを検索して、バイトc があるポインタを返します。 [詳解] | |
const void * | nlib_memchr_not (const void *s, int c, size_t n) |
メモリ領域[s, s + n) の先頭からn バイトを検索して、バイトc でないポインタを返します。 [詳解] | |
const void * | nlib_memchr_range_not (const void *s, const char *range, size_t n) |
メモリ領域[s, s + n) の先頭からn バイトを検索して、最初のrange に含まない文字へのポインタを返します。 [詳解] | |
const void * | nlib_memchr_lt (const void *s, int c, size_t n) |
メモリ領域[s, s + n) の先頭からn バイトを検索して、バイトc 未満の文字があるデータへのポインタを返します。 [詳解] | |
const void * | nlib_memchr_gt (const void *s, int c, size_t n) |
メモリ領域[s, s + n) の先頭からn バイトを検索して、バイトc より大きいの文字があるデータへのポインタを返します。 [詳解] | |
const void * | nlib_memchr_mb (const void *s, size_t n) |
メモリ領域[s, s + n) の先頭からn バイトを検索して、0x80以上のバイトが格納されている場所へのポインタを返します。 [詳解] | |
const char * | nlib_skipws (size_t *cnt_lf, const char **last_lf, const char *s, size_t n) |
n 個の文字から成る文字列を探索して最初の空白でない文字へのポインタを返します。 [詳解] | |
size_t | nlib_strlen (const char *s) |
内部でstrlen() を呼び出します。独自の実装が動作する場合もあります。 [詳解] | |
size_t | nlib_strnlen (const char *s, size_t maxsize) |
N1078のstrnlen_sに相当する実装です。 [詳解] | |
errno_t | nlib_strcpy (char *s1, size_t s1max, const char *s2) |
N1078のstrcpy_sに相当する実装です。 [詳解] | |
template<size_t N> | |
errno_t | nlib_strcpy (char(&s1)[N], const char *s2) noexcept |
nlib_strcpy() の関数テンプレート版です。 | |
errno_t | nlib_strncpy (char *s1, size_t s1max, const char *s2, size_t n) |
N1078のstrncpy_sに相当する実装です。 [詳解] | |
template<size_t N> | |
errno_t | nlib_strncpy (char(&s1)[N], const char *s2, size_t n) noexcept |
nlib_strncpy() の関数テンプレート版です。 | |
const char * | nlib_strchr (const char *s, int c) |
文字列の先頭から文字を検索します。 [詳解] | |
const char * | nlib_strrchr (const char *s, int c) |
文字列の末尾から文字を検索します。 [詳解] | |
const char * | nlib_strchr_mb (const char *s) |
文字列の先頭から文字を検索して、ヌル文字又は0x80-0xFFのバイトへのポインタを返します。 [詳解] | |
size_t | nlib_wcslen (const wchar_t *s) |
内部でwcslen() を呼び出します。独自の実装が動作する場合もあります。 [詳解] | |
size_t | nlib_wcsnlen (const wchar_t *s, size_t maxsize) |
N1078のwcsnlen_sに相当する実装です。 [詳解] | |
errno_t | nlib_wcscpy (wchar_t *s1, size_t s1max, const wchar_t *s2) |
N1078のwcscpy_sに相当する実装です。 [詳解] | |
template<size_t N> | |
errno_t | nlib_wcscpy (wchar_t(&s1)[N], const wchar_t *s2) noexcept |
nlib_wcscpy() の関数テンプレート版です。 | |
errno_t | nlib_wcsncpy (wchar_t *s1, size_t s1max, const wchar_t *s2, size_t n) |
N1078のwcsncpy_sに相当する実装です。 [詳解] | |
template<size_t N> | |
errno_t | nlib_wcsncpy (wchar_t(&s1)[N], const wchar_t *s2, size_t n) noexcept |
nlib_wcsncpy() の関数テンプレート版です。 | |
errno_t | nlib_strcat (char *s1, size_t s1max, const char *s2) |
N1078のstrcat_sに相当する実装です。 [詳解] | |
template<size_t N> | |
errno_t | nlib_strcat (char(&s1)[N], const char *s2) noexcept |
nlib_strcat() の関数テンプレート版です。 | |
errno_t | nlib_strncat (char *s1, size_t s1max, const char *s2, size_t n) |
N1078のstrncat_sに相当する実装です。 [詳解] | |
template<size_t N> | |
errno_t | nlib_strncat (char(&s1)[N], const char *s2, size_t n) noexcept |
nlib_strncat() の関数テンプレート版です。 | |
errno_t | nlib_wcscat (wchar_t *s1, size_t s1max, const wchar_t *s2) |
N1078のwcscat_sに相当する実装です。 [詳解] | |
template<size_t N> | |
errno_t | nlib_wcscat (wchar_t(&s1)[N], const wchar_t *s2) noexcept |
nlib_wcscat() の関数テンプレート版です。 | |
errno_t | nlib_wcsncat (wchar_t *s1, size_t s1max, const wchar_t *s2, size_t n) |
N1078のwcsncat_sに相当する実装です。 [詳解] | |
template<size_t N> | |
errno_t | nlib_wcsncat (wchar_t(&s1)[N], const wchar_t *s2, size_t n) noexcept |
nlib_wcsncat() の関数テンプレート版です。 | |
バージョン | |
#define | NLIB_VERSION 20150908 |
バージョン番号が定義されています。リリースの年月日に相当する数値が定義されています。 | |
#define | NLIB_VERSION_YEAR 2015 |
バージョン番号の年に相当する部分が整数として定義されています。 | |
#define | NLIB_VERSION_YEAR_SHORT 15 |
バージョン番号の年部分の下二桁に相当する部分が整数として定義されています。 | |
#define | NLIB_VERSION_DATE 0908 |
バージョン番号の月日に相当する部分が整数として定義されています。 | |
int | nlib_getversion (void) |
nlib のバージョンを動的に取得します。 [詳解] | |
メモリフェンス | |
#define | NLIB_MEMORY_ORDER_RELEASE __atomic_thread_fence(__ATOMIC_RELEASE) |
メモリフェンスです。C++11ではatomic_thread_fence(memory_order_release) に一致します。 | |
#define | NLIB_MEMORY_ORDER_ACQUIRE __atomic_thread_fence(__ATOMIC_ACQUIRE) |
メモリフェンスです。C++11ではatomic_thread_fence(memory_order_acquire) に一致します。 | |
#define | NLIB_MEMORY_ORDER_ACQ_REL __atomic_thread_fence(__ATOMIC_ACQ_REL) |
メモリフェンスです。C++11ではatomic_thread_fence(memory_order_acq_rel) に一致します。 | |
printf | |
#define | PRIdS __PRIS_PREFIX "d" |
size_t の型をprintf で表示する場合に利用します。%zd に相当します。 | |
#define | PRIxS __PRIS_PREFIX "x" |
size_t の型をprintf で表示する場合に利用します。%zx に相当します。 | |
#define | PRIuS __PRIS_PREFIX "u" |
size_t の型をprintf で表示する場合に利用します。%zu に相当します。 | |
#define | PRIXS __PRIS_PREFIX "X" |
size_t の型をprintf で表示する場合に利用します。%zX に相当します。 | |
#define | PRIoS __PRIS_PREFIX "o" |
size_t の型をprintf で表示する場合に利用します。%zo に相当します。 | |
errno_t | nlib_vsnprintf (size_t *count, char *buf, size_t size, const char *fmt, va_list args) |
より安全な形式のvsnprintf で、標準のvsnprintf の動作の違いも吸収します。 [詳解] | |
template<size_t N> | |
errno_t | nlib_vsnprintf (size_t *count, char(&buf)[N], const char *fmt, va_list args) noexcept |
nlib_vsnprintf() の関数テンプレート版です。 | |
errno_t | nlib_snprintf (size_t *count, char *buf, size_t size, const char *fmt,...) |
より安全な形式のsnprintf です。 | |
template<size_t N> | |
errno_t | nlib_snprintf (size_t *count, char(&buf)[N], const char *fmt,...) noexcept |
nlib_snprintf() の関数テンプレート版です。 | |
errno_t | nlib_vdprintf (nlib_fd fd, size_t *count, const char *fmt, va_list args) |
ファイルディスクリプタに出力するvsnprintf() です。 | |
errno_t | nlib_dprintf (nlib_fd fd, size_t *count, const char *fmt,...) |
ファイルディスクリプタに出力するsnprintf() です。 | |
int | nlib_printf (const char *fmt,...) |
printf() の代替です。 | |
errno_t | nlib_vsnwprintf (size_t *count, wchar_t *buf, size_t size, const wchar_t *fmt, va_list args) |
より安全な形式のvswprintf で、各種vswprintf の動作の違いも吸収します。 [詳解] | |
template<size_t N> | |
errno_t | nlib_vsnwprintf (size_t *count, wchar_t(&buf)[N], const wchar_t *fmt, va_list args) noexcept |
nlib_vsnwprintf() の関数テンプレート版です。 | |
errno_t | nlib_snwprintf (size_t *count, wchar_t *buf, size_t size, const wchar_t *fmt,...) |
より安全な形式のsnwprintf です。 | |
template<size_t N> | |
errno_t | nlib_snwprintf (size_t *count, wchar_t(&buf)[N], const wchar_t *fmt,...) noexcept |
nlib_snwprintf() の関数テンプレート版です。 | |
errno_t | nlib_vdwprintf (nlib_fd fd, size_t *count, const wchar_t *fmt, va_list args) |
ファイルディスクリプタに出力するvsnwprintf です。 | |
errno_t | nlib_dwprintf (nlib_fd fd, size_t *count, const wchar_t *fmt,...) |
ファイルディスクリプタに出力するsnwprintf() です。 | |
int | nlib_wprintf (const wchar_t *fmt,...) |
wprintf() の代替です。 | |
アトリビュート | |
#define | NLIB_ALWAYS_INLINE inline __attribute__((always_inline)) |
コンパイラに関数をインライン展開するように強く示します。 [詳解] | |
#define | NLIB_NEVER_INLINE __attribute__((__noinline__)) |
コンパイラに関数をインライン展開しないように示します。 [詳解] | |
#define | NLIB_LIKELY(x) __builtin_expect(!!(x), 1) |
条件xが真になる傾向が高いことをコンパイラに示します。 [詳解] | |
#define | NLIB_UNLIKELY(x) __builtin_expect(!!(x), 0) |
条件xが偽になる傾向が高いことをコンパイラに示します。 [詳解] | |
#define | NLIB_CHECK_RESULT __attribute__((warn_unused_result)) |
関数の呼び出し元が戻り値をチェックする必要があることを示します。 [詳解] | |
#define | NLIB_NORETURN __attribute__((noreturn)) |
関数がリターンしないことを示します。 [詳解] | |
#define | NLIB_NONNULL __attribute__((nonnull)) |
全ての引数にNULL を指定することができないことを示します。 [詳解] | |
#define | NLIB_NONNULL_1 __attribute__((nonnull (1))) |
1番目の引数にNULL を指定することができないことを示します。 [詳解] | |
#define | NLIB_NONNULL_2 __attribute__((nonnull (2))) |
2番目の引数にNULL を指定することができないことを示します。 [詳解] | |
#define | NLIB_NONNULL_3 __attribute__((nonnull (3))) |
3番目の引数にNULL を指定することができないことを示します。 [詳解] | |
#define | NLIB_NONNULL_4 __attribute__((nonnull (4))) |
4番目の引数にNULL を指定することができないことを示します。 [詳解] | |
#define | NLIB_NONNULL_5 __attribute__((nonnull (5))) |
5番目の引数にNULL を指定することができないことを示します。 [詳解] | |
#define | NLIB_ATTRIBUTE_MALLOC __attribute__((malloc)) |
利用可能であれば__attribute__((malloc)) が定義されます。 [詳解] | |
#define | NLIB_DEPRECATED __attribute__((deprecated)) |
関数等がdeprecatedになったことを示します。 [詳解] | |
#define | NLIB_DEPRECATED_MSG(msg) __attribute__((deprecated(msg))) |
関数等がdeprecatedになったことを示します。 [詳解] | |
#define | NLIB_WEAKSYMBOL __attribute__((weak)) |
ウィークシンボルを定義するために利用します。 [詳解] | |
#define | NLIB_VIS_HIDDEN __attribute__((visibility("hidden"))) |
関数やクラス等のシンボルをライブラリの外部に公開しません。 [詳解] | |
#define | NLIB_VIS_PUBLIC __attribute__((visibility("default"))) |
関数やクラス等のシンボルをライブラリの外部に公開します。 [詳解] | |
#define | NLIB_WARN(exp) ("WARNING: " exp) |
ワーニングを出力します。 [詳解] | |
#define | NLIB_ASSUME(cond) switch (0) case 0: default: if (cond) ; else __builtin_unreachable() /* NOLINT */ |
cond が真であることを示してコンパイラに最適化のヒントを与えます。 [詳解] | |
時刻と時間 | |
errno_t | nlib_epochtime (nlib_time *t) |
現在時刻を取得します。 [詳解] | |
errno_t | nlib_ticktime (nlib_duration *t) |
ブートからの経過時間を取得します。 [詳解] | |
errno_t | nlib_sleep (nlib_duration t) |
t の間スリープする。 [詳解] | |
typedef int64_t | nlib_time |
1970/01/01を起点(0)としてから100ns刻みで時刻を表現する型です。64bit符号付き整数です。 | |
typedef int64_t | nlib_duration |
100ns刻みで時間を表現する型です。64bit符号付き整数です。 | |
ランダム値の生成 | |
NLIB_CHECK_RESULT errno_t | nlib_gen_random (void *buf, size_t size) |
ランダムな値をsize バイト生成してbuf に格納します。 [詳解] | |
OSからのメモリ割り当て | |
errno_t | nlib_mempagesize (size_t *size) |
ページサイズを取得します。 [詳解] | |
errno_t | nlib_virtual_alloc (void **ptr, size_t size) |
仮想メモリアドレス空間を割り当てます。 [詳解] | |
errno_t | nlib_virtual_free (void *ptr, size_t size) |
仮想メモリアドレス空間の割り当てを解除します [詳解] | |
errno_t | nlib_physical_alloc (void *ptr, size_t size, int prot) |
物理メモリを割り当てます。 [詳解] | |
errno_t | nlib_physical_free (void *ptr, size_t size) |
物理メモリの割り当てを解除します。 [詳解] | |
errno_t | nlib_mlock (void *addr, size_t len) |
指定したメモリ領域がスワップアウトされないようにします。 [詳解] | |
errno_t | nlib_munlock (void *addr, size_t len) |
指定したメモリ領域がスワップアウトできるようにします。 [詳解] | |
TLS | |
NLIB_CHECK_RESULT errno_t | nlib_tls_alloc (nlib_tls *tls, nlib_tls_destructor destr) |
TLSスロットに対する新しいIDを確保します。 [詳解] | |
errno_t | nlib_tls_free (nlib_tls tls) |
TLSスロットに対応するIDを解放します。 [詳解] | |
errno_t | nlib_tls_setvalue (nlib_tls tls, const void *value) |
TLSスロットに値を格納します。 [詳解] | |
errno_t | nlib_tls_getvalue (nlib_tls tls, void **value) |
TLSスロットから値を取り出します。 [詳解] | |
typedef pthread_key_t | nlib_tls |
TLSスロットのIDを示す型です。 | |
typedef void(* | nlib_tls_destructor) (void *tls_value) |
スレッド終了時に呼び出されるTLSのデストラクタ関数の型です。 [詳解] | |
スピンロック | |
#define | NLIB_SPINLOCK_INITIALIZER (0) |
nlib_spinlockを静的に初期化するためのマクロです。 | |
typedef int32_t | nlib_spinlock |
スピンロック変数の型です。NLIB_SPINLOCK_INITIALIZER により静的に初期化して利用します。 [詳解] | |
ミューテックス | |
#define | NLIB_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER |
nlib_mutex を静的に初期化するためのマクロ。 | |
#define | NLIB_RECURSIVE_MUTEX_INITIALIZER PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP |
nlib_mutex を静的に初期化するためのマクロ。再帰mutexになる。 | |
#define | NLIB_RECURSIVE_TIMED_MUTEX_INITIALIZER PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP |
nlib_mutex を静的に初期化するためのマクロ。再帰でタイムアウト可能なmutexになる。 | |
errno_t | nlib_mutex_init (nlib_mutex *mutex) |
ミューテックスを初期化します。 [詳解] | |
errno_t | nlib_mutex_recursive_init (nlib_mutex *mutex) |
再帰ミューテックスを初期化します。 [詳解] | |
errno_t | nlib_mutex_recursive_timed_init (nlib_mutex *mutex) |
再帰かつタイムアウト可能なミューテックスを初期化します。 [詳解] | |
errno_t | nlib_mutex_lock (nlib_mutex *mutex) |
与えられたmutex をロックします。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_mutex_trylock (nlib_mutex *mutex) |
mutex がロックされていない場合のみロックします。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_mutex_trylock_for (nlib_mutex *mutex, nlib_duration delta) |
与えられたmutex をロックします。タイムアウトします。 [詳解] | |
errno_t | nlib_mutex_unlock (nlib_mutex *mutex) |
与えられたmutex をアンロックします。 [詳解] | |
errno_t | nlib_mutex_destroy (nlib_mutex *mutex) |
mutex オブジェクトを破壊し、関連付けられているリソース(あれば)を解放します。 [詳解] | |
typedef pthread_mutex_t | nlib_mutex |
ミューテックス変数の型です。 [詳解] | |
セマフォ | |
errno_t | nlib_semaphore_init (nlib_semaphore *sem, int initial_count) |
sem で指定されるセマフォオブジェクトを初期化する。 [詳解] | |
errno_t | nlib_semaphore_wait (nlib_semaphore *sem) |
セマフォカウントが0でなくなるまで待って、セマフォカウントを1減少させる。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_semaphore_trywait (nlib_semaphore *sem) |
セマフォカウントが0でなければ、セマフォカウントを1減少させる。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_semaphore_trywait_for (nlib_semaphore *sem, nlib_duration duration) |
セマフォカウントが0でなければ、セマフォカウントを1減少させる。0の場合はduration の期間だけ待つ。 [詳解] | |
errno_t | nlib_semaphore_post (nlib_semaphore *sem, int *previous_count) |
セマフォカウントを1つ増加させる。 [詳解] | |
errno_t | nlib_semaphore_post_ex (nlib_semaphore *sem, int release_count, int *previous_count) |
セマフォカウントをreleaseCount 増加させる。 [詳解] | |
errno_t | nlib_semaphore_destroy (nlib_semaphore *sem) |
セマフォオブジェクトを破壊する。 [詳解] | |
typedef sem_t | nlib_semaphore |
セマフォオブジェクトの型です。 [詳解] | |
条件変数 | |
#define | NLIB_COND_INITIALIZER PTHREAD_COND_INITIALIZER |
nlib_cond を静的に初期化するための定数です。 | |
errno_t | nlib_cond_init (nlib_cond *cond) |
条件変数を初期化します。 [詳解] | |
errno_t | nlib_cond_signal (nlib_cond *cond) |
条件変数cond を待っているスレッドの1つの実行を再開させます。 [詳解] | |
errno_t | nlib_cond_broadcast (nlib_cond *cond) |
条件変数cond を待っているスレッド全ての実行を再開させます。 [詳解] | |
errno_t | nlib_cond_wait (nlib_cond *cond, nlib_mutex *mutex) |
mutex をアンロックし、条件変数を待機します。実行が再開したらmutex を再ロックします。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_cond_wait_for (nlib_cond *cond, nlib_mutex *mutex, nlib_duration duration) |
mutex をアンロックし、条件変数をduration の間だけ待機します。実行が再開したらmutex を再ロックします。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_cond_wait_until (nlib_cond *cond, nlib_mutex *mutex, nlib_time abstime) |
mutex をアンロックし、条件変数をabstime まで待機します。実行が再開したらmutex を再ロックします。 [詳解] | |
errno_t | nlib_cond_destroy (nlib_cond *cond) |
条件変数オブジェクトを破壊します。 [詳解] | |
typedef pthread_cond_t | nlib_cond |
条件変数オブジェクトの型です。 [詳解] | |
リードライトロック | |
リードライトロックは複数のリーダーによる同時アクセスを許可しつつ、更新時にはライターによる排他アクセスのみを許可する仕組みです。 | |
errno_t | nlib_rwlock_init (nlib_rwlock *rwlock) |
リードライトロックを初期化します。 [詳解] | |
errno_t | nlib_rwlock_destroy (nlib_rwlock *rwlock) |
リードライトロックオブジェクトを破壊します。 [詳解] | |
errno_t | nlib_rwlock_rdlock (nlib_rwlock *rwlock) |
読み込みロックを取得しクリティカルセクションに入ります。取得できるまでブロックします。 [詳解] | |
errno_t | nlib_rwlock_tryrdlock (nlib_rwlock *rwlock) |
読み込みロックを取得しクリティカルセクションに入ることを試みます。 [詳解] | |
errno_t | nlib_rwlock_tryrdlock_for (nlib_rwlock *rwlock, nlib_duration duration) |
読み込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。 [詳解] | |
errno_t | nlib_rwlock_tryrdlock_until (nlib_rwlock *rwlock, nlib_time abstime) |
読み込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。 [詳解] | |
errno_t | nlib_rwlock_rdunlock (nlib_rwlock *rwlock) |
読み込みロックを解放します。 [詳解] | |
errno_t | nlib_rwlock_wrlock (nlib_rwlock *rwlock) |
書き込みロックを取得しクリティカルセクションに入ります。取得できるまでブロックします。 [詳解] | |
errno_t | nlib_rwlock_trywrlock (nlib_rwlock *rwlock) |
書き込みロックを取得しクリティカルセクションに入ることを試みます。 [詳解] | |
errno_t | nlib_rwlock_trywrlock_for (nlib_rwlock *rwlock, nlib_duration duration) |
書き込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。 [詳解] | |
errno_t | nlib_rwlock_trywrlock_until (nlib_rwlock *rwlock, nlib_time abstime) |
書き込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。 [詳解] | |
errno_t | nlib_rwlock_wrunlock (nlib_rwlock *rwlock) |
書き込みロックを解放します。 [詳解] | |
typedef struct nlib_rwlock_ | nlib_rwlock |
リードライトロックオブジェクトの型です。 [詳解] | |
リードライトロック用条件変数 | |
#define | NLIB_RWLOCK_INITIALIZER |
nlib_rwlock を静的に初期化するための定数です。 [詳解] | |
errno_t | nlib_condrwlock_init (nlib_condrwlock *cond) |
リードライトロック用条件変数を初期化します。 [詳解] | |
errno_t | nlib_condrwlock_destroy (nlib_condrwlock *cond) |
リードライトロック用条件変数を破壊します。 [詳解] | |
errno_t | nlib_condrwlock_signal (nlib_condrwlock *cond) |
リードライトロック用条件変数cond を待っているスレッドの1つの実行を再開させます。 [詳解] | |
errno_t | nlib_condrwlock_broadcast (nlib_condrwlock *cond) |
リードライトロック用条件変数cond を待っているスレッド全ての実行を再開させます。 [詳解] | |
errno_t | nlib_condrwlock_wait (nlib_condrwlock *cond, nlib_rwlock *rwlock, int rdlock) |
rwlock をアンロックし、条件変数を待機します。実行が再開したらrwlock を再ロックします。 [詳解] | |
errno_t | nlib_condrwlock_wait_for (nlib_condrwlock *cond, nlib_rwlock *rwlock, nlib_duration duration, int rdlock) |
rwlock をアンロックし、条件変数を待機します。実行が再開したらrwlock を再ロックします。 [詳解] | |
errno_t | nlib_condrwlock_wait_until (nlib_condrwlock *cond, nlib_rwlock *rwlock, nlib_time abstime, int rdlock) |
rwlock をアンロックし、条件変数を待機します。実行が再開したらrwlock を再ロックします。 [詳解] | |
typedef struct nlib_condrwlock_ | nlib_condrwlock |
リードライトロック用の条件変数の型です。 [詳解] | |
バリア | |
errno_t | nlib_barrier_init (nlib_barrier *barrier, unsigned int count) |
バリアオブジェクトを初期化します。 [詳解] | |
errno_t | nlib_barrier_destroy (nlib_barrier *barrier) |
バリアオブジェクトを破壊します。 [詳解] | |
errno_t | nlib_barrier_wait (nlib_barrier *barrier) |
スレッドの待ち合わせを行います。 [詳解] | |
typedef struct nlib_barrier_ | nlib_barrier |
バリアオブジェクトの型です。 [詳解] | |
アトミック関数用マクロ | |
#define | NLIB_ATOMIC_RELAXED __ATOMIC_RELAXED |
gccの__ATOMIC_RELAXED やC++11のstd::memory_order_relaxed に準じます。 | |
#define | NLIB_ATOMIC_ACQUIRE __ATOMIC_ACQUIRE |
gccの__ATOMIC_ACQUIRE やC++11のstd::memory_order_acquire に準じます。 | |
#define | NLIB_ATOMIC_RELEASE __ATOMIC_RELEASE |
gccの__ATOMIC_RELEASE やC++11のstd::memory_order_release に準じます。 | |
#define | NLIB_ATOMIC_ACQ_REL __ATOMIC_ACQ_REL |
gccの__ATOMIC_ACQ_REL やC++11のstd::memory_order_acq_rel に準じます。 | |
#define | NLIB_ATOMIC_SEQ_CST __ATOMIC_SEQ_CST |
gccの__ATOMIC_SEQ_CST やC++11のstd::memory_order_seq_cst に準じます。 | |
アトミック関数(32 bit) | |
各関数の | |
int32_t | nlib_atomic_load32 (const int32_t *ptr, int memorder) |
アトミックに値をロードします。動作はgccの__atomic_load_n() に準じます。 | |
void | nlib_atomic_store32 (int32_t *ptr, int32_t val, int memorder) |
アトミックに値をストアします。動作はgccの__atomic_store_n() に準じます。 | |
int32_t | nlib_atomic_exchange32 (int32_t *ptr, int32_t val, int memorder) |
アトミックに値を入れ替えます。動作はgccの__atomic_exchange_n() に準じます。 | |
int | nlib_atomic_compare_exchange32 (int32_t *ptr, int32_t *expected, int32_t desired, int weak, int success_memorder, int failure_memorder) |
アトミックな値の比較と入れ替えを行います。動作はgccの__atomic_compare_exchange_n() に準じます。 | |
int32_t | nlib_atomic_add_fetch32 (int32_t *ptr, int32_t val, int memorder) |
アトミックな値の加算を行います。動作はgccの__atomic_add_fetch() に準じます。 | |
int32_t | nlib_atomic_sub_fetch32 (int32_t *ptr, int32_t val, int memorder) |
アトミックな値の減算を行います。動作はgccの__atomic_sub_fetch() に準じます。 | |
int32_t | nlib_atomic_and_fetch32 (int32_t *ptr, int32_t val, int memorder) |
アトミックな値の論理積の計算を行います。動作はgccの__atomic_and_fetch() に準じます。 | |
int32_t | nlib_atomic_xor_fetch32 (int32_t *ptr, int32_t val, int memorder) |
アトミックな値の排他的論理和の計算を行います。動作はgccの__atomic_xor_fetch() に準じます。 | |
int32_t | nlib_atomic_or_fetch32 (int32_t *ptr, int32_t val, int memorder) |
アトミックな値の論理和の計算を行います。動作はgccの__atomic_or_fetch() に準じます。 | |
int32_t | nlib_atomic_fetch_add32 (int32_t *ptr, int32_t val, int memorder) |
アトミックな値の加算を行います。動作はgccの__atomic_fetch_add() に準じます。 | |
int32_t | nlib_atomic_fetch_sub32 (int32_t *ptr, int32_t val, int memorder) |
アトミックな値の減算を行います。動作はgccの__atomic_fetch_sub() に準じます。 | |
int32_t | nlib_atomic_fetch_and32 (int32_t *ptr, int32_t val, int memorder) |
アトミックな値の論理積の計算を行います。動作はgccの__atomic_fetch_and() に準じます。 | |
int32_t | nlib_atomic_fetch_xor32 (int32_t *ptr, int32_t val, int memorder) |
アトミックな値の排他的論理和の計算を行います。動作はgccの__atomic_fetch_xor() に準じます。 | |
int32_t | nlib_atomic_fetch_or32 (int32_t *ptr, int32_t val, int memorder) |
アトミックな値の論理和の計算を行います。動作はgccの__atomic_fetch_or() に準じます。 | |
アトミック関数(64 bit) | |
各関数の | |
int64_t | nlib_atomic_load64 (const int64_t *ptr, int memorder) |
アトミックに値をロードします。動作はgccの__atomic_load_n() に準じます。 | |
void | nlib_atomic_store64 (int64_t *ptr, int64_t val, int memorder) |
アトミックに値をストアします。動作はgccの__atomic_store_n() に準じます。 | |
int64_t | nlib_atomic_exchange64 (int64_t *ptr, int64_t val, int memorder) |
アトミックに値を入れ替えます。動作はgccの__atomic_exchange_n() に準じます。 | |
int | nlib_atomic_compare_exchange64 (int64_t *ptr, int64_t *expected, int64_t desired, int weak, int success_memorder, int failure_memorder) |
アトミックな値の比較と入れ替えを行います。動作はgccの__atomic_compare_exchange_n() に準じます。 | |
int64_t | nlib_atomic_add_fetch64 (int64_t *ptr, int64_t val, int memorder) |
アトミックな値の加算を行います。動作はgccの__atomic_add_fetch() に準じます。 | |
int64_t | nlib_atomic_sub_fetch64 (int64_t *ptr, int64_t val, int memorder) |
アトミックな値の減算を行います。動作はgccの__atomic_sub_fetch() に準じます。 | |
int64_t | nlib_atomic_and_fetch64 (int64_t *ptr, int64_t val, int memorder) |
アトミックな値の論理積の計算を行います。動作はgccの__atomic_and_fetch() に準じます。 | |
int64_t | nlib_atomic_xor_fetch64 (int64_t *ptr, int64_t val, int memorder) |
アトミックな値の排他的論理和の計算を行います。動作はgccの__atomic_xor_fetch() に準じます。 | |
int64_t | nlib_atomic_or_fetch64 (int64_t *ptr, int64_t val, int memorder) |
アトミックな値の論理和の計算を行います。動作はgccの__atomic_or_fetch() に準じます。 | |
int64_t | nlib_atomic_fetch_add64 (int64_t *ptr, int64_t val, int memorder) |
アトミックな値の加算を行います。動作はgccの__atomic_fetch_add() に準じます。 | |
int64_t | nlib_atomic_fetch_sub64 (int64_t *ptr, int64_t val, int memorder) |
アトミックな値の減算を行います。動作はgccの__atomic_fetch_sub() に準じます。 | |
int64_t | nlib_atomic_fetch_and64 (int64_t *ptr, int64_t val, int memorder) |
アトミックな値の論理積の計算を行います。動作はgccの__atomic_fetch_and() に準じます。 | |
int64_t | nlib_atomic_fetch_xor64 (int64_t *ptr, int64_t val, int memorder) |
アトミックな値の排他的論理和の計算を行います。動作はgccの__atomic_fetch_xor() に準じます。 | |
int64_t | nlib_atomic_fetch_or64 (int64_t *ptr, int64_t val, int memorder) |
アトミックな値の論理和の計算を行います。動作はgccの__atomic_fetch_or() に準じます。 | |
アトミック関数(ポインタ型) | |
各関数の | |
void * | nlib_atomic_loadptr (void *const *ptr, int memorder) |
アトミックに値をロードします。動作はgccの__atomic_load_n() に準じます。 | |
void | nlib_atomic_storeptr (void **ptr, void *val, int memorder) |
アトミックに値をストアします。動作はgccの__atomic_store_n() に準じます。 | |
int | nlib_atomic_compare_exchangeptr (void **ptr, void **expected, void *desired, int weak, int success_memorder, int failure_memorder) |
アトミックな値の比較と入れ替えを行います。動作はgccの__atomic_compare_exchange_n() に準じます。 | |
メモリバリア | |
各関数の | |
void | nlib_atomic_thread_fence (int memorder) |
指定されたメモリバリアを配置します。 | |
1回のみの実行 | |
#define | NLIB_ONCE_INIT { 0 } |
nlib_onceflagを静的に初期化するための値 | |
errno_t | nlib_once (nlib_onceflag *flag, nlib_oncefunc func) |
func を高々1回しか実行されないようします。 [詳解] | |
errno_t | nlib_tryonce (nlib_onceflag *flag, nlib_oncefunc func) |
nlib_once と概ね同じですが、func が他のスレッドで実行中だった場合、EBUSY を返します。 [詳解] | |
typedef struct nlib_onceflag_ | nlib_onceflag |
nlib_once で利用される構造体 | |
typedef void(* | nlib_oncefunc) (void) |
nlib_once で実行される関数の型 | |
メッセージキュー | |||||||||
nlibのメッセージキューの特徴については | |||||||||
NLIB_CHECK_RESULT errno_t | nlib_mq_open (nlib_mq *mq, const nlib_mq_attr *attr) | ||||||||
スレッド間でメッセージをやりとりするためのメッセージキューを作成します。 [詳解] | |||||||||
NLIB_CHECK_RESULT errno_t | nlib_mq_getattr (nlib_mq mq, nlib_mq_attr *attr) | ||||||||
ハンドルで示されるメッセージキューに設定されている属性を取得します。 [詳解] | |||||||||
errno_t | nlib_mq_close (nlib_mq mq) | ||||||||
ハンドルで示されるメッセージキューをクローズします。 [詳解] | |||||||||
errno_t | nlib_mq_readonly (nlib_mq mq) | ||||||||
ハンドルで示されるメッセージキューを受信専用にします。 [詳解] | |||||||||
NLIB_CHECK_RESULT errno_t | nlib_mq_send (nlib_mq mq, nlib_mq_msg msg, int prio) | ||||||||
メッセージをキューに送信します。 [詳解] | |||||||||
NLIB_CHECK_RESULT errno_t | nlib_mq_send_until (nlib_mq mq, nlib_mq_msg msg, int prio, nlib_time abstime) | ||||||||
メッセージをキューにタイムアウトつきで送信します。 [詳解] | |||||||||
NLIB_CHECK_RESULT errno_t | nlib_mq_receive (nlib_mq mq, nlib_mq_msg *msg, int *prio) | ||||||||
メッセージをキューから受信します。受信したメッセージはユーザーがデストラクタ関数で削除する必要があります。 [詳解] | |||||||||
NLIB_CHECK_RESULT errno_t | nlib_mq_receive_until (nlib_mq mq, nlib_mq_msg *msg, int *prio, nlib_time abstime) | ||||||||
メッセージをキューからタイムアウトつきで受信します。受信したメッセージはユーザーがデストラクタ関数で削除する必要があります。 [詳解] | |||||||||
NLIB_CHECK_RESULT errno_t | nlib_mq_drop (nlib_mq mq, nlib_mq_msg *msg, int *prio) | ||||||||
キューに存在する最低の優先度のメッセージをキューから受信します。受信したメッセージはユーザーがデストラクタ関数で削除する必要があります。 [詳解] | |||||||||
typedef int32_t | nlib_mq | ||||||||
メッセージキューに関連付けられるハンドルです。ハンドルがゼロクリア(memset() を利用してください)された場合、必ず無効ハンドルとなります。 | |||||||||
typedef void * | nlib_mq_msg | ||||||||
メッセージキューに格納されるメッセージの型です。 | |||||||||
typedef void(* | nlib_mq_msg_destructor) (nlib_mq_msg) | ||||||||
メッセージキューから取り出したメッセージのデストラクタ関数です。 | |||||||||
int32_t | nlib_mq_attr::flag | ||||||||
メッセージキューを作成する際の設定です。
| |||||||||
int32_t | nlib_mq_attr::max_msg | ||||||||
メッセージキューの作成の際に最大メッセージ数を設定することができます。 | |||||||||
int32_t | nlib_mq_attr::cur_msg | ||||||||
ロックフリーなキュー以外の場合、現在メッセージキューに存在するメッセージ数を取得できます。 | |||||||||
nlib_mq_msg_destructor | nlib_mq_attr::destructor | ||||||||
メッセージキューから取り出したメッセージのデストラクタ関数を設定、取得できます。 | |||||||||
スレッド | |||||||||||||||
#define | NLIB_THREAD_INVALID (nlib_thread)(0) | ||||||||||||||
無効なスレッドを指し示す値 | |||||||||||||||
errno_t | nlib_yield (void) | ||||||||||||||
スレッドの実行権を手放す。 [詳解] | |||||||||||||||
NLIB_CHECK_RESULT errno_t | nlib_thread_create (nlib_thread *thread, const nlib_thread_attr *attr, nlib_thread_func func, void *arg) | ||||||||||||||
新しいスレッド作成して実行します。 [詳解] | |||||||||||||||
errno_t | nlib_thread_join (nlib_thread thread) | ||||||||||||||
スレッドの終了を待ちます。 [詳解] | |||||||||||||||
errno_t | nlib_thread_detach (nlib_thread thread) | ||||||||||||||
実行中のスレッドをデタッチ状態にします。 [詳解] | |||||||||||||||
errno_t | nlib_thread_self (nlib_thread *thread) | ||||||||||||||
実行中のスレッドに対応するnlib_thread の値を格納する。 [詳解] | |||||||||||||||
errno_t | nlib_thread_getconcurrency (unsigned int *num_cpu) | ||||||||||||||
ハードウェアスレッドの数を取得します。 [詳解] | |||||||||||||||
errno_t | nlib_thread_getid (nlib_thread_id *id) | ||||||||||||||
実行中のスレッドに対応する一意の整数値を格納する。 [詳解] | |||||||||||||||
int | nlib_thread_equal (nlib_thread th1, nlib_thread th2) | ||||||||||||||
2つのスレッドが同一スレッドを指すかどうかチェックします。 [詳解] | |||||||||||||||
errno_t | nlib_thread_getcpu (int *result) | ||||||||||||||
呼び出したスレッドが実行されているCPUを取得します。 [詳解] | |||||||||||||||
errno_t | nlib_thread_setaffinity (nlib_thread thread, uint32_t affinity) | ||||||||||||||
指定されたスレッドのプロセッサアフィニティマスクを設定します。 [詳解] | |||||||||||||||
errno_t | nlib_thread_setname (const char *string_literal) | ||||||||||||||
スレッドに名前をつけます。 [詳解] | |||||||||||||||
errno_t | nlib_thread_attr_init (nlib_thread_attr *attr) | ||||||||||||||
スレッド属性オブジェクトを初期化して、デフォルトに設定する。 [詳解] | |||||||||||||||
errno_t | nlib_thread_attr_setint (nlib_thread_attr *attr, int key, int value) | ||||||||||||||
スレッドの属性オブジェクトのキーに対応する整数を設定する。 [詳解] | |||||||||||||||
errno_t | nlib_thread_attr_getint (const nlib_thread_attr *attr, int key, int *value) | ||||||||||||||
スレッドの属性オブジェクトのキーに対応する整数を取得する。 [詳解] | |||||||||||||||
errno_t | nlib_thread_attr_setptr (nlib_thread_attr *attr, int key, void *value) | ||||||||||||||
スレッドの属性オブジェクトのキーに対応するポインタを設定する。現在のところEINVAL のみを返します。 [詳解] | |||||||||||||||
errno_t | nlib_thread_attr_getptr (const nlib_thread_attr *attr, int key, void **value) | ||||||||||||||
スレッドの属性オブジェクトのキーに対応するポインタを取得する。現在のところEINVAL のみを返します。 [詳解] | |||||||||||||||
errno_t | nlib_thread_attr_setstack (nlib_thread_attr *attr, void *stack_addr, size_t stack_size) | ||||||||||||||
スレッドの属性オブジェクトのスタック設定を設定する。
| |||||||||||||||
errno_t | nlib_thread_attr_getstack (const nlib_thread_attr *attr, void **stack_addr, size_t *stack_size) | ||||||||||||||
スレッドの属性オブジェクトのスタック設定を取得する。 [詳解] | |||||||||||||||
errno_t | nlib_thread_attr_destroy (nlib_thread_attr *attr) | ||||||||||||||
スレッド初期化オブジェクトを破壊します。 [詳解] | |||||||||||||||
errno_t | nlib_thread_getpriority (nlib_thread thread, int *priority) | ||||||||||||||
スレッドの現在の実行優先度を取得します。数値の意味は実装依存です。 [詳解] | |||||||||||||||
errno_t | nlib_thread_setpriority (nlib_thread thread, int priority) | ||||||||||||||
スレッドの実行優先度を設定します。数値の意味は実装依存です。 [詳解] | |||||||||||||||
errno_t | nlib_thread_priority_min (int *priority) | ||||||||||||||
実行優先度に指定できる数値の最小値を取得します。 [詳解] | |||||||||||||||
errno_t | nlib_thread_priority_max (int *priority) | ||||||||||||||
実行優先度に指定できる数値の最大値を取得します。 [詳解] | |||||||||||||||
errno_t | nlib_thread_priority_default (int *priority) | ||||||||||||||
実行優先度に指定できる数値のデフォルト値を取得します。 [詳解] | |||||||||||||||
void | nlib_thread_exit (void) NLIB_NORETURN | ||||||||||||||
呼び出しスレッドを終了します。 [詳解] | |||||||||||||||
void | nlib_thread_exit_cpp () NLIB_NORETURN | ||||||||||||||
呼び出しスレッドを終了します。 [詳解] | |||||||||||||||
void | nlib_thread_cleanup_push (void(*fn)(void *), void *arg) | ||||||||||||||
fn を専用のスタックにプッシュします。 [詳解] | |||||||||||||||
void | nlib_thread_cleanup_pop (int exec) | ||||||||||||||
クリーンアップハンドラが格納されているスタックの一番上のハンドラを削除します。 [詳解] | |||||||||||||||
typedef pthread_t | nlib_thread | ||||||||||||||
スレッドを指し示す識別子 [詳解] | |||||||||||||||
typedef struct nlib_thread_attr_ | nlib_thread_attr | ||||||||||||||
新しく作られるスレッドに適用されるスレッド属性 | |||||||||||||||
typedef void(* | nlib_thread_func) (void *arg) | ||||||||||||||
別スレッドで実行される関数 [詳解] | |||||||||||||||
typedef int | nlib_thread_id | ||||||||||||||
スレッド毎にユニークな整数値 | |||||||||||||||
デバック, デバック出力 | |
errno_t | nlib_write_stdout (size_t *result, const void *buf, size_t count) |
標準出力に文字列を書き出します。 [詳解] | |
errno_t | nlib_write_stderr (size_t *result, const void *buf, size_t count) |
標準エラー出力に文字列を書き出します。 [詳解] | |
void | nlib_debug_break (void) |
ブレークポイントになります。 [詳解] | |
errno_t | nlib_debug_backtrace (size_t *result, void **buffer, size_t count) |
バックトレースをbuffer が指す配列に格納します。 [詳解] | |
errno_t | nlib_debug_backtrace_gettext (char *str, size_t strbufsize, void *const *buf, size_t count) |
nlib_debug_backtrace() で得られた情報から文字列情報を作成します。 [詳解] | |
errno_t | nlib_getenv (size_t *result, char *buf, size_t bufsize, const char *varname) |
環境変数の値を文字列で取得します。 [詳解] | |
ロギング | |
NLIB_LOG_VERBOSE | |
詳細レベルのメッセージを出力するときに指定します。 [詳解] | |
NLIB_LOG_DEBUG | |
デバッグレベルのメッセージを出力するときに指定します。 [詳解] | |
NLIB_LOG_INFO | |
情報レベルのメッセージを出力するときに指定します。 [詳解] | |
NLIB_LOG_WARN | |
警告レベルのメッセージを出力するときに指定します。 [詳解] | |
NLIB_LOG_ERROR | |
エラーレベルのメッセージを出力するときに指定します。 [詳解] | |
NLIB_LOG_FATAL | |
致命的なレベルのメッセージを出力するときに指定します。 [詳解] | |
NLIB_LOG_LEVEL_EQUAL_OR_ABOVE = 0x10 | |
指定した優先度との論理和をとると、指定した優先度かそれ以上の優先度を指定したことになります。 nlib_log_attr_setint() で利用することができます。 [詳解] | |
NLIB_LOG_LEVEL_EQUAL_OR_BELOW = 0x20 | |
指定した優先度との論理和をとると、指定した優先度かそれ以下の優先度を指定したことになります。 nlib_log_attr_setint() で利用することができます。 [詳解] | |
NLIB_LOG_LEVEL_ALL = 0x30 | |
全ての優先度を指定します。nlib_log_attr_setint() で利用することができます。 [詳解] | |
enum | nlib_log_priority { , NLIB_LOG_VERBOSE, NLIB_LOG_DEBUG, NLIB_LOG_INFO, NLIB_LOG_WARN, NLIB_LOG_ERROR, NLIB_LOG_FATAL , NLIB_LOG_LEVEL_EQUAL_OR_ABOVE = 0x10, NLIB_LOG_LEVEL_EQUAL_OR_BELOW = 0x20, NLIB_LOG_LEVEL_ALL = 0x30 } |
出力の優先度(種類)を定義しています。 [詳解] | |
int | nlib_log_print (int prio, const char *tag, const char *fmt,...) |
ログメッセージを出力します。 [詳解] | |
int | nlib_log_vprint (int prio, const char *tag, const char *fmt, va_list ap) |
ログメッセージを出力します。 [詳解] | |
errno_t | nlib_log_attr_setint (int prio, int key, int value) |
優先度ごとの出力先の指定を行います。 [詳解] | |
NLIB_LOG_VERBOSE | |
詳細レベルのメッセージを出力するときに指定します。 [詳解] | |
NLIB_LOG_DEBUG | |
デバッグレベルのメッセージを出力するときに指定します。 [詳解] | |
NLIB_LOG_INFO | |
情報レベルのメッセージを出力するときに指定します。 [詳解] | |
NLIB_LOG_WARN | |
警告レベルのメッセージを出力するときに指定します。 [詳解] | |
NLIB_LOG_ERROR | |
エラーレベルのメッセージを出力するときに指定します。 [詳解] | |
NLIB_LOG_FATAL | |
致命的なレベルのメッセージを出力するときに指定します。 [詳解] | |
NLIB_LOG_LEVEL_EQUAL_OR_ABOVE = 0x10 | |
指定した優先度との論理和をとると、指定した優先度かそれ以上の優先度を指定したことになります。 nlib_log_attr_setint() で利用することができます。 [詳解] | |
NLIB_LOG_LEVEL_EQUAL_OR_BELOW = 0x20 | |
指定した優先度との論理和をとると、指定した優先度かそれ以下の優先度を指定したことになります。 nlib_log_attr_setint() で利用することができます。 [詳解] | |
NLIB_LOG_LEVEL_ALL = 0x30 | |
全ての優先度を指定します。nlib_log_attr_setint() で利用することができます。 [詳解] | |
ファイル | |
#define | NLIB_FD_O_RDONLY (0x0000) |
nlib_fd_open() のflags 引数で使われます。 | |
#define | NLIB_FD_O_WRONLY (0x0001) |
nlib_fd_open() のflags 引数で使われます。 | |
#define | NLIB_FD_O_RDWR (0x0002) |
nlib_fd_open() のflags 引数で使われます。 | |
#define | NLIB_FD_O_APPEND (0x0008) |
nlib_fd_open() のflags 引数で使われます。 | |
#define | NLIB_FD_O_CREAT (0x0100) |
nlib_fd_open() のflags 引数で使われます。 | |
#define | NLIB_FD_O_TRUNC (0x0800) |
nlib_fd_open() のflags 引数で使われます。 | |
#define | NLIB_SEEK_SET 0 |
nlib_fd_seek() のwhence 引数で使われます。 | |
#define | NLIB_SEEK_CUR 1 |
nlib_fd_seek() のwhence 引数で使われます。 | |
#define | NLIB_FD_INVALID (-1) |
無効なファイルディスクリプタを定義したマクロです。 | |
NLIB_CHECK_RESULT errno_t | nlib_fd_open (nlib_fd *fd, const char *native_path, unsigned int flags, const void *extra) |
ファイルをオープンします。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_fd_close (nlib_fd fd) |
ファイルをクローズします。エラーを返した場合でもファイルディスクリプタは解放されます。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_fd_read (size_t *result, nlib_fd fd, void *buf, size_t count) |
ファイルディスクリプタから、(最大)count バイトをbuf に読むこみます。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_fd_write (size_t *result, nlib_fd fd, const void *buf, size_t count) |
ファイルディスクリプタへ、(最大)count バイトをbuf から書きこみます。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_fd_seek (nlib_offset *result, nlib_fd fd, nlib_offset offset, int whence) |
ファイルのオフセットを変更する。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_fd_pread (size_t *result, nlib_fd fd, void *buf, size_t count, nlib_offset offset) |
指定したオフセットでファイルディスクリプタから読みこみます。ファイルディスクリプタのオフセットは変更されません。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_fd_pwrite (size_t *result, nlib_fd fd, const void *buf, size_t count, nlib_offset offset) |
指定したオフセットでファイルディスクリプタに書きこみます。ファイルディスクリプタのオフセットは変更されません。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_fd_truncate (nlib_fd fd, nlib_offset length) |
指定した長さにファイルを延長、もしくは切り詰める。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_fd_getsize (nlib_offset *size, nlib_fd fd) |
ファイルサイズを取得します。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_fd_flush (nlib_fd fd) |
ファイルディスクリプタへの書き込みをフラッシュします。 [詳解] | |
errno_t | nlib_fd_sync (nlib_fd fd) |
メモリにあるファイルの内容をデバイス上のものと同期させます。 [詳解] | |
errno_t | nlib_fd_native_handle (void **native_handle, nlib_fd fd) |
ネイティブのファイルハンドル(に相当するもの)を取得する。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_fd_readv (size_t *result, nlib_fd fd, const nlib_fd_iovec *iov, int iovcnt) |
fd に関連付けられたファイルから複数の非連続なバッファへの読み込みを行います。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_fd_writev (size_t *result, nlib_fd fd, const nlib_fd_iovec *iov, int iovcnt) |
複数の非連続なバッファからfd に関連付けられたファイルへの書き込みを行います。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_fd_preadv (size_t *result, nlib_fd fd, const nlib_fd_iovec *iov, int iovcnt, nlib_offset offset) |
内部でpread() 又はnlib_fd_pread() を使うこと以外は、nlib_fd_readv() と同様です。 | |
NLIB_CHECK_RESULT errno_t | nlib_fd_pwritev (size_t *result, nlib_fd fd, const nlib_fd_iovec *iov, int iovcnt, nlib_offset offset) |
内部でpwrite() 又はnlib_fd_pwrite() を使うこと以外は、nlib_fd_writev() と同様です。 | |
NLIB_CHECK_RESULT errno_t | nlib_unlink (const char *native_path) |
ファイルを削除する [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_mkdir (const char *native_path, unsigned int flags) |
ディレクトリを作成する [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_rmdir (const char *native_path) |
ディレクトリを削除する [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_rename (const char *old_path, const char *new_path) |
ファイル名の変更する [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_dir_open (nlib_dir *dir, const char *native_path) |
ディレクトリをオープンする [詳解] | |
errno_t | nlib_dir_close (nlib_dir dir) |
ディレクトリをクローズする [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_dir_read (nlib_dirent *ent, nlib_dir dir) |
ディレクトリエントリがあればそれをを1つ読み込む。 [詳解] | |
errno_t | nlib_is_dir (int *result, const char *native_path) |
パスがディレクトリかどうかを検査します。パスが存在しない場合は*result に0を設定し、0を返します。 [詳解] | |
errno_t | nlib_exist_path (int *result, const char *native_path) |
パスが存在するかどうかを検査します。 [詳解] | |
errno_t | nlib_disk_freespace (const char *native_path, uint64_t *free_bytes_available, uint64_t *total_bytes, uint64_t *total_free_bytes) |
指定されたパスが属するストレージの容量に関する情報を取得します。 [詳解] | |
typedef int64_t | nlib_offset |
ファイルへのオフセットです。64bit整数です。 | |
typedef int | nlib_fd |
(nlib 独自の)ファイルディスクリプタで、32bit整数です。 [詳解] | |
ユニコード | |
NLIB_CHECK_RESULT int | nlib_utf16_to_utf32char (nlib_utf32_t *utf32, nlib_utf16_t upper, nlib_utf16_t lower) noexcept |
1つのコードポイントをUTF-16からUTF-32に変換します。 [詳解] | |
NLIB_CHECK_RESULT int | nlib_utf32char_to_utf16 (nlib_utf16_t *upper, nlib_utf16_t *lower, nlib_utf32_t utf32) noexcept |
1つのUTF-32文字をUTF-16に変換します。 [詳解] | |
NLIB_CHECK_RESULT int | nlib_utf8_to_utf32char (nlib_utf32_t *utf32, const char *utf8) noexcept |
UTF-8を1文字分のUTF-32に変換します。 [詳解] | |
NLIB_CHECK_RESULT int | nlib_utf32char_to_utf8 (char(&utf8)[4], nlib_utf32_t utf32) noexcept |
1文字のUTF-32をUTF-8に変換します。 [詳解] | |
errno_t | nlib_wide_to_utf8 (size_t *utf8count, char *utf8, size_t buflen, const wchar_t *wcstr) |
UTF-16/UTF-32文字列からUTF-8文字列に変換します。 [詳解] | |
template<size_t N> | |
NLIB_CHECK_RESULT errno_t | nlib_wide_to_utf8 (size_t *result, char(&utf8)[N], const wchar_t *wcstr) noexcept |
nlib_wide_to_utf8() の関数テンプレート版です。 | |
errno_t | nlib_utf8_to_wide (size_t *wccount, wchar_t *wcstr, size_t buflen, const char *utf8) |
UTF-8文字列からUTF-16/UTF-32文字列に変換します。 [詳解] | |
template<size_t N> | |
NLIB_CHECK_RESULT errno_t | nlib_utf8_to_wide (size_t *result, wchar_t(&wcstr)[N], const char *utf8) noexcept |
nlib_utf8_to_wide() の関数テンプレート版です。 | |
errno_t | nlib_utf16_to_utf8 (size_t *utf8count, char *utf8, size_t buflen, const nlib_utf16_t *utf16) noexcept |
UTF-16文字列からUTF-8文字列に変換します。 [詳解] | |
template<size_t N> | |
NLIB_CHECK_RESULT errno_t | nlib_utf16_to_utf8 (size_t *utf8count, char(&utf8)[N], const nlib_utf16_t *utf16) noexcept |
nlib_utf16_to_utf8() の関数テンプレート版です。 | |
errno_t | nlib_utf8_to_utf16 (size_t *utf16count, nlib_utf16_t *utf16, size_t buflen, const char *utf8) noexcept |
UTF-8文字列からUTF-16文字列に変換します。UTF-16文字列はヌル終端されます。 [詳解] | |
template<size_t N> | |
NLIB_CHECK_RESULT errno_t | nlib_utf8_to_utf16 (size_t *utf16count, nlib_utf16_t(&utf16)[N], const char *utf8) noexcept |
nlib_utf8_to_utf16() の関数テンプレート版です。 | |
errno_t | nlib_utf32_to_utf8 (size_t *utf8count, char *utf8, size_t buflen, const nlib_utf32_t *utf32) noexcept |
UTF-32文字列からUTF-8文字列に変換します。 [詳解] | |
template<size_t N> | |
NLIB_CHECK_RESULT errno_t | nlib_utf32_to_utf8 (size_t *utf8count, char(&utf8)[N], const nlib_utf32_t *utf32) noexcept |
nlib_utf32_to_utf8() の関数テンプレート版です。 | |
errno_t | nlib_utf8_to_utf32 (size_t *utf32count, nlib_utf32_t *utf32, size_t buflen, const char *utf8) noexcept |
UTF-8文字列からUTF-32文字列に変換します。 [詳解] | |
template<size_t N> | |
NLIB_CHECK_RESULT errno_t | nlib_utf8_to_utf32 (size_t *utf32count, nlib_utf32_t(&utf32)[N], const char *utf8) noexcept |
nlib_utf8_to_utf32() の関数テンプレート版です。 | |
NLIB_CHECK_RESULT size_t | nlib_utf16len (const nlib_utf16_t *str) noexcept |
ヌル文字を含まないnlib_utf16_t の数を数えます。 [詳解] | |
NLIB_CHECK_RESULT size_t | nlib_utf16nlen (const nlib_utf16_t *str, size_t maxsize) noexcept |
nlib_strnlen() のUTF-16版です。 [詳解] | |
errno_t | nlib_utf16cpy (nlib_utf16_t *s1, size_t s1max, const nlib_utf16_t *s2) noexcept |
nlib_strcpy() のUTF-16版です。 [詳解] | |
errno_t | nlib_utf16ncpy (nlib_utf16_t *s1, size_t s1max, const nlib_utf16_t *s2, size_t n) noexcept |
nlib_strcpy() のUTF-16版です。 [詳解] | |
NLIB_CHECK_RESULT size_t | nlib_utf32len (const nlib_utf32_t *str) noexcept |
ヌル文字を含まないnlib_utf32_t の数を数えます。 [詳解] | |
NLIB_CHECK_RESULT size_t | nlib_utf32nlen (const nlib_utf32_t *str, size_t maxsize) noexcept |
nlib_strnlen() のUTF-32版です。 [詳解] | |
errno_t | nlib_utf32cpy (nlib_utf32_t *s1, size_t s1max, const nlib_utf32_t *s2) noexcept |
nlib_strcpy() のUTF-32版です。 [詳解] | |
errno_t | nlib_utf32ncpy (nlib_utf32_t *s1, size_t s1max, const nlib_utf32_t *s2, size_t n) noexcept |
nlib_strcpy() のUTF-32版です。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_strcplen (size_t *count, const char *str) |
文字列中のコードポイントの数を取得します。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_strcplen_ex (size_t *count, size_t *len, const char *str) |
文字列中のコードポイントの数と文字列長を取得します。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_wcscplen (size_t *count, const wchar_t *str) |
文字列中のコードポイントの数を取得します。 [詳解] | |
errno_t | nlib_utf16cplen (size_t *count, const nlib_utf16_t *str) noexcept |
文字列中のコードポイントの数を取得します。 [詳解] | |
errno_t | nlib_utf16cplen_ex (size_t *count, size_t *len, const nlib_utf16_t *str) noexcept |
文字列中のコードポイントの数を取得します。 [詳解] | |
NLIB_CHECK_RESULT errno_t | nlib_utf32cplen (size_t *count, const nlib_utf32_t *str) noexcept |
文字列中のコードポイントの数を取得します。 [詳解] | |
errno_t | nlib_swapendian_16 (uint16_t *p, size_t count) |
エンディアンを変換します。 [詳解] | |
errno_t | nlib_swapendian_32 (uint32_t *p, size_t count) |
エンディアンを変換します。 [詳解] | |
errno_t | nlib_swapendian_64 (uint64_t *p, size_t count) |
エンディアンを変換します。 [詳解] | |
typedef uint16_t | nlib_utf16_t |
char16_t が利用できる場合はchar16_t に、そうでない場合はuint16_t にtypedef されます。 | |
typedef uint32_t | nlib_utf32_t |
char32_t が利用できる場合はchar32_t に、そうでない場合はuint32_t にtypedef されます。 | |
count leading zeros, count trailing zeros, popcnt | |
int | nlib_clz (uint32_t x) |
MSB(most significant bit)から見て連続する0ビットの数を返します。 [詳解] | |
int | nlib_clz64 (uint64_t x) |
MSB(most significant bit)から見て連続する0ビットの数を返します。 [詳解] | |
int | nlib_ctz (uint32_t x) |
LSB(least significant bit)から見て連続する0ビットの数を返します。 [詳解] | |
int | nlib_ctz64 (uint64_t x) |
LSB(least significant bit)から見て連続する0ビットの数を返します。 [詳解] | |
int | nlib_popcnt (uint32_t x) |
1となっているビットの数を返します。 [詳解] | |
int | nlib_popcnt64 (uint64_t x) |
1となっているビットの数を返します。 [詳解] | |
int | nlib_popcnt16 (uint16_t x) |
1となっているビットの数を返します。 [詳解] | |
malloc | |
NLIB_CHECK_RESULT void * | nlib_malloc (size_t size) |
C標準関数のmalloc() を呼び出すweak関数です。nlib はこの関数を経由してmalloc() を呼び出します。 [詳解] | |
void | nlib_free (void *ptr) |
C標準関数のfree() を呼び出すweak関数です。nlib はこの関数を経由してfree() を呼び出します。 [詳解] | |
void | nlib_free_size (void *ptr, size_t size) |
サイズを指定してメモリを解放します。デフォルトではnlib_free() を呼び出します。 [詳解] | |
NLIB_CHECK_RESULT void * | nlib_calloc (size_t nmemb, size_t size) |
C標準関数のcalloc() を呼び出すweak関数です。nlib はこの関数を経由してcalloc() を呼び出します。 [詳解] | |
NLIB_CHECK_RESULT void * | nlib_realloc (void *ptr, size_t size) |
C標準関数のrealloc() を呼び出すweak関数です。nlib はこの関数を経由してrealloc() を呼び出します。 [詳解] | |
NLIB_CHECK_RESULT void * | nlib_memalign (size_t alignment, size_t size) |
memalign() を呼び出すweak関数です。nlib はこの関数を経由してmemalign() を呼び出します。 [詳解] | |
Cリンケージを持つnlib
の最も基本的なAPIです。
#define NLIB_ALWAYS_INLINE inline __attribute__((always_inline)) |
コンパイラに関数をインライン展開するように強く示します。
Platform | Definition |
---|---|
Win32 | __forceinline |
Linux | inline __attribute__((always_inline)) |
FreeBSD | inline __attribute__((always_inline)) |
OS X | inline __attribute__((always_inline)) |
CAFE | inline __attribute__((always_inline)) |
CTR | __forceinline |
Platform_unix.h の 59 行目に定義があります。
NLIB_ASSUME | ( | cond | ) | switch (0) case 0: default: if (cond) ; else __builtin_unreachable() /* NOLINT */ |
cond
が真であることを示してコンパイラに最適化のヒントを与えます。
[in] | cond | 真であると仮定される式 |
switch
文を最適化出来る場合があります。 Platform.h の 393 行目に定義があります。
#define NLIB_ATTRIBUTE_MALLOC __attribute__((malloc)) |
利用可能であれば__attribute__((malloc))
が定義されます。
Platform | Definition |
---|---|
Win32 | 空文字列 |
Linux | __attribute__((malloc)) |
FreeBSD | __attribute__((malloc)) |
OS X | __attribute__((malloc)) |
CAFE | __attribute__((malloc)) |
CTR | __attribute__((malloc)) |
Platform_unix.h の 73 行目に定義があります。
#define NLIB_CHECK_RESULT __attribute__((warn_unused_result)) |
関数の呼び出し元が戻り値をチェックする必要があることを示します。
Platform | Definition |
---|---|
Win32 | _Check_return_ |
Linux | __attribute__((warn_unused_result)) |
FreeBSD | __attribute__((warn_unused_result)) |
OS X | __attribute__((warn_unused_result)) |
CAFE | __attribute__((warn_unused_result)) |
CTR | 空文字列 |
Platform_unix.h の 64 行目に定義があります。
#define NLIB_DEPRECATED __attribute__((deprecated)) |
関数等がdeprecatedになったことを示します。
Platform | Definition |
---|---|
Win32 | __declspec(deprecated) |
Linux | __attribute__((deprecated)) |
FreeBSD | __attribute__((deprecated)) |
OS X | __attribute__((deprecated)) |
CAFE | __attribute__((deprecated)) |
CTR | 空文字列(前置形式が不可能なため) |
Platform_unix.h の 105 行目に定義があります。
#define NLIB_DEPRECATED_MSG | ( | msg | ) | __attribute__((deprecated(msg))) |
関数等がdeprecatedになったことを示します。
[in] | msg | 警告メッセージ |
Platform | Definition |
---|---|
Win32 | __declspec(deprecated(msg)) |
Linux | __attribute__((deprecated(msg))) |
FreeBSD | __attribute__((deprecated(msg))) |
OS X | __attribute__((deprecated(msg))) |
CAFE | __attribute__((deprecated(msg))) |
CTR | 空文字列(前置形式が不可能なため) |
Platform_unix.h の 106 行目に定義があります。
#define NLIB_LIKELY | ( | x | ) | __builtin_expect(!!(x), 1) |
条件xが真になる傾向が高いことをコンパイラに示します。
[in] | x | 条件式 |
Platform | Definition |
---|---|
Win32 | (x) |
Linux | __builtin_expect(!!(x), 1) |
FreeBSD | __builtin_expect(!!(x), 1) |
OS X | __builtin_expect(!!(x), 1) |
CAFE | __builtin_expect(!!(x), 1) |
CTR | __builtin_expect(!!(x), 1) |
Platform_unix.h の 61 行目に定義があります。
#define NLIB_NEVER_INLINE __attribute__((__noinline__)) |
コンパイラに関数をインライン展開しないように示します。
Platform | Definition |
---|---|
Win32 | __declspec(noinline) |
Linux | __attribute__((__noinline__)) |
FreeBSD | __attribute__((__noinline__)) |
OS X | __attribute__((__noinline__)) |
CAFE | __attribute__((__noinline__)) |
CTR | __declspec(noinline) |
Platform_unix.h の 60 行目に定義があります。
#define NLIB_NONNULL __attribute__((nonnull)) |
全ての引数にNULL
を指定することができないことを示します。
NULL
を渡した場合にはコンパイル時に警告が出ます。 Platform | Definition |
---|---|
Win32 | 空文字列 |
Linux | __attribute__((nonnull)) |
FreeBSD | __attribute__((nonnull)) |
OS X | __attribute__((nonnull)) |
CAFE | __attribute__((nonnull)) |
CTR | __attribute__((nonnull)) |
Platform_unix.h の 66 行目に定義があります。
#define NLIB_NONNULL_1 __attribute__((nonnull (1))) |
1番目の引数にNULL
を指定することができないことを示します。
NULL
を渡した場合にはコンパイル時に警告が出ます。 Platform | Definition |
---|---|
Win32 | 空文字列 |
Linux | __attribute__((nonnull (1))) |
FreeBSD | __attribute__((nonnull (1))) |
OS X | __attribute__((nonnull (1))) |
CAFE | __attribute__((nonnull (1))) |
CTR | __attribute__((nonnull (1))) |
Platform_unix.h の 67 行目に定義があります。
#define NLIB_NONNULL_2 __attribute__((nonnull (2))) |
2番目の引数にNULL
を指定することができないことを示します。
NULL
を渡した場合にはコンパイル時に警告が出ます。 Platform | Definition |
---|---|
Win32 | 空文字列 |
Linux | __attribute__((nonnull (2))) |
FreeBSD | __attribute__((nonnull (2))) |
OS X | __attribute__((nonnull (2))) |
CAFE | __attribute__((nonnull (2))) |
CTR | __attribute__((nonnull (2))) |
Platform_unix.h の 68 行目に定義があります。
#define NLIB_NONNULL_3 __attribute__((nonnull (3))) |
3番目の引数にNULL
を指定することができないことを示します。
NULL
を渡した場合にはコンパイル時に警告が出ます。 Platform | Definition |
---|---|
Win32 | 空文字列 |
Linux | __attribute__((nonnull (3))) |
FreeBSD | __attribute__((nonnull (3))) |
OS X | __attribute__((nonnull (3))) |
CAFE | __attribute__((nonnull (3))) |
CTR | __attribute__((nonnull (3))) |
Platform_unix.h の 69 行目に定義があります。
#define NLIB_NONNULL_4 __attribute__((nonnull (4))) |
4番目の引数にNULL
を指定することができないことを示します。
NULL
を渡した場合にはコンパイル時に警告が出ます。 Platform | Definition |
---|---|
Win32 | 空文字列 |
Linux | __attribute__((nonnull (4))) |
FreeBSD | __attribute__((nonnull (4))) |
OS X | __attribute__((nonnull (4))) |
CAFE | __attribute__((nonnull (4))) |
CTR | __attribute__((nonnull (4))) |
Platform_unix.h の 70 行目に定義があります。
#define NLIB_NONNULL_5 __attribute__((nonnull (5))) |
5番目の引数にNULL
を指定することができないことを示します。
NULL
を渡した場合にはコンパイル時に警告が出ます。 Platform | Definition |
---|---|
Win32 | 空文字列 |
Linux | __attribute__((nonnull (5))) |
FreeBSD | __attribute__((nonnull (5))) |
OS X | __attribute__((nonnull (5))) |
CAFE | __attribute__((nonnull (5))) |
CTR | __attribute__((nonnull (5))) |
Platform_unix.h の 71 行目に定義があります。
#define NLIB_NORETURN __attribute__((noreturn)) |
関数がリターンしないことを示します。
Platform | Definition |
---|---|
Win32 | 空文字列_ |
Linux | __attribute__((noreturn)) |
FreeBSD | __attribute__((noreturn)) |
OS X | __attribute__((noreturn)) |
CAFE | __attribute__((noreturn)) |
CTR | __attribute__((noreturn)) |
Platform_unix.h の 65 行目に定義があります。
#define NLIB_RWLOCK_INITIALIZER |
nlib_rwlock
を静的に初期化するための定数です。
nlib_condrwlock
を静的に初期化するための定数です。
Platform.h の 691 行目に定義があります。
#define NLIB_UNLIKELY | ( | x | ) | __builtin_expect(!!(x), 0) |
条件xが偽になる傾向が高いことをコンパイラに示します。
[in] | x | 条件式 |
Platform | Definition |
---|---|
Win32 | (x) |
Linux | __builtin_expect(!!(x), 0) |
FreeBSD | __builtin_expect(!!(x), 0) |
OS X | __builtin_expect(!!(x), 0) |
CAFE | __builtin_expect(!!(x), 0) |
CTR | __builtin_expect(!!(x), 0) |
Platform_unix.h の 62 行目に定義があります。
#define NLIB_VIS_HIDDEN __attribute__((visibility("hidden"))) |
関数やクラス等のシンボルをライブラリの外部に公開しません。
-fvisibility=hidden
オプションを渡してコンパイルすると、シンボルの非公開がデフォルトになります。 Platform | Definition |
---|---|
Win32 | 空文字列 |
Linux | __attribute__((visibility("hidden"))), cygwin環境では空文字列 |
FreeBSD | __attribute__((visibility("hidden"))) |
OS X | __attribute__((visibility("hidden"))) |
CAFE | 空文字列 |
CTR | 空文字列 |
Platform_unix.h の 50 行目に定義があります。
#define NLIB_VIS_PUBLIC __attribute__((visibility("default"))) |
関数やクラス等のシンボルをライブラリの外部に公開します。
-fvisibility=hidden
オプションを渡してコンパイルした場合、明示的にシンボルを公開する必要があります。 そのような場合にこのマクロを使う必要があります。 Platform | Definition |
---|---|
Win32 | DLL版を利用する場合は__declspec(dllimport)、そうでない場合は空文字列 |
Linux | __attribute__((visibility("default"))), cygwin環境では空文字列 |
FreeBSD | __attribute__((visibility("default"))) |
OS X | __attribute__((visibility("default"))) |
CAFE | 空文字列 |
CTR | 空文字列 |
Platform_unix.h の 51 行目に定義があります。
NLIB_WARN | ( | exp | ) | ("WARNING: " exp) |
ワーニングを出力します。
[in] | exp | 警告メッセージ |
#pragma message NLIB_WARN("message")
のよう記述して利用します。 Platform.h の 302 行目に定義があります。
#define NLIB_WEAKSYMBOL __attribute__((weak)) |
ウィークシンボルを定義するために利用します。
Platform | Definition |
---|---|
Win32 | 空文字列 |
Linux | __attribute__((weak)), cygwin環境では空文字列 |
FreeBSD | __attribute__((weak)) |
OS X | __attribute__((weak)) |
CAFE | __attribute__((weak)) |
CTR | __attribute__((weak)) |
Platform_unix.h の 52 行目に定義があります。
#define RSIZE_MAX 0x7FFFFFFFL |
size_t
の最大値よりいくらか小さい値が定義されています。
Platform.h の 295 行目に定義があります。
バリアオブジェクトの型です。
Platform | implementation |
---|---|
Win32 | nlibによる実装 |
Linux | pthread_barrier_t |
FreeBSD | pthread_barrier_t |
OS X | nlibによる実装 |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
Platform.h の 754 行目に定義があります。
条件変数オブジェクトの型です。
Platform | implementation |
---|---|
Win32 | CONDITION_VARIABLE |
Linux | pthread_cond_t |
FreeBSD | pthread_cond_t |
OS X | pthread_cond_t |
CAFE | OSFastCond |
CTR | nn::os::Event |
Platform_unix.h の 176 行目に定義があります。
リードライトロック用の条件変数の型です。
nlib_cond
とnlib_mutex
を持つ構造体として定義されます。 ただし、Windowsの条件変数(CONDITION_VARIABLE
)はリードライトロックを直接待てることから条件変数のみを持っています。 (nlib
独自の)ファイルディスクリプタで、32bit整数です。
Platform | implementation |
---|---|
Win32 | nlibによる実装 |
Linux | ネイティブのファイルディスクリプタに一致 |
FreeBSD | ネイティブのファイルディスクリプタに一致 |
OS X | ネイティブのファイルディスクリプタに一致 |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
Platform.h の 1051 行目に定義があります。
ミューテックス変数の型です。
Platform | implementation |
---|---|
Win32 | HANDLE又はCRITICAL_SECTION |
Linux | pthread_mutex_t |
FreeBSD | pthread_mutex_t |
OS X | pthread_mutex_t |
CAFE | OSFastMutex |
CTR | nn::os::CriticalSection |
Platform_unix.h の 137 行目に定義があります。
リードライトロックオブジェクトの型です。
Platform | implementation |
---|---|
Win32 | SRWLOCK |
Linux | pthread_rwlock_t |
FreeBSD | pthread_rwlock_t |
OS X | pthread_rwlock_t |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
Platform.h の 689 行目に定義があります。
セマフォオブジェクトの型です。
Platform | implementation |
---|---|
Win32 | HANDLE |
Linux | sem_t |
FreeBSD | sem_t |
OS X | int(sem_tでないことに注意) |
CAFE | OSSemaphore |
CTR | nn::os::Semaphore\ |
Platform_unix.h の 173 行目に定義があります。
スピンロック変数の型です。NLIB_SPINLOCK_INITIALIZER
により静的に初期化して利用します。
Platform | implementation |
---|---|
Win32 | int32_t |
Linux | int32_t |
FreeBSD | int32_t |
OS X | OSSpinLock |
CAFE | OSSpinLock |
CTR | int32_t |
Platform.h の 837 行目に定義があります。
スレッドを指し示す識別子
Platform | implementation |
---|---|
Win32 | HANDLE |
Linux | pthread_t |
FreeBSD | pthread_t |
OS X | pthread_t |
CAFE | OSThread* |
CTR | nn::os::Thread* |
Platform_unix.h の 179 行目に定義があります。
void(* nlib_thread_func)(void *arg) |
void(* nlib_tls_destructor)(void *tls_value) |
スレッド終了時に呼び出されるTLSのデストラクタ関数の型です。
[in] | tls_value | TLSスロットに格納されている値 |
nlib_tls_setvalue()
を使って値を設定した場合、メモリリーク等を抑止するために再度そのTLSに対応するデストラクタが実行される実装が一般的です。 ただし、現在のところCTR, cygwinでは再度のデストラクタの実行は行われません。 Platform.h の 575 行目に定義があります。
enum nlib_log_priority |
出力の優先度(種類)を定義しています。
nlib_log_print()
, nlib_log_vprint()
, nlib_log_attr_setint()
のprio
引数に対して利用することができます。 列挙値 | |
---|---|
NLIB_LOG_VERBOSE |
詳細レベルのメッセージを出力するときに指定します。 |
NLIB_LOG_DEBUG |
デバッグレベルのメッセージを出力するときに指定します。 |
NLIB_LOG_INFO |
情報レベルのメッセージを出力するときに指定します。 |
NLIB_LOG_WARN |
警告レベルのメッセージを出力するときに指定します。 |
NLIB_LOG_ERROR |
エラーレベルのメッセージを出力するときに指定します。 |
NLIB_LOG_FATAL |
致命的なレベルのメッセージを出力するときに指定します。 |
NLIB_LOG_LEVEL_EQUAL_OR_ABOVE |
指定した優先度との論理和をとると、指定した優先度かそれ以上の優先度を指定したことになります。 |
NLIB_LOG_LEVEL_EQUAL_OR_BELOW |
指定した優先度との論理和をとると、指定した優先度かそれ以下の優先度を指定したことになります。 |
NLIB_LOG_LEVEL_ALL |
全ての優先度を指定します。 |
Platform.h の 959 行目に定義があります。
nlib_barrier_destroy | ( | nlib_barrier * | barrier | ) |
バリアオブジェクトを破壊します。
[in] | barrier | バリアオブジェクト |
0 | 成功した場合 |
EINVAL | barrier がNULL である場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | nlibによる実装 |
Linux | pthread_barrier_destroy() |
FreeBSD | pthread_barrier_destroy() |
OS X | nlibによる実装 |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_barrier_init | ( | nlib_barrier * | barrier, |
unsigned int | count | ||
) |
バリアオブジェクトを初期化します。
[in,out] | barrier | バリアオブジェクト |
[in] | count | 待ち合わせするスレッドの数 |
0 | 成功した場合 |
EINVAL | barrier がNULL である場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | nlibによる実装 |
Linux | pthread_barrier_init() |
FreeBSD | pthread_barrier_init() |
OS X | nlibによる実装 |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_barrier_wait | ( | nlib_barrier * | barrier | ) |
スレッドの待ち合わせを行います。
[in] | barrier | バリアオブジェクト |
0 | 成功した場合 |
EINVAL | barrier がNULL である場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | nlibによる実装 |
Linux | pthread_barrier_wait() |
FreeBSD | pthread_barrier_wait() |
OS X | nlibによる実装 |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_calloc | ( | size_t | nmemb, |
size_t | size | ||
) |
C標準関数のcalloc()
を呼び出すweak関数です。nlib
はこの関数を経由してcalloc()
を呼び出します。
[in] | nmemb | 要素の数 |
[in] | size | 各要素のバイト単位の長さ |
nlib
のメモリ確保をカスタマイズすることが可能です。 nlib_clz | ( | uint32_t | x | ) |
MSB(most significant bit)から見て連続する0ビットの数を返します。
[in] | x | 検索対象の32ビット値 |
Platform | implementation |
---|---|
Win32 | _BitScanReverse() |
Linux | __builtin_clz() |
FreeBSD | __builtin_clz() |
OS X | __builtin_clz() |
CAFE | __CLZ32() |
CTR | __builtin_clz() |
nlib_clz64 | ( | uint64_t | x | ) |
MSB(most significant bit)から見て連続する0ビットの数を返します。
[in] | x | 検索対象の64ビット値 |
Platform | implementation |
---|---|
Win32 | _BitScanReverse64()又は_BitScanReverse() |
Linux | __builtin_clzll() |
FreeBSD | __builtin_clzll() |
OS X | __builtin_clzll() |
CAFE | __CLZ32() |
CTR | __builtin_clzll() |
nlib_cond_broadcast | ( | nlib_cond * | cond | ) |
条件変数cond
を待っているスレッド全ての実行を再開させます。
[in] | cond | 条件変数オブジェクト |
0 | 成功した場合 |
EINVAL | cond がNULL である場合 |
Platform | implementation |
---|---|
Win32 | WakeAllConditionVariable() |
Linux | pthread_cond_broadcast() |
FreeBSD | pthread_cond_broadcast() |
OS X | pthread_cond_broadcast() |
CAFE | OSFastCond_Signal() |
CTR | Event::Signal() |
nlib_cond_destroy | ( | nlib_cond * | cond | ) |
条件変数オブジェクトを破壊します。
[in] | cond | 条件変数オブジェクト |
0 | 成功した場合 |
EINVAL | cond がNULL である場合 |
Platform | implementation |
---|---|
Win32 | システムコールは呼び出されません |
Linux | pthread_cond_destroy() |
FreeBSD | pthread_cond_destroy() |
OS X | pthread_cond_destroy() |
CAFE | システムコールは呼び出されません |
CTR | Event::~Event() |
nlib_cond_init | ( | nlib_cond * | cond | ) |
条件変数を初期化します。
[in] | cond | 条件変数オブジェクト |
0 | 成功した場合 |
EINVAL | cond がNULL である場合 |
Platform | implementation |
---|---|
Win32 | InitializeConditionVariable() |
Linux | pthread_cond_init() |
FreeBSD | pthread_cond_init() |
OS X | pthread_cond_init() |
CAFE | OSFastCond_Init() |
CTR | Event::TryInitialize(true) |
nlib_cond_signal | ( | nlib_cond * | cond | ) |
条件変数cond
を待っているスレッドの1つの実行を再開させます。
[in] | cond | 条件変数オブジェクト |
0 | 成功した場合 |
EINVAL | cond がNULL である場合 |
Platform | implementation |
---|---|
Win32 | WakeConditionVariable() |
Linux | pthread_cond_signal() |
FreeBSD | pthread_cond_signal() |
OS X | pthread_cond_signal() |
CAFE | OSFastCond_Signal() |
CTR | Event::Signal() |
nlib_cond_wait | ( | nlib_cond * | cond, |
nlib_mutex * | mutex | ||
) |
mutex
をアンロックし、条件変数を待機します。実行が再開したらmutex
を再ロックします。
[in] | cond | 条件変数オブジェクト |
[in] | mutex | ミューテックスオブジェクト |
0 | 成功した場合 |
EINVAL | cond がNULL である場合 |
mutex
は呼び出し前に1回だけロックされている必要があります。 Platform | implementation |
---|---|
Win32 | SleepConditionVariableCS() |
Linux | pthread_cond_wait() |
FreeBSD | pthread_cond_wait() |
OS X | pthread_cond_wait() |
CAFE | OSFastCond_Wait() |
CTR | Event::Wait() + Event::ClearSignal() |
mutex
をアンロックしてから再ロックするまでがatomicな動作ではありません。 nlib_cond_wait_for | ( | nlib_cond * | cond, |
nlib_mutex * | mutex, | ||
nlib_duration | duration | ||
) |
mutex
をアンロックし、条件変数をduration
の間だけ待機します。実行が再開したらmutex
を再ロックします。
[in] | cond | 条件変数オブジェクト |
[in] | mutex | ミューテックスオブジェクト |
[in] | duration | タイムアウト時間 |
0 | 成功した場合 |
ETIMEDOUT | タイムアウトした場合 |
EINVAL | cond がNULL である場合 |
mutex
は呼び出し前に1回だけロックされている必要があります。 Platform | implementation |
---|---|
Win32 | SleepConditionVariableCS() |
Linux | pthread_cond_timedwait(), errnoがEINTR の場合は内部で再度実行される。 |
FreeBSD | pthread_cond_timedwait(), errnoがEINTR の場合は内部で再度実行される。 |
OS X | pthread_cond_timedwait(), errnoがEINTR の場合は内部で再度実行される。 |
CAFE | nlib_sleep() |
CTR | Event::Wait() + Event::ClearSignal() |
mutex
をアンロックしてから再ロックするまでがatomicな動作ではありません。 CAFEの場合は、mutex
をアンロックし100usecスリープしてからmutex
を再ロックし0を返します。 duration
が負の場合はETIMEDOUT
を返します。 nlib_cond_wait_until | ( | nlib_cond * | cond, |
nlib_mutex * | mutex, | ||
nlib_time | abstime | ||
) |
mutex
をアンロックし、条件変数をabstime
まで待機します。実行が再開したらmutex
を再ロックします。
[in] | cond | 条件変数オブジェクト |
[in] | mutex | ミューテックスオブジェクト |
[in] | abstime | タイムアウト時刻 |
0 | 成功した場合 |
ETIMEDOUT | タイムアウトした場合 |
EINVAL | cond がNULL である場合 |
nlib_cond_wait_for()
より確実に動作するといえるでしょう。 mutex
は呼び出し前に1回だけロックされている必要があります。 Platform | implementation |
---|---|
Win32 | nlib_epochtime() + nlib_cond_wait_for() |
Linux | pthread_cond_timedwait() |
FreeBSD | pthread_cond_timedwait() |
OS X | pthread_cond_timedwait() |
CAFE | nlib_epochtime() + nlib_sleep() |
CTR | Event::Wait() + Event::ClearSignal() |
mutex
をアンロックしてから再ロックするまでがatomicな動作ではありません。 CAFEの場合は、mutex
をアンロックし、100usecスリープしてから、mutex
を再ロックし、0を返します。 現在時刻がabstime
以降ならばETIMEDOUT
を返します。 nlib_condrwlock_broadcast | ( | nlib_condrwlock * | cond | ) |
リードライトロック用条件変数cond
を待っているスレッド全ての実行を再開させます。
[in] | cond | リードライトロック用条件変数 |
0 | 成功した場合 |
EINVAL | cond がNULL である場合 |
Platform | implementation |
---|---|
Win32 | WakeAllConditionVariable() |
Linux | nlib_mutex_lock(), nlib_cond_broadcast(), nlib_mutex_unlock() |
FreeBSD | nlib_mutex_lock(), nlib_cond_broadcast(), nlib_mutex_unlock() |
OS X | nlib_mutex_lock(), nlib_cond_broadcast(), nlib_mutex_unlock() |
CAFE | nlib_mutex_lock(), nlib_cond_broadcast(), nlib_mutex_unlock() |
CTR | nlib_mutex_lock(), nlib_cond_broadcast(), nlib_mutex_unlock() |
nlib_condrwlock_destroy | ( | nlib_condrwlock * | cond | ) |
リードライトロック用条件変数を破壊します。
[in] | cond | リードライトロック用条件変数 |
0 | 成功した場合 |
EINVAL | cond がNULL である場合 |
Platform | implementation |
---|---|
Win32 | 何もしません |
Linux | nlib_mutex_destroy(), nlib_cond_destroy() |
FreeBSD | nlib_mutex_destroy(), nlib_cond_destroy() |
OS X | nlib_mutex_destroy(), nlib_cond_destroy() |
CAFE | nlib_mutex_destroy(), nlib_cond_destroy() |
CTR | nlib_mutex_destroy(), nlib_cond_destroy() |
nlib_condrwlock_init | ( | nlib_condrwlock * | cond | ) |
リードライトロック用条件変数を初期化します。
[in] | cond | リードライトロック用条件変数 |
0 | 成功した場合 |
EINVAL | cond がNULL である場合 |
Platform | implementation |
---|---|
Win32 | InitializeConditionVariable() |
Linux | nlib_mutex_init(), nlib_cond_init() |
FreeBSD | nlib_mutex_init(), nlib_cond_init() |
OS X | nlib_mutex_init(), nlib_cond_init() |
CAFE | nlib_mutex_init(), nlib_cond_init() |
CTR | nlib_mutex_init(), nlib_cond_init() |
nlib_condrwlock_signal | ( | nlib_condrwlock * | cond | ) |
リードライトロック用条件変数cond
を待っているスレッドの1つの実行を再開させます。
[in] | cond | リードライトロック用条件変数 |
0 | 成功した場合 |
EINVAL | cond がNULL である場合 |
Platform | implementation |
---|---|
Win32 | WakeConditionVariable() |
Linux | nlib_mutex_lock(), nlib_cond_signal(), nlib_mutex_unlock() |
FreeBSD | nlib_mutex_lock(), nlib_cond_signal(), nlib_mutex_unlock() |
OS X | nlib_mutex_lock(), nlib_cond_signal(), nlib_mutex_unlock() |
CAFE | nlib_mutex_lock(), nlib_cond_signal(), nlib_mutex_unlock() |
CTR | nlib_mutex_lock(), nlib_cond_signal(), nlib_mutex_unlock() |
nlib_condrwlock_wait | ( | nlib_condrwlock * | cond, |
nlib_rwlock * | rwlock, | ||
int | rdlock | ||
) |
rwlock
をアンロックし、条件変数を待機します。実行が再開したらrwlock
を再ロックします。
[in] | cond | リードライトロック用条件変数 |
[in] | rwlock | リードライトロック |
[in] | rdlock | 0ならばライトロック, 1ならばリードロックを指定 |
0 | 成功した場合 |
EINVAL | cond 又はrwlock がNULL である場合 |
Platform | implementation |
---|---|
Win32 | SleepConditionVariableSRW() |
Linux | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
FreeBSD | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
OS X | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
CAFE | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
CTR | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
nlib_condrwlock_wait_for | ( | nlib_condrwlock * | cond, |
nlib_rwlock * | rwlock, | ||
nlib_duration | duration, | ||
int | rdlock | ||
) |
rwlock
をアンロックし、条件変数を待機します。実行が再開したらrwlock
を再ロックします。
[in] | cond | リードライトロック用条件変数 |
[in] | rwlock | リードライトロック |
[in] | duration | タイムアウト時間 |
[in] | rdlock | 0ならばライトロック, 1ならばリードロックを指定 |
0 | 成功した場合 |
ETIMEDOUT | タイムアウトした場合 |
EINVAL | cond 又はrwlock がNULL である場合 |
Platform | implementation |
---|---|
Win32 | SleepConditionVariableSRW() |
Linux | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait_for(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
FreeBSD | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait_for(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
OS X | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait_for(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
CAFE | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait_for(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
CTR | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait_for(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
nlib_condrwlock_wait_until | ( | nlib_condrwlock * | cond, |
nlib_rwlock * | rwlock, | ||
nlib_time | abstime, | ||
int | rdlock | ||
) |
rwlock
をアンロックし、条件変数を待機します。実行が再開したらrwlock
を再ロックします。
[in] | cond | リードライトロック用条件変数 |
[in] | rwlock | リードライトロック |
[in] | abstime | タイムアウト時刻 |
[in] | rdlock | 0ならばライトロック, 1ならばリードロックを指定 |
0 | 成功した場合 |
ETIMEDOUT | タイムアウトした場合 |
EINVAL | cond 又はrwlock がNULL である場合 |
Platform | implementation |
---|---|
Win32 | SleepConditionVariableSRW() |
Linux | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait_until(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
FreeBSD | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait_until(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
OS X | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait_until(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
CAFE | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait_until(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
CTR | nlib_mutex_lock(), nlib_rwlock_rdunlock()/nlib_rwlock_wrunlock(), nlib_cond_wait_until(), nlib_mutex_unlock(), nlib_rwlock_rdlock()/nlib_rwlock_wrlock() |
nlib_ctz | ( | uint32_t | x | ) |
LSB(least significant bit)から見て連続する0ビットの数を返します。
[in] | x | 検索対象の32ビット値 |
Platform | implementation |
---|---|
Win32 | _BitScanForward() |
Linux | __builtin_ctz() |
FreeBSD | __builtin_ctz() |
OS X | __builtin_ctz() |
CAFE | 32 - nlib_clz(~x & (x - 1)); |
CTR | 32 - nlib_clz(~x & (x - 1)); |
nlib_ctz64 | ( | uint64_t | x | ) |
LSB(least significant bit)から見て連続する0ビットの数を返します。
[in] | x | 検索対象の64ビット値 |
Platform | implementation |
---|---|
Win32 | _BitScanForward64()又は_BitScanForward() |
Linux | __builtin_ctzll() |
FreeBSD | __builtin_ctzll() |
OS X | __builtin_ctzll() |
CAFE | 64 - nlib_clz64(~x & (x - 1)); |
CTR | 64 - nlib_clz64(~x & (x - 1)); |
nlib_debug_backtrace | ( | size_t * | result, |
void ** | buffer, | ||
size_t | count | ||
) |
バックトレースをbuffer
が指す配列に格納します。
[out] | result | 格納されたバックトレースの個数 |
[in,out] | buffer | バックトレースを格納するバッファ |
[in] | count | buffer に格納可能なバックトレースの個数(voidポインタの数) |
0 | 成功した場合 |
ENOTSUP | この機能がサポートされていない場合。buffer は0で埋められる。 |
EINVAL | result == 0 , bufffer == NULL , 又はcount == 0 だった場合 |
Platform | implementation |
---|---|
Win32 | CaptureStackBackTrace() |
Linux | backtrace(), cygwinではENOTSUP を返す |
FreeBSD | backtrace() |
OS X | backtrace() |
CAFE | ENOTSUP を返す |
CTR | ENOTSUP を返す |
nlib_debug_backtrace_gettext | ( | char * | str, |
size_t | strbufsize, | ||
void *const * | buf, | ||
size_t | count | ||
) |
nlib_debug_backtrace()
で得られた情報から文字列情報を作成します。
[out] | str | 文字列へのバッファ |
[in] | strbufsize | 文字列へのバッファのサイズ |
[in] | buf | バックトレースが格納されたバッファ |
[in] | count | 格納されているバックトレースの数 |
0 | 成功した場合 |
ENOTSUP | この機能がサポートされていない場合。str には空文字列がセットされる。 |
EINVAL | str == NULL , strbufsize == 0 , buf == NULL , 又はcount == 0 だった場合 |
Platform | implementation |
---|---|
Win32 | SymFromAddr() |
Linux | backtrace_symbols(), cygwinではENOTSUP を返す |
FreeBSD | backtrace_symbols() |
OS X | backtrace_symbols() |
CAFE | ENOTSUP を返す |
CTR | ENOTSUP を返す |
nlib_debug_break | ( | void | ) |
ブレークポイントになります。
Platform | implementation |
---|---|
Win32 | DebugBreak() |
Linux | __builtin_trap() |
FreeBSD | __builtin_trap() |
OS X | __builtin_trap() |
CAFE | OSDebug() |
CTR | nn::dbg::Break() |
nlib_dir_close | ( | nlib_dir | dir | ) |
ディレクトリをクローズする
[in] | dir | nlib_dir 構造体 |
0 | 成功した場合 |
その他 | 何らかの原因で失敗した場合 |
Platform | implementation |
---|---|
Win32 | FindClose() |
Linux | closedir() |
FreeBSD | closedir() |
OS X | closedir() |
CAFE | FSCloseDir() |
CTR | nn::fs::Directory::Finalize() + nn::fs::Directory::~Directory() |
nlib_dir_open | ( | nlib_dir * | dir, |
const char * | native_path | ||
) |
ディレクトリをオープンする
[in] | dir | 初期化するnlib_dir 構造体へのポインタ |
[in] | native_path | パス名(UTF-8) |
0 | 成功した場合 |
EINVAL | dir , native_path がNULL だった場合 |
ENOENT | ディレクトリが存在しなかった場合 |
ENOTDIR | native_path がディレクトリではない場合 |
ENOMEM | メモリの確保に失敗した場合 |
その他 | 何らかの原因で失敗した場合 |
Platform | implementation |
---|---|
Win32 | FindFirstFileW() |
Linux | opendir() |
FreeBSD | opendir() |
OS X | opendir() |
CAFE | FSOpenDir() |
CTR | nn::fs::Directory::Directory() + nn::fs::Directory::TryInitialize() |
nlib_dir_read | ( | nlib_dirent * | ent, |
nlib_dir | dir | ||
) |
ディレクトリエントリがあればそれをを1つ読み込む。
[in] | ent | ディレクトリエントリへのポインタ |
[in] | dir | nlib_dir 構造体 |
0 | 成功した場合 |
ENOENT | 末尾に達してこれ以上ディレクトリ内にファイルがない場合 |
その他 | 何らかの原因で失敗した場合 |
Platform | implementation |
---|---|
Win32 | FindNextFileW() |
Linux | readdir(), dirfd(), fstatat() |
FreeBSD | readdir(), dirfd(), fstatat() |
OS X | readdir(), dirfd(), fstatat() |
CAFE | FSReadDir() |
CTR | nn::fs::Directory::TryRead() |
nlib_disk_freespace | ( | const char * | native_path, |
uint64_t * | free_bytes_available, | ||
uint64_t * | total_bytes, | ||
uint64_t * | total_free_bytes | ||
) |
指定されたパスが属するストレージの容量に関する情報を取得します。
[in] | native_path | パス名(UTF-8) |
[out] | free_bytes_available | 呼び出し側スレッドが利用できるバイト数 |
[out] | total_bytes | ストレージ全体のバイト数 |
[out] | total_free_bytes | ストレージ全体の空きバイト数 |
0 | 成功した場合 |
その他 | プラットフォーム依存のエラー(アクセス権がない等) |
Platform | implementation |
---|---|
Win32 | GetDiskFreeSpaceExW() |
Linux | statvfs() |
FreeBSD | statvfs() |
OS X | statvfs() |
CAFE | FSGetFreeSpaceSize() |
CTR | nn::fs::GetSdmcSize() |
nlib_epochtime | ( | nlib_time * | t | ) |
現在時刻を取得します。
[out] | t | 現在時刻が格納される変数へのポインタ |
0 | 成功した場合 |
EINVAL | t がNULL の場合 |
Platform | implementation |
---|---|
Win32 | GetSystemTimeAsFileTime() |
Linux | clock_gettime(CLOCK_REALTIME, now) |
FreeBSD | clock_gettime(CLOCK_REALTIME, now) |
OS X | host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock), clock_get_time(cclock, &mts) |
CAFE | OSGetTime() |
CTR | nn::fnd::DateTime::GetNow() |
nlib_error_string | ( | errno_t | e | ) |
nlib
のエラー値に対応する文字列リテラルを返します。
[in] | e | エラー値 |
nlib_exist_path | ( | int * | result, |
const char * | native_path | ||
) |
パスが存在するかどうかを検査します。
[out] | result | パスが存在するならば0以外の値が設定される。 |
[in] | native_path | パス名(UTF-8) |
0 | 成功した場合 |
その他 | プラットフォーム依存のエラー |
Platform | implementation |
---|---|
Win32 | PathFileExistsW() |
Linux | stat() |
FreeBSD | stat() |
OS X | stat() |
CAFE | FSGetStat() |
CTR | nlib_fd_open() |
nlib_fd_close | ( | nlib_fd | fd | ) |
ファイルをクローズします。エラーを返した場合でもファイルディスクリプタは解放されます。
[in] | fd | ファイルディスクリプタ |
0 | 成功しました。 |
EBADF | fd が有効かつオープンされたディスクリプタでない。 |
EIO | I/Oエラーが発生した。 |
その他 | ネイティブAPIが返すエラーによる。 |
Platform | implementation |
---|---|
Win32 | CloseHandle() |
Linux | close() |
FreeBSD | close() |
OS X | close() |
CAFE | FSCloseFile() |
CTR | FileStream::Finalize() |
nlib_fd_flush | ( | nlib_fd | fd | ) |
ファイルディスクリプタへの書き込みをフラッシュします。
[in] | fd | ファイルディスクリプタ |
0 | 成功しました。 |
EBADF | fd が有効かつオープンされたディスクリプタでない。 |
その他 | ネイティブAPIが返すエラーによる。 |
Platform | implementation |
---|---|
Win32 | FlushFileBuffers() |
Linux | 何もしない |
FreeBSD | 何もしない |
OS X | 何もしない |
CAFE | FSFlushFile() |
CTR | FileStream::TryFlush() |
nlib_fd_getsize | ( | nlib_offset * | size, |
nlib_fd | fd | ||
) |
ファイルサイズを取得します。
[out] | size | ファイルサイズが格納されるポインタ |
[in] | fd | ファイルディスクリプタ |
0 | 成功しました。 |
EINVAL | size がNULL だった。 |
EBADF | fd が有効かつオープンされたディスクリプタでない。 |
その他 | ネイティブAPIが返すエラーによる。 |
Platform | implementation |
---|---|
Win32 | GetFileSizeEx() |
Linux | fstat() |
FreeBSD | fstat() |
OS X | fstat() |
CAFE | FSGetStatFile() |
CTR | FileStream::TryGetSize() |
nlib_fd_native_handle | ( | void ** | native_handle, |
nlib_fd | fd | ||
) |
ネイティブのファイルハンドル(に相当するもの)を取得する。
[in] | native_handle | ネイティブのファイルハンドルが格納されるポインタ |
[in] | fd | ファイルディスクリプタ |
0 | 成功しました。 |
EBADF | fd が有効かつオープンされたディスクリプタでない。 |
その他 | ネイティブAPIが返すエラーによる。 |
Platform | implementation |
---|---|
Win32 | HANDLEが格納される |
Linux | fdと同じ値が格納される |
FreeBSD | fdと同じ値が格納される |
OS X | fdと同じ値が格納される |
CAFE | FSFileHandleが格納される |
CTR | nn::fs::FileStreamへのポインタが格納される |
nlib_fd_open | ( | nlib_fd * | fd, |
const char * | native_path, | ||
unsigned int | flags, | ||
const void * | extra | ||
) |
ファイルをオープンします。
[out] | fd | オープンに成功するとファイルディスクリプタが格納されます。 |
[in] | native_path | ファイルパス文字列(UTF-8) |
[in] | flags | オープン用のフラグを論理和で組み合わせた値 |
[in] | extra | 拡張用。NULLを指定してください。 |
0 | 成功しました。 |
EINVAL | fd , native_path がNULL だった。 |
ENOTSUP | flags の値等がサポートされていない。 |
ENOMEM | 内部でメモリの確保に失敗した。 |
その他 | ネイティブAPIが返すエラーによる。 |
flags
には、 NLIB_FD_O_RDONLY
, NLIB_FD_O_WRONLY
, NLIB_FD_O_RDWR
, NLIB_FD_O_APPEND
, NLIB_FD_O_CREAT
, NLIB_FD_O_TRUNC
を組みわせて指定します。 NLIB_FD_O_WRONLY | NLIB_FD_O_CREAT | NLIB_FD_O_TRUNC
を指定します。 O_APPEND
を指定した場合、ENOTSUP
が返されます。 Platform | implementation |
---|---|
Win32 | CreateFileW(), FILE_FLAG_OVERLAPPED が指定される。 |
Linux | open(), errnoがEINTR の場合は内部で再度実行される。 |
FreeBSD | open(), errnoがEINTR の場合は内部で再度実行される。 |
OS X | open(), errnoがEINTR の場合は内部で再度実行される。 |
CAFE | FSOpenFile() |
CTR | FileStream::TryInitialize() |
nlib_fd_pread | ( | size_t * | result, |
nlib_fd | fd, | ||
void * | buf, | ||
size_t | count, | ||
nlib_offset | offset | ||
) |
指定したオフセットでファイルディスクリプタから読みこみます。ファイルディスクリプタのオフセットは変更されません。
[out] | result | 読み込んだバイト数が格納されるポインタ |
[in] | fd | ファイルディスクリプタ |
[in] | buf | 読み込みバッファ |
[in] | count | 読むこむ最大バイト数 |
[in] | offset | オフセット |
nlib_fd_seek()
, nlib_fd_read()
が返しうる値Platform | implementation |
---|---|
Win32 | ReadFile |
Linux | pread |
FreeBSD | pread |
OS X | pread |
CAFE | FSReadFileWithPos() |
CTR | nlib_fd_seek() + nlib_fd_read() |
nlib_fd_pwrite | ( | size_t * | result, |
nlib_fd | fd, | ||
const void * | buf, | ||
size_t | count, | ||
nlib_offset | offset | ||
) |
指定したオフセットでファイルディスクリプタに書きこみます。ファイルディスクリプタのオフセットは変更されません。
[out] | result | 書き込んだバイト数が格納されるポインタ |
[in] | fd | ファイルディスクリプタ |
[in] | buf | 書きこみバッファ |
[in] | count | 書きこむ最大バイト数 |
[in] | offset | オフセット |
nlib_fd_seek()
, nlib_fd_write()
が返しうる値Platform | implementation |
---|---|
Win32 | WriteFile |
Linux | pwrite |
FreeBSD | pwrite |
OS X | pwrite |
CAFE | FSWriteFileWithPos() |
CTR | nlib_fd_seek() + nlib_fd_write() |
nlib_fd_read | ( | size_t * | result, |
nlib_fd | fd, | ||
void * | buf, | ||
size_t | count | ||
) |
ファイルディスクリプタから、(最大)count
バイトをbuf
に読むこみます。
[out] | result | 読み込んだバイト数が格納されるポインタ |
[in] | fd | ファイルディスクリプタ |
[in] | buf | 読み込みバッファ |
[in] | count | 読むこむ最大バイト数 |
0 | 成功しました。 |
EINVAL | result 又はbuf がNULL だった。 |
EBADF | fd が有効かつオープンされたディスクリプタでない。 |
その他 | ネイティブAPIが返すエラーによる。 |
*result
に0が格納された場合はファイルの終わりを意味します。 Platform | implementation |
---|---|
Win32 | ReadFile() |
Linux | read(), errnoがEINTR の場合は内部で再度実行される。 |
FreeBSD | read(), errnoがEINTR の場合は内部で再度実行される。 |
OS X | read(), errnoがEINTR の場合は内部で再度実行される。 |
CAFE | FSReadFile() |
CTR | FileStream::TryRead() |
nlib_fd_readv | ( | size_t * | result, |
nlib_fd | fd, | ||
const nlib_fd_iovec * | iov, | ||
int | iovcnt | ||
) |
fd
に関連付けられたファイルから複数の非連続なバッファへの読み込みを行います。
[out] | result | 成功した場合に読み込んだバイト数が格納される。 |
[in] | fd | ファイルディスクリプタ |
[in] | iov | iovcnt 個のバッファへのポインタとそのサイズ |
[in] | iovcnt | iov の個数 |
0 | 成功した場合。 |
EINVAL | result がNULL だった場合。 |
EINVAL | iovcnt が0未満だったり1024を超えたりした場合。 |
EINVAL | バッファ・サイズの合計がRSIZE_MAX を超えた場合。 |
EBADF | fd が有効かつオープンされたディスクリプタでない。 |
ENOMEM | メモリの動的確保に失敗した場合。 |
その他 | ネイティブAPIが返すエラーによる。 |
readv()
又はnlib_fd_read()
によって行われます。 Platform | implementation |
---|---|
Win32 | nlib_malloc(), nlib_fd_read(), nlib_free() |
Linux | readv(), errnoがEINTR の場合は内部で再度実行される。 |
FreeBSD | readv(), errnoがEINTR の場合は内部で再度実行される。 |
OS X | readv(), errnoがEINTR の場合は内部で再度実行される。 |
CAFE | nlib_malloc(), nlib_fd_read(), nlib_free() |
CTR | nlib_malloc(), nlib_fd_read(), nlib_free() |
nlib_fd_seek | ( | nlib_offset * | result, |
nlib_fd | fd, | ||
nlib_offset | offset, | ||
int | whence | ||
) |
ファイルのオフセットを変更する。
[out] | result | 変更後のオフセットが格納されるポインタ |
[in] | fd | ファイルディスクリプタ |
[in] | offset | オフセット |
[in] | whence | NLIB_SEEK_SET 又は NLIB_SEEK_CUR |
0 | 成功しました。 |
EINVAL | result がNULL であるか、whence の値が不正である。 |
EINVAL | 変更後のオフセットが負の値になった。 |
EBADF | fd が有効かつオープンされたディスクリプタでない。 |
その他 | ネイティブAPIが返すエラーによる。 |
Platform | implementation |
---|---|
Win32 | nlibによる実装 |
Linux | lseek() |
FreeBSD | lseek() |
OS X | lseek() |
CAFE | FSSetPosFile() |
CTR | FileStream::TrySeek() |
nlib_fd_sync | ( | nlib_fd | fd | ) |
メモリにあるファイルの内容をデバイス上のものと同期させます。
[in] | fd | ファイルディスクリプタ |
0 | 成功しました。 |
EBADF | fd が有効かつオープンされたディスクリプタでない。 |
その他 | ネイティブAPIが返すエラーによる。 |
Platform | implementation |
---|---|
Win32 | nlib_fd_flush() |
Linux | fsync() |
FreeBSD | fsync() |
OS X | fsync() |
CAFE | nlib_fd_flush() |
CTR | nlib_fd_flush() |
nlib_fd_truncate | ( | nlib_fd | fd, |
nlib_offset | length | ||
) |
指定した長さにファイルを延長、もしくは切り詰める。
[in] | fd | ファイルディスクリプタ |
[in] | length | ファイルの長さ |
0 | 成功しました |
EBADF | fd が有効かつオープンされたディスクリプタでない。 |
その他 | ネイティブAPIが返すエラーによる。 |
fd
は書き込み用に開かれている必要があります。 Platform | implementation |
---|---|
Win32 | SetFilePointerEx() + SetEndOfFile() |
Linux | ftruncate() |
FreeBSD | ftruncate() |
OS X | ftruncate() |
CAFE | FSGetStatFile() + FSGetPosFile() + FSSetPosFile() + FSWriteFile() or FSTruncateFile() |
CTR | FileStream::TryGetSize() + FileStream::TrySetSize() + FileStream::TryWrite() |
nlib_fd_write | ( | size_t * | result, |
nlib_fd | fd, | ||
const void * | buf, | ||
size_t | count | ||
) |
ファイルディスクリプタへ、(最大)count
バイトをbuf
から書きこみます。
[out] | result | 書き込んだバイト数が格納されるポインタ |
[in] | fd | ファイルディスクリプタ |
[in] | buf | 書きこみバッファ |
[in] | count | 書きこむ最大バイト数 |
0 | 成功しました。 |
EINVAL | result 又はbuf がNULL だった。 |
EBADF | fd が有効かつオープンされたディスクリプタでない。 |
その他 | ネイティブAPIが返すエラーによる。 |
Platform | implementation |
---|---|
Win32 | WriteFile() |
Linux | write(), errnoがEINTR の場合は内部で再度実行される。 |
FreeBSD | write(), errnoがEINTR の場合は内部で再度実行される。 |
OS X | write(), errnoがEINTR の場合は内部で再度実行される。 |
CAFE | FSWriteFile() |
CTR | FileStream::TryWrite() |
nlib_fd_writev | ( | size_t * | result, |
nlib_fd | fd, | ||
const nlib_fd_iovec * | iov, | ||
int | iovcnt | ||
) |
複数の非連続なバッファからfd
に関連付けられたファイルへの書き込みを行います。
[out] | result | 成功した場合に書き込んだバイト数が格納される。 |
[in] | fd | ファイルディスクリプタ |
[in] | iov | iovcnt 個のバッファへのポインタとそのサイズ |
[in] | iovcnt | iov の個数 |
0 | 成功した場合。 |
EINVAL | result がNULL だった場合。 |
EINVAL | iovcnt が0未満だったり1024を超えたりした場合。 |
EINVAL | バッファ・サイズの合計がRSIZE_MAX を超えた場合。 |
EBADF | fd が有効かつオープンされたディスクリプタでない。 |
ENOMEM | メモリの動的確保に失敗した場合。 |
その他 | ネイティブAPIが返すエラーによる。 |
writev()
又はnlib_fd_write()
によって行われます。 Platform | implementation |
---|---|
Win32 | nlib_malloc(), nlib_fd_write(), nlib_free() |
Linux | writev(), errnoがEINTR の場合は内部で再度実行される。 |
FreeBSD | writev(), errnoがEINTR の場合は内部で再度実行される。 |
OS X | writev(), errnoがEINTR の場合は内部で再度実行される。 |
CAFE | nlib_malloc(), nlib_fd_write(), nlib_free() |
CTR | nlib_malloc(), nlib_fd_write(), nlib_free() |
nlib_free | ( | void * | ptr | ) |
C標準関数のfree()
を呼び出すweak関数です。nlib
はこの関数を経由してfree()
を呼び出します。
[in] | ptr | 解放するポインタ |
nlib
のメモリ解放をカスタマイズすることが可能です。 nlib_free_size | ( | void * | ptr, |
size_t | size | ||
) |
サイズを指定してメモリを解放します。デフォルトではnlib_free()
を呼び出します。
[in] | ptr | 解放するポインタ |
[in] | size | ptr に割り当てられていたサイズ |
nlib_gen_random | ( | void * | buf, |
size_t | size | ||
) |
ランダムな値をsize
バイト生成してbuf
に格納します。
[out] | buf | ランダム値が格納される領域へのポインタ |
[in] | size | ランダム値が格納される領域のサイズ |
Platform | implementation |
---|---|
Win32 | CryptGenRandom() |
Linux | /dev/urandomを読みます |
FreeBSD | /dev/urandomを読みます |
OS X | /dev/urandomを読みます |
CAFE | ENOTSUPを返します |
CTR | ENOTSUPを返します |
nlib_get_native_last_error | ( | void | ) |
最後に発生したネイティブのエラーコードを返します。
Platform | implementation |
---|---|
Win32 | GetLastError() |
Linux | 常に0を返す |
FreeBSD | 常に0を返す |
OS X | 常に0を返す |
CAFE | nlib_xxxx関数内のSDK関数呼び出しで発生したエラー値 |
CTR | nlib_xxxx関数内のSDK関数呼び出しで発生したエラーのGetPrintableBits()メソッドの戻り値 |
nlib_getenv | ( | size_t * | result, |
char * | buf, | ||
size_t | bufsize, | ||
const char * | varname | ||
) |
環境変数の値を文字列で取得します。
[out] | result | 必要となる(なった)バッファ・サイズが格納される。環境変数が存在しない場合は0が格納される。 |
[out] | buf | 環境変数の値を格納するバッファ |
[in] | bufsize | buf のサイズ |
[in] | varname | 環境変数名 |
0 | 成功した場合 |
EINVAL | result 又はvarname がNULL だった場合 |
EINVAL | buf がNULL でbufsize が0でなかった場合 |
ERANGE | 用意されたバッファが小さすぎた場合。result に必要なバッファ・サイズが書き出されています。 |
buf
にNULL
, bufsize
に0を指定してこの関数を呼び出すと、環境変数の値の格納に必要なバッファ・サイズを得ることができます。 Platform | implementation |
---|---|
Win32 | getenv_s() |
Linux | getenv() |
FreeBSD | getenv() |
OS X | getenv() |
CAFE | ENOTSUP を返す |
CTR | ENOTSUP を返す |
nlib_getversion | ( | void | ) |
nlib
のバージョンを動的に取得します。
NLIB_VERSION
を返します。nlib
のバージョンによってユーザーコードの挙動を実行時に変化させる必要がある場合に利用します。 nlib_is_dir | ( | int * | result, |
const char * | native_path | ||
) |
パスがディレクトリかどうかを検査します。パスが存在しない場合は*result
に0を設定し、0を返します。
[out] | result | ディレクトリならば0以外の値が設定される。 |
[in] | native_path | パス名(UTF-8) |
0 | 成功した場合 |
その他 | プラットフォーム依存のエラー |
Platform | implementation |
---|---|
Win32 | PathIsDirectoryW() |
Linux | stat() |
FreeBSD | stat() |
OS X | stat() |
CAFE | FSGetStat() |
CTR | nlib_dir_open() |
nlib_log_attr_setint | ( | int | prio, |
int | key, | ||
int | value | ||
) |
優先度ごとの出力先の指定を行います。
[in] | prio | nlib_log_priority の値(NLIB_LOG_VERBOSE 等を参照)を指定します。 |
[in] | key | nlib_log_key から出力先を指定します。 |
[in] | value | 設定する値(0以外ならON) |
key の値 | 説明 |
---|---|
NLIB_LOG_ATTR_STDOUT | 標準出力への出力設定を指定します。 |
NLIB_LOG_ATTR_STDERR | 標準エラー出力への出力設定を指定します。 |
NLIB_LOG_ATTR_MSVC_TRACE | Windows環境でOutputDebugString()を利用する出力の設定を指定します。 |
NLIB_LOG_ATTR_SYSLOG | イベントログ(Windows)又は、syslog(Linux/FreeBSD)への出力設定を指定します。 |
NLIB_LOG_ATTR_NLIB_FD | ファイルへの出力設定を指定します。value に nlib_fd を指定します。 |
nlib_log_print | ( | int | prio, |
const char * | tag, | ||
const char * | fmt, | ||
... | |||
) |
ログメッセージを出力します。
[in] | prio | nlib_log_priority のNLIB_LOG_VERBOSE からNLIB_LOG_FATAL までの値 |
[in] | tag | タグ文字列 |
[in] | fmt | フォーマット文字列 |
nlib_log_vprint | ( | int | prio, |
const char * | tag, | ||
const char * | fmt, | ||
va_list | ap | ||
) |
ログメッセージを出力します。
[in] | prio | nlib_log_priority のNLIB_LOG_VERBOSE からNLIB_LOG_FATAL までの値 |
[in] | tag | タグ文字列 |
[in] | fmt | フォーマット文字列 |
[in] | ap | フォーマット文字列に対する可変長引数 |
nlib_malloc | ( | size_t | size | ) |
C標準関数のmalloc()
を呼び出すweak関数です。nlib
はこの関数を経由してmalloc()
を呼び出します。
[in] | size | 確保するバイト数 |
nlib
のメモリ確保をカスタマイズすることが可能です。 nlib_memalign | ( | size_t | alignment, |
size_t | size | ||
) |
memalign()
を呼び出すweak関数です。nlib
はこの関数を経由してmemalign()
を呼び出します。
[in] | alignment | アライメント |
[in] | size | サイズ |
nlib
のメモリ確保をカスタマイズすることが可能です。 nlib_memchr | ( | const void * | s, |
int | c, | ||
size_t | n | ||
) |
メモリ領域[s, s + n)
の先頭からn
バイトを検索して、バイトc
があるポインタを返します。
[in] | s | 検査対象のメモリ |
[in] | c | 検索対象の文字 |
[in] | n | 検索するバイト数 |
NULL
を返します。Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | 1ワード単位でスキャンする実装 |
CTR | 1ワード単位でスキャンする実装 |
nlib_memchr_gt | ( | const void * | s, |
int | c, | ||
size_t | n | ||
) |
メモリ領域[s, s + n)
の先頭からn
バイトを検索して、バイトc
より大きいの文字があるデータへのポインタを返します。
[in] | s | 検査対象のメモリ |
[in] | c | 検索対象の文字 |
[in] | n | 検索するバイト数 |
NULL
を返します。c
は127以下である必要があります。 nlib_memchr_lt | ( | const void * | s, |
int | c, | ||
size_t | n | ||
) |
メモリ領域[s, s + n)
の先頭からn
バイトを検索して、バイトc
未満の文字があるデータへのポインタを返します。
[in] | s | 検査対象のメモリ |
[in] | c | 検索対象の文字 |
[in] | n | 検索するバイト数 |
NULL
を返します。c
は127以下である必要があります。 Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | 1ワード単位でスキャンする実装 |
CTR | 1ワード単位でスキャンする実装 |
nlib_memchr_mb | ( | const void * | s, |
size_t | n | ||
) |
メモリ領域[s, s + n)
の先頭からn
バイトを検索して、0x80以上のバイトが格納されている場所へのポインタを返します。
[in] | s | 検査対象のメモリ |
[in] | n | 検索するバイト数 |
NULL
を返します。Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | 1バイト単位でスキャンする実装 |
CTR | 1バイト単位でスキャンする実装 |
nlib_memchr_not | ( | const void * | s, |
int | c, | ||
size_t | n | ||
) |
メモリ領域[s, s + n)
の先頭からn
バイトを検索して、バイトc
でないポインタを返します。
[in] | s | 検査対象のメモリ |
[in] | c | 読み飛ばす対象の文字 |
[in] | n | 検索するバイト数 |
NULL
を返します。Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | 1ワード単位でスキャンする実装 |
CTR | 1ワード単位でスキャンする実装 |
nlib_memchr_range_not | ( | const void * | s, |
const char * | range, | ||
size_t | n | ||
) |
メモリ領域[s, s + n)
の先頭からn
バイトを検索して、最初のrange
に含まない文字へのポインタを返します。
[in] | s | 検査対象のメモリ |
[in] | range | 範囲を表すASCII文字列 |
[in] | n | 検索するバイト数 |
NULL
を返します。range
は長さ2のASCII文字列(例えば"09","AZ","az")である必要があります。 Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | 1ワード単位でスキャンする実装 |
CTR | 1ワード単位でスキャンする実装 |
nlib_memcmp | ( | const void * | buf1, |
const void * | buf2, | ||
size_t | n | ||
) |
buf1
とbuf2
を先頭からn
バイト分unsigned charとして比較します。
[in] | buf1 | 比較元のメモリブロック1 |
[in] | buf2 | 比較元のメモリブロック2 |
[in] | n | 比較バイト数 |
正 | buf1 > buf2 |
0 | buf1 == buf2 |
負 | buf1 < buf2 |
Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | 1ワード単位でスキャンする実装 |
CTR | memcmp() |
static NLIB_C_INLINE errno_t nlib_memcpy | ( | void * | s1, |
size_t | s1max, | ||
const void * | s2, | ||
size_t | n | ||
) |
N1078のmemcpy_sに相当する実装です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ |
[in] | s2 | コピー元のバッファ |
[in] | n | コピーするバイト数 |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | memcpy() |
Linux | memcpy() |
FreeBSD | memcpy() |
OS X | memcpy() |
CAFE | OSBlockMove() |
CTR | memcpy() |
Platform.h の 2095 行目に定義があります。
static NLIB_C_INLINE errno_t nlib_memmove | ( | void * | s1, |
size_t | s1max, | ||
const void * | s2, | ||
size_t | n | ||
) |
N1078のmemmove_sに相当する実装です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ |
[in] | s2 | コピー元のバッファ |
[in] | n | コピーするバイト数 |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 Platform.h の 2108 行目に定義があります。
nlib_mempagesize | ( | size_t * | size | ) |
ページサイズを取得します。
[out] | size | ページサイズが格納される |
Platform | implementation |
---|---|
Win32 | GetSystemInfo()(起動時に一回実行) |
Linux | getpagesize()(最初の実行時に一回実行) |
FreeBSD | getpagesize()(最初の実行時に一回実行) |
OS X | getpagesize()(最初の実行時に一回実行) |
CAFE | OSGetPageSize()を設定し0を返す |
CTR | NN_OS_MEMORY_PAGE_SIZEを設定し0を返す |
nlib_memrchr | ( | const void * | s, |
int | c, | ||
size_t | n | ||
) |
メモリ領域[s, s + n)
の後方からn
バイトを検索して、バイトc
があるポインタを返します。
[in] | s | 検査対象のメモリ |
[in] | c | 検索対象の文字 |
[in] | n | 検索するバイト数 |
NULL
を返します。Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | 1ワード単位でスキャンする実装 |
CTR | 1ワード単位でスキャンする実装 |
static NLIB_C_INLINE errno_t nlib_memset | ( | void * | buf, |
int | ch, | ||
size_t | n | ||
) |
内部でmemset(buf, ch, n)相当の関数を呼び出します。
[in,out] | buf | セット先のメモリブロック |
[in] | ch | セットするバイトデータ(文字) |
[in] | n | バイト数 |
Platform | implementation |
---|---|
Win32 | memmove() |
Linux | memmove() |
FreeBSD | memmove() |
OS X | memmove() |
CAFE | OSBlockMove() |
CTR | memmove() |
Platform.h の 2117 行目に定義があります。
nlib_mkdir | ( | const char * | native_path, |
unsigned int | flags | ||
) |
ディレクトリを作成する
[in] | native_path | パス名(UTF-8) |
[in] | flags | 現在使われていません |
0 | 成功した場合 |
EINVAL | native_path がNULL だった場合 |
EEXIST | native_path が既に存在している場合 |
その他 | 何らかの原因で失敗した場合 |
Platform | implementation |
---|---|
Win32 | CreateDirectoryW() |
Linux | mkdir() |
FreeBSD | mkdir() |
OS X | mkdir() |
CAFE | FSMakeDir() |
CTR | nn::fs::TryCreateDirectory() |
nlib_mlock | ( | void * | addr, |
size_t | len | ||
) |
指定したメモリ領域がスワップアウトされないようにします。
[in] | addr | ロックしたい領域の先頭 |
[in] | len | サイズ |
Platform | implementation |
---|---|
Win32 | VirtualLock() |
Linux | mlock() |
FreeBSD | mlock() |
OS X | mlock() |
CAFE | 0を返す |
CTR | 0を返す |
nlib_mq_close | ( | nlib_mq | mq | ) |
ハンドルで示されるメッセージキューをクローズします。
[in] | mq | メッセージキューへのハンドル |
0 | 成功した場合 |
EBADF | mq で指定されたハンドルが無効な場合 |
nlib_mq_drop | ( | nlib_mq | mq, |
nlib_mq_msg * | msg, | ||
int * | prio | ||
) |
キューに存在する最低の優先度のメッセージをキューから受信します。受信したメッセージはユーザーがデストラクタ関数で削除する必要があります。
[in] | mq | メッセージキューへのハンドル |
[out] | msg | 受信されたメッセージが格納される |
[out] | prio | NULL 以外なら受信されたメッセージの優先度が格納される |
0 | 成功した場合 |
EINVAL | msg がNULL だった場合 |
EBADF | mq で指定されたハンドルが無効な場合 |
ENOENT | キューが空だった場合 |
nlib_mq_getattr | ( | nlib_mq | mq, |
nlib_mq_attr * | attr | ||
) |
ハンドルで示されるメッセージキューに設定されている属性を取得します。
[in] | mq | メッセージキューへのハンドル |
[in] | attr | メッセージキューの属性 |
0 | 成功した場合 |
EBADF | mq で指定されたハンドルが無効な場合 |
EINVAL | attr がNULL の場合 |
nlib_mq_open | ( | nlib_mq * | mq, |
const nlib_mq_attr * | attr | ||
) |
スレッド間でメッセージをやりとりするためのメッセージキューを作成します。
[out] | mq | メッセージキューへのハンドルが格納されます。 |
[in] | attr | メッセージキューの属性 |
0 | 成功した場合 |
ENOMEM | メモリの確保に失敗した場合 |
ENFILE | 作成されているメッセージキューの数が上限に達している場合 |
EINVAL | mq 又はattr がNULL の場合 |
nlib_mq_readonly | ( | nlib_mq | mq | ) |
ハンドルで示されるメッセージキューを受信専用にします。
[in] | mq | メッセージキューへのハンドル |
0 | 成功した場合 |
EBADF | mq で指定されたハンドルが無効な場合 |
EPERM
エラーが返されるようになります。 メッセージの新規受付を終了したいが、キューに残っているメッセージを処理する必要がある場合に利用します。 nlib_mq_receive | ( | nlib_mq | mq, |
nlib_mq_msg * | msg, | ||
int * | prio | ||
) |
メッセージをキューから受信します。受信したメッセージはユーザーがデストラクタ関数で削除する必要があります。
[in] | mq | メッセージキューへのハンドル |
[out] | msg | 受信されたメッセージが格納される |
[out] | prio | NULL 以外なら受信されたメッセージの優先度が格納される |
0 | 成功した場合 |
EINVAL | msg がNULL だった場合 |
EBADF | mq で指定されたハンドルが無効な場合 |
EAGAIN | ブロッキングキュー以外でメッセージキューが空の場合 |
nlib_mq_receive_until | ( | nlib_mq | mq, |
nlib_mq_msg * | msg, | ||
int * | prio, | ||
nlib_time | abstime | ||
) |
メッセージをキューからタイムアウトつきで受信します。受信したメッセージはユーザーがデストラクタ関数で削除する必要があります。
[in] | mq | メッセージキューへのハンドル |
[out] | msg | 受信されたメッセージが格納される |
[out] | prio | NULL 以外なら受信されたメッセージの優先度が格納される |
[in] | abstime | タイムアウト時刻 |
0 | 成功した場合 |
EINVAL | msg がNULL だった場合 |
EBADF | mq で指定されたハンドルが無効な場合 |
EINVAL | msg がNULL だった場合 |
EINVAL | メッセージキューがブロッキングキュー以外だった場合 |
ETIMEDOUT | ブロッキングキューで受信がタイムアウトした場合 |
nlib_mq_send | ( | nlib_mq | mq, |
nlib_mq_msg | msg, | ||
int | prio | ||
) |
メッセージをキューに送信します。
[in] | mq | メッセージキューへのハンドル |
[in] | msg | 送信するメッセージ |
[in] | prio | メッセージの優先度で0以上31以下の整数(31が最高の優先度) |
0 | 成功した場合 |
EBADF | mq で指定されたハンドルが無効な場合 |
EINVAL | prio で指定された優先度が0未満又は32以上の場合 |
EAGAIN | ブロッキングキュー以外でメッセージキューが一杯の場合 |
EPERM | キューが受信専用の場合 |
nlib_mq_send_until | ( | nlib_mq | mq, |
nlib_mq_msg | msg, | ||
int | prio, | ||
nlib_time | abstime | ||
) |
メッセージをキューにタイムアウトつきで送信します。
[in] | mq | メッセージキューへのハンドル |
[in] | msg | 送信するメッセージ |
[in] | prio | メッセージの優先度で0以上31以下の整数(31が最高の優先度) |
[in] | abstime | タイムアウト時刻 |
0 | 成功した場合 |
EBADF | mq で指定されたハンドルが無効な場合 |
EINVAL | prio で指定された優先度が0未満又は32以上の場合 |
EINVAL | メッセージキューがブロッキングキュー以外だった場合 |
ETIMEDOUT | ブロッキングキューで送信がタイムアウトした場合 |
EPERM | キューが受信専用の場合 |
nlib_munlock | ( | void * | addr, |
size_t | len | ||
) |
指定したメモリ領域がスワップアウトできるようにします。
[in] | addr | アンロックしたい領域の先頭 |
[in] | len | サイズ |
Platform | implementation |
---|---|
Win32 | VirtualUnlock() |
Linux | munlock() |
FreeBSD | munlock() |
OS X | munlock() |
CAFE | 0を返す |
CTR | 0を返す |
nlib_mutex_destroy | ( | nlib_mutex * | mutex | ) |
mutex
オブジェクトを破壊し、関連付けられているリソース(あれば)を解放します。
[in] | mutex | 破壊するmutex |
0 | 成功した場合 |
EINVAL | mutex がNULL の場合 |
その他 | mutex がロック中であることが検出された場合等 |
Platform | implementation |
---|---|
Win32 | CloseHandle() or DeleteCriticalSection() |
Linux | pthread_mutex_destroy() |
FreeBSD | pthread_mutex_destroy() |
OS X | pthread_mutex_destroy() |
CAFE | No SDK API called |
CTR | CriticalSection::~CriticalSection() |
nlib_mutex_init | ( | nlib_mutex * | mutex | ) |
ミューテックスを初期化します。
[in] | mutex | mutex が指すミューテックスオブジェクトを初期化します。 |
Platform | implementation |
---|---|
Win32 | InitializeCriticalSectionEx() |
Linux | pthread_mutex_init() |
FreeBSD | pthread_mutex_init() |
OS X | pthread_mutex_init() |
CAFE | OSFastMutex_Init() |
CTR | CriticalSection::CriticalSection() |
nlib_mutex_lock | ( | nlib_mutex * | mutex | ) |
与えられたmutex
をロックします。
[in] | mutex | ロックするmutex |
0 | 成功した場合 |
EINVAL | mutex がNULL の場合かmutex が初期化されていない場合 |
EDEADLK | デッドロックを検出することができた場合 |
Platform | implementation |
---|---|
Win32 | WaitForSingleObject() or EnterCriticalSection() |
Linux | pthread_mutex_lock() |
FreeBSD | pthread_mutex_lock() |
OS X | pthread_mutex_lock() |
CAFE | OSFastMutex_Lock() |
CTR | CriticalSection::Enter() |
nlib_mutex_recursive_init | ( | nlib_mutex * | mutex | ) |
再帰ミューテックスを初期化します。
[in] | mutex | mutex が指すミューテックスオブジェクトを初期化します。 |
Platform | implementation |
---|---|
Win32 | InitializeCriticalSectionEx() |
Linux | pthread_mutex_init() |
FreeBSD | pthread_mutex_init() |
OS X | pthread_mutex_init() |
CAFE | OSFastMutex_Init() |
CTR | CriticalSection::CriticalSection() |
nlib_mutex_recursive_timed_init | ( | nlib_mutex * | mutex | ) |
再帰かつタイムアウト可能なミューテックスを初期化します。
[in] | mutex | mutex が指すミューテックスオブジェクトを初期化します。 |
Platform | implementation |
---|---|
Win32 | CreateMutex() |
Linux | NLIB_RECURSIVE_TIMED_MUTEX_INITIALIZER を代入 |
FreeBSD | pthread_mutex_init() |
OS X | pthread_mutex_init() |
CAFE | OSFastMutex_Init() |
CTR | CriticalSection::CriticalSection() |
nlib_mutex_trylock | ( | nlib_mutex * | mutex | ) |
mutex
がロックされていない場合のみロックします。
[in] | mutex | ロックするmutex |
0 | 成功した場合 |
EINVAL | mutex がNULL の場合かmutex が初期化されていない場合 |
EBUSY | 既に他のスレッドによりロックされている場合 |
その他 | 何らかの理由でロックできなかった場合 |
Platform | implementation |
---|---|
Win32 | WaitForSingleObject() or TryEnterCriticalSection() |
Linux | pthread_mutex_trylock() |
FreeBSD | pthread_mutex_trylock() |
OS X | pthread_mutex_trylock() |
CAFE | OSFastMutex_TryLock() |
CTR | CriticalSection::TryEnter() |
nlib_mutex_trylock_for | ( | nlib_mutex * | mutex, |
nlib_duration | delta | ||
) |
与えられたmutex
をロックします。タイムアウトします。
[in] | mutex | ロックするmutex |
[in] | delta | タイムアウト時間 |
0 | 成功した場合 |
EINVAL | mutex がNULL の場合かmutex が初期化されていない場合 |
ETIMEDOUT | タイムアウトした場合 |
その他 | 何らかの理由でロックできなかった場合 |
Platform | implementation |
---|---|
Win32 | WaitForSingleObject() |
Linux | pthread_mutex_timedlock() |
FreeBSD | pthread_mutex_timedlock() |
OS X | nlib_mutex_trylock(), nlib_sleep() |
CAFE | OSFastMutex_TryLock(), nlib_sleep() |
CTR | CriticalSection::TryEnter() |
mutex
のロックを試みます。 nlib_mutex_unlock | ( | nlib_mutex * | mutex | ) |
与えられたmutex
をアンロックします。
[in] | mutex | アンロックするmutex |
0 | 成功した場合 |
EINVAL | mutex がNULL の場合かmutex が初期化されていない場合 |
その他 | 何らかのプログラミングエラーが原因アンロックできなかった場合 |
Platform | implementation |
---|---|
Win32 | ReleaseMutex() or LeaveCriticalSection() |
Linux | pthread_mutex_unlock() |
FreeBSD | pthread_mutex_unlock() |
OS X | pthread_mutex_unlock() |
CAFE | OSFastMutex_Unlock() |
CTR | CriticalSection::Leave() |
nlib_once | ( | nlib_onceflag * | flag, |
nlib_oncefunc | func | ||
) |
func
を高々1回しか実行されないようします。
[in] | flag | NLIB_ONCE_INIT で初期化されていて、実行後に値が変化します。 |
[in] | func | 高々1回実行される関数 |
0 | 関数の実行が完了している場合 |
EINVAL | flag がNULL だった場合 |
flag
が指し示す値は事前に NLIB_ONCE_INIT
で初期化されている必要があります。 nlib_once()
が複数回呼び出された場合、既に関数が呼び出されていれば何もせずに返ります。 nlib_physical_alloc | ( | void * | ptr, |
size_t | size, | ||
int | prot | ||
) |
物理メモリを割り当てます。
[in] | ptr | 仮想メモリへのポインタ |
[in] | size | 割り当てる物理メモリのサイズ(バイト単位) |
[in] | prot | アクセス指定 |
nlib_virtual_alloc()
で確保した範囲内の領域を指定し、物理メモリを割り当てます。 prot
には以下の値の論理和を与えます. 値 | 説明 |
---|---|
NLIB_PHYSICAL_ALLOC_PROT_NONE | メモリにはアクセスできません。 |
NLIB_PHYSICAL_ALLOC_PROT_READ | メモリを読み取ることができます。 |
NLIB_PHYSICAL_ALLOC_PROT_WRITE | メモリを変更することができます。 |
NLIB_PHYSICAL_ALLOC_PROT_EXEC | メモリを実行することができます。 |
Platform | implementation |
---|---|
Win32 | VirtualAlloc(ptr, size, MEM_COMMIT, ...) |
Linux | mprotect() |
FreeBSD | mprotect() |
OS X | mprotect() |
CAFE | 0を返す |
CTR | 0を返す |
nlib_physical_free | ( | void * | ptr, |
size_t | size | ||
) |
物理メモリの割り当てを解除します。
[in] | ptr | 仮想メモリへのポインタ |
[in] | size | 物理メモリの割り当てを解除する領域のサイズ(バイト単位) |
nlib_virtual_alloc()
で確保した範囲内の領域を指定し、物理メモリの割り当てを解除します。 Platform | implementation |
---|---|
Win32 | VirtualFree(..., MEM_DECOMMIT) |
Linux | mprotect(..., PROT_NONE) |
FreeBSD | mprotect(..., PROT_NONE) |
OS X | mprotect(..., PROT_NONE) |
CAFE | 0を返す |
CTR | 0を返す |
nlib_popcnt | ( | uint32_t | x | ) |
1となっているビットの数を返します。
[in] | x | 32ビット整数 |
Platform | implementation |
---|---|
SSE | _mm_popcnt_u32()又はテーブル引き |
NEON | vcnt_u8() |
CAFE | テーブル引き |
CTR | テーブル引き |
nlib_popcnt16 | ( | uint16_t | x | ) |
1となっているビットの数を返します。
[in] | x | 16ビット整数 |
nlib_popcnt64 | ( | uint64_t | x | ) |
1となっているビットの数を返します。
[in] | x | 64ビット整数 |
Platform | implementation |
---|---|
SSE | _mm_popcnt_u32(), _mm_popcnt_u64()又はテーブル引き |
NEON | vcnt_u8() |
CAFE | テーブル引き |
CTR | テーブル引き |
nlib_realloc | ( | void * | ptr, |
size_t | size | ||
) |
C標準関数のrealloc()
を呼び出すweak関数です。nlib
はこの関数を経由してrealloc()
を呼び出します。
[in] | ptr | 事前に割り当てられているメモリ ブロックへのポインタ |
[in] | size | 新しいサイズ(バイト単位) |
nlib
のメモリ確保をカスタマイズすることが可能です。 nlib_rename | ( | const char * | old_path, |
const char * | new_path | ||
) |
ファイル名の変更する
[in] | old_path | パス名(UTF-8) |
[in] | new_path | パス名(UTF-8) |
0 | 成功した場合 |
EINVAL | old_path , new_path がNULL だった場合 |
ENOENT | old_path が存在しない場合 |
EEXIST | new_path が存在している場合 |
ENOTEMPTY | EEXIST と同様 |
EISDIR | new_path がディレクトリでnew_path がディレクトリでない場合。EEXIST を返す場合もあります。 |
その他 | 何らかの原因で失敗した場合 |
Platform | implementation |
---|---|
Win32 | MoveFileW() |
Linux | rename() |
FreeBSD | rename() |
OS X | rename() |
CAFE | FSMakeDir() |
CTR | nn::fs::TryRenameFile() / nn::fs::TryRenameDirectory() |
EEXIST
, EISDIR
となるケースでもENOENT
を返します。 nlib_rmdir | ( | const char * | native_path | ) |
ディレクトリを削除する
[in] | native_path | パス名(UTF-8) |
0 | 成功した場合 |
EINVAL | native_path がNULL だった場合 |
ENOENT | native_path が存在しない場合 |
EEXIST | ディレクトリが空ではない場合 |
ENOTEMPTY | EEXIST と同様 |
その他 | 何らかの原因で失敗した場合 |
Platform | implementation |
---|---|
Win32 | RemoveDirectoryW() |
Linux | rmdir() |
FreeBSD | rmdir() |
OS X | rmdir() |
CAFE | nlib_unlink() |
CTR | nn::fs::TryDeleteDirectory() |
nlib_rwlock_destroy | ( | nlib_rwlock * | rwlock | ) |
リードライトロックオブジェクトを破壊します。
[in] | rwlock | リードライトロックオブジェクト |
0 | 成功した場合 |
EINVAL | rwlock がNULL である場合 |
Platform | implementation |
---|---|
Win32 | 何もしません |
Linux | pthread_rwlock_destroy() |
FreeBSD | pthread_rwlock_destroy() |
OS X | pthread_rwlock_destroy() |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_rwlock_init | ( | nlib_rwlock * | rwlock | ) |
リードライトロックを初期化します。
[in] | rwlock | リードライトロックオブジェクト |
0 | 成功した場合 |
EINVAL | rwlock がNULL である場合 |
Platform | implementation |
---|---|
Win32 | InitializeSRWLock() |
Linux | pthread_rwlock_init() |
FreeBSD | pthread_rwlock_init() |
OS X | pthread_rwlock_init() |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_rwlock_rdlock | ( | nlib_rwlock * | rwlock | ) |
読み込みロックを取得しクリティカルセクションに入ります。取得できるまでブロックします。
[in] | rwlock | リードライトロックオブジェクト |
0 | 成功した場合 |
EINVAL | rwlock がNULL である場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | AcquireSRWLockShared() |
Linux | pthread_rwlock_rdlock() |
FreeBSD | pthread_rwlock_rdlock() |
OS X | pthread_rwlock_rdlock() |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_rwlock_rdunlock | ( | nlib_rwlock * | rwlock | ) |
読み込みロックを解放します。
[in] | rwlock | リードライトロックオブジェクト |
0 | 成功した場合 |
EINVAL | rwlock がNULL である場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | ReleaseSRWLockShared() |
Linux | pthread_rwlock_unlock() |
FreeBSD | pthread_rwlock_unlock() |
OS X | pthread_rwlock_unlock() |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_rwlock_tryrdlock | ( | nlib_rwlock * | rwlock | ) |
読み込みロックを取得しクリティカルセクションに入ることを試みます。
[in] | rwlock | リードライトロックオブジェクト |
0 | 成功した場合 |
EINVAL | rwlock がNULL である場合 |
EBUSY | ロックを取得できなかった場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | TryAcquireSRWLockShared() |
Linux | pthread_rwlock_tryrdlock() |
FreeBSD | pthread_rwlock_tryrdlock() |
OS X | pthread_rwlock_tryrdlock() |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_rwlock_tryrdlock_for | ( | nlib_rwlock * | rwlock, |
nlib_duration | duration | ||
) |
読み込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。
[in] | rwlock | リードライトロックオブジェクト |
[in] | duration | タイムアウトまでの時間 |
0 | 成功した場合 |
EINVAL | rwlock がNULL である場合 |
ETIMEDOUT | タイムアウトした場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | TryAcquireSRWLockShared(), nlib_sleep() |
Linux | pthread_rwlock_timedrdlock() |
FreeBSD | pthread_rwlock_timedrdlock() |
OS X | nlib_rwlock_tryrdlock(), nlib_sleep() |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_rwlock_tryrdlock_until | ( | nlib_rwlock * | rwlock, |
nlib_time | abstime | ||
) |
読み込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。
[in] | rwlock | リードライトロックオブジェクト |
[in] | abstime | タイムアウトする時刻 |
0 | 成功した場合 |
EINVAL | rwlock がNULL である場合 |
ETIMEDOUT | タイムアウトした場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | TryAcquireSRWLockShared()とスリープ |
Linux | pthread_rwlock_timedrdlock() |
FreeBSD | pthread_rwlock_timedrdlock() |
OS X | nlib_rwlock_tryrdlock(), nlib_sleep() |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_rwlock_trywrlock | ( | nlib_rwlock * | rwlock | ) |
書き込みロックを取得しクリティカルセクションに入ることを試みます。
[in] | rwlock | リードライトロックオブジェクト |
0 | 成功した場合 |
EINVAL | rwlock がNULL である場合 |
EBUSY | ロックを取得できなかった場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | TryAcquireSRWLockExclusive() |
Linux | pthread_rwlock_trywrlock() |
FreeBSD | pthread_rwlock_trywrlock() |
OS X | pthread_rwlock_trywrlock() |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_rwlock_trywrlock_for | ( | nlib_rwlock * | rwlock, |
nlib_duration | duration | ||
) |
書き込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。
[in] | rwlock | リードライトロックオブジェクト |
[in] | duration | タイムアウトまでの時間 |
0 | 成功した場合 |
EINVAL | rwlock がNULL である場合 |
ETIMEDOUT | タイムアウトした場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | TryAcquireSRWLockExclusive()とスリープ |
Linux | pthread_rwlock_timedwrlock() |
FreeBSD | pthread_rwlock_timedwrlock() |
OS X | nlib_rwlock_trywrlock(), nlib_sleep() |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_rwlock_trywrlock_until | ( | nlib_rwlock * | rwlock, |
nlib_time | abstime | ||
) |
書き込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。
[in] | rwlock | リードライトロックオブジェクト |
[in] | abstime | タイムアウトする時刻 |
0 | 成功した場合 |
EINVAL | rwlock がNULL である場合 |
ETIMEDOUT | タイムアウトした場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | TryAcquireSRWLockExclusive()とスリープ |
Linux | pthread_rwlock_timedwrlock() |
FreeBSD | pthread_rwlock_timedwrlock() |
OS X | nlib_rwlock_trywrlock(), nlib_sleep() |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_rwlock_wrlock | ( | nlib_rwlock * | rwlock | ) |
書き込みロックを取得しクリティカルセクションに入ります。取得できるまでブロックします。
[in] | rwlock | リードライトロックオブジェクト |
0 | 成功した場合 |
EINVAL | rwlock がNULL である場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | AcquireSRWLockExclusive() |
Linux | pthread_rwlock_wrlock() |
FreeBSD | pthread_rwlock_wrlock() |
OS X | pthread_rwlock_wrlock() |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_rwlock_wrunlock | ( | nlib_rwlock * | rwlock | ) |
書き込みロックを解放します。
[in] | rwlock | リードライトロックオブジェクト |
0 | 成功した場合 |
EINVAL | rwlock がNULL である場合 |
その他 | 実装依存のエラー |
Platform | implementation |
---|---|
Win32 | ReleaseSRWLockExclusive() |
Linux | pthread_rwlock_unlock() |
FreeBSD | pthread_rwlock_unlock() |
OS X | pthread_rwlock_unlock() |
CAFE | nlibによる実装 |
CTR | nlibによる実装 |
nlib_semaphore_destroy | ( | nlib_semaphore * | sem | ) |
セマフォオブジェクトを破壊する。
[in] | sem | セマフォオブジェクトへのポインタ |
0 | 成功した場合 |
EINVAL | sem がNULL の場合 |
その他 | ブロックされているスレッドがある等の不正な状態が検出された場合 |
Platform | implementation |
---|---|
Win32 | CloseHandle() |
Linux | sem_destroy() |
FreeBSD | sem_destroy() |
OS X | sem_close(), sem_unlink() |
CAFE | No SDK API called |
CTR | Semaphore::~Semaphore() |
nlib_semaphore_init | ( | nlib_semaphore * | sem, |
int | initial_count | ||
) |
sem
で指定されるセマフォオブジェクトを初期化する。
[out] | sem | セマフォオブジェクトへのポインタ |
[in] | initial_count | セマフォカウントの初期値 |
0 | 成功した場合 |
EINVAL | sem がNULL の場合, initial_count が65535を超えている場合 |
Platform | implementation |
---|---|
Win32 | CreateSemaphore() |
Linux | sem_init() |
FreeBSD | sem_init() |
OS X | sem_open() |
CAFE | OSInitSemaphore() |
CTR | Semaphore::TryInitialize() |
nlib_semaphore_post | ( | nlib_semaphore * | sem, |
int * | previous_count | ||
) |
セマフォカウントを1つ増加させる。
[in] | sem | セマフォオブジェクトへのポインタ |
[out] | previous_count | 解放前のセマフォカウント |
0 | 成功した場合 |
EINVAL | sem がNULL の場合 |
その他 | セマフォカウントが上限を越えようとした場合等 |
Platform | implementation |
---|---|
Win32 | ReleaseSemaphore() |
Linux | sem_post() |
FreeBSD | sem_post() |
OS X | sem_post() |
CAFE | OSSignalSemaphore() |
CTR | Semaphore::Release() |
nlib_semaphore_post_ex | ( | nlib_semaphore * | sem, |
int | release_count, | ||
int * | previous_count | ||
) |
セマフォカウントをreleaseCount
増加させる。
[in] | sem | セマフォオブジェクトへのポインタ |
[in] | release_count | セマフォの増加数 |
[out] | previous_count | 解放前のセマフォカウント |
0 | 成功した場合 |
EINVAL | sem がNULL の場合 |
その他 | セマフォカウントが上限を越えようとした場合等 |
Platform | implementation |
---|---|
Win32 | ReleaseSemaphore() |
Linux | sem_post() |
FreeBSD | sem_post() |
OS X | sem_post() |
CAFE | OSSignalSemaphore() |
CTR | Semaphore::Release() |
nlib_semaphore_trywait | ( | nlib_semaphore * | sem | ) |
セマフォカウントが0でなければ、セマフォカウントを1減少させる。
[in] | sem | セマフォオブジェクトへのポインタ |
0 | 成功した場合 |
EAGAIN | セマフォカウントが0だった場合 |
EINVAL | sem がNULL の場合 |
その他 | 何らかの理由で失敗した場合 |
Platform | implementation |
---|---|
Win32 | WaitForSingleObject() |
Linux | sem_trywait(), errnoがEINTR の場合は内部で再度実行される。 |
FreeBSD | sem_trywait(), errnoがEINTR の場合は内部で再度実行される。 |
OS X | sem_trywait(), errnoがEINTR の場合は内部で再度実行される。 |
CAFE | OSTryWaitSemaphore() |
CTR | Semaphore::TryAcquire() |
nlib_semaphore_trywait_for | ( | nlib_semaphore * | sem, |
nlib_duration | duration | ||
) |
セマフォカウントが0でなければ、セマフォカウントを1減少させる。0の場合はduration
の期間だけ待つ。
[in] | sem | セマフォオブジェクトへのポインタ |
[in] | duration | タイムアウト時間 |
0 | 成功した場合 |
ETIMEDOUT | タイムアウトした場合 |
EINVAL | sem がNULL の場合 |
その他 | 何らかの理由で失敗した場合 |
Platform | implementation |
---|---|
Win32 | WaitForSingleObject() |
Linux | sem_timedwait(), errnoがEINTR の場合は内部で再度実行される。 |
FreeBSD | sem_timedwait(), errnoがEINTR の場合は内部で再度実行される。 |
OS X | nlib_semaphore_trywait(), nlib_sleep(), errnoがEINTR の場合は内部で再度実行される。 |
CAFE | OSTryWaitSemaphore() |
CTR | Semaphore::TryAcquire() |
nlib_semaphore_wait | ( | nlib_semaphore * | sem | ) |
セマフォカウントが0でなくなるまで待って、セマフォカウントを1減少させる。
[in] | sem | セマフォオブジェクトへのポインタ |
0 | 成功した場合 |
EINVAL | sem がNULL の場合 |
その他 | 何らかの理由で失敗した場合 |
Platform | implementation |
---|---|
Win32 | WaitForSingleObject() |
Linux | sem_wait(), errnoがEINTR の場合は内部で再度実行される。 |
FreeBSD | sem_wait(), errnoがEINTR の場合は内部で再度実行される。 |
OS X | sem_wait(), errnoがEINTR の場合は内部で再度実行される。 |
CAFE | OSWaitSemaphore() |
CTR | Semaphore::Acquire() |
nlib_skipws | ( | size_t * | cnt_lf, |
const char ** | last_lf, | ||
const char * | s, | ||
size_t | n | ||
) |
n
個の文字から成る文字列を探索して最初の空白でない文字へのポインタを返します。
[in] | cnt_lf | 見つかったLF(0x0A) の数が格納されます。 |
[in] | last_lf | 最後のLF(0x0A) へのポインタが格納されます。 |
[in] | s | 文字列へのポインタ |
[in] | n | 対象となる文字列の長さ |
HT(0x09), LF(0x0A), CR(0x0D), SPC(0x20)
のことをいいます。 Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | nlib_memchr_not()を利用した実装 |
CTR | nlib_memchr_not()を利用した実装 |
nlib_sleep | ( | nlib_duration | t | ) |
t
の間スリープする。
[in] | t | スリープする時間 |
Platform | implementation |
---|---|
Win32 | Sleep() |
Linux | nanosleep(), errnoがEINTR の場合は内部で再度実行される。 |
FreeBSD | nanosleep(), errnoがEINTR の場合は内部で再度実行される。 |
OS X | nanosleep(), errnoがEINTR の場合は内部で再度実行される。 |
CAFE | OSSleepNanoseconds() |
CTR | nn::os::Thread::Sleep() |
nlib_strcat | ( | char * | s1, |
size_t | s1max, | ||
const char * | s2 | ||
) |
N1078のstrcat_sに相当する実装です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ(文字数) |
[in] | s2 | コピー元のバッファ |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | nlib_strnlen() + nlib_memcpy() |
Linux | nlib_strnlen() + nlib_memcpy() |
FreeBSD | nlib_strnlen() + nlib_memcpy() |
OS X | nlib_strnlen() + nlib_memcpy() |
CAFE | nlib_strnlen() + nlib_memcpy() |
CTR | nlib_strnlen() + nlib_memcpy() |
nlib_strchr | ( | const char * | s, |
int | c | ||
) |
文字列の先頭から文字を検索します。
[in] | s | 検索対象文字列 |
[in] | c | 検索文字 |
NULL
を返します。Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | 32bit単位でチェックする実装 |
CTR | 32bit単位でチェックする実装 |
nlib_strchr_mb | ( | const char * | s | ) |
文字列の先頭から文字を検索して、ヌル文字又は0x80-0xFFのバイトへのポインタを返します。
[in] | s | 検索対象文字列 |
Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | 32bit単位でチェックする実装 |
CTR | 32bit単位でチェックする実装 |
nlib_strcplen | ( | size_t * | count, |
const char * | str | ||
) |
文字列中のコードポイントの数を取得します。
[out] | count | コードポイントの数が格納される変数 |
[in] | str | 文字列 |
0 | 成功した場合 |
EINVAL | count 又は str がNULL の場合 |
EILSEQ | コードポイントに変換できないデータがあった場合 |
EILSEQ
を返す場合は、その場所までのcount
が格納されています。 nlib_strcplen_ex | ( | size_t * | count, |
size_t * | len, | ||
const char * | str | ||
) |
文字列中のコードポイントの数と文字列長を取得します。
[out] | count | コードポイントの数が格納される変数 |
[out] | len | 文字列長が格納される変数 |
[in] | str | 文字列 |
0 | 成功した場合 |
EINVAL | count 又は str がNULL の場合 |
EILSEQ | コードポイントに変換できないデータがあった場合 |
EILSEQ
を返す場合は、その場所までのlen
とcount
が格納されています。 nlib_strcpy | ( | char * | s1, |
size_t | s1max, | ||
const char * | s2 | ||
) |
N1078のstrcpy_sに相当する実装です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ(文字数) |
[in] | s2 | コピー元のバッファ |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | nlib_strnlen() + nlib_memcpy() |
Linux | nlib_strnlen() + nlib_memcpy() |
FreeBSD | nlib_strnlen() + nlib_memcpy() |
OS X | nlib_strnlen() + nlib_memcpy() |
CAFE | nlib_strnlen() + nlib_memcpy() |
CTR | nlib_strnlen() + nlib_memcpy() |
nlib_strlen | ( | const char * | s | ) |
内部でstrlen()
を呼び出します。独自の実装が動作する場合もあります。
[in] | s | 文字列へのポインタ |
s
がNULL
の場合は0を返します。 Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | 1ワード単位でスキャンする実装 |
CTR | 1ワード単位でスキャンする実装 |
nlib_strncat | ( | char * | s1, |
size_t | s1max, | ||
const char * | s2, | ||
size_t | n | ||
) |
N1078のstrncat_sに相当する実装です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ(文字数) |
[in] | s2 | コピー元のバッファ |
[in] | n | コピーする文字数 |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | nlib_strnlen() + nlib_memcpy() |
Linux | nlib_strnlen() + nlib_memcpy() |
FreeBSD | nlib_strnlen() + nlib_memcpy() |
OS X | nlib_strnlen() + nlib_memcpy() |
CAFE | nlib_strnlen() + nlib_memcpy() |
CTR | nlib_strnlen() + nlib_memcpy() |
nlib_strncpy | ( | char * | s1, |
size_t | s1max, | ||
const char * | s2, | ||
size_t | n | ||
) |
N1078のstrncpy_sに相当する実装です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ(文字数) |
[in] | s2 | コピー元のバッファ |
[in] | n | コピーする文字数 |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | nlib_strnlen() + nlib_memcpy() |
Linux | nlib_strnlen() + nlib_memcpy() |
FreeBSD | nlib_strnlen() + nlib_memcpy() |
OS X | nlib_strnlen() + nlib_memcpy() |
CAFE | nlib_strnlen() + nlib_memcpy() |
CTR | nlib_strnlen() + nlib_memcpy() |
nlib_strnlen | ( | const char * | s, |
size_t | maxsize | ||
) |
N1078のstrnlen_sに相当する実装です。
[in] | s | 文字列へのポインタ |
[in] | maxsize | 文字列のサイズ(戻り値の最大数) |
s
がNULL
の場合は0を返します。文字列の長さがmaxsize
以上の場合はmaxsize
を返します。 Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | 1ワード単位でスキャンする実装 |
CTR | 1ワード単位でスキャンする実装 |
nlib_strrchr | ( | const char * | s, |
int | c | ||
) |
文字列の末尾から文字を検索します。
[in] | s | 検索対象文字列 |
[in] | c | 検索文字 |
NULL
を返します。Platform | implementation |
---|---|
Win32 | strrchr() |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | nlib_strlen() + 後方から32bit単位でチェックする実装 |
CTR | nlib_strlen() + 後方から32bit単位でチェックする実装 |
nlib_swapendian_16 | ( | uint16_t * | p, |
size_t | count | ||
) |
エンディアンを変換します。
[in,out] | p | エンディアンを変換する領域へのポインタ |
[in] | count | データの個数 |
0 | 成功。 |
EINVAL | p がNULL の場合 |
Platform | implementation |
---|---|
Win32 | SIMDを利用した実装 |
Linux | SIMDを利用した実装 |
FreeBSD | SIMDを利用した実装 |
OS X | SIMDを利用した実装 |
CAFE | 一般的な実装 |
CTR | 一般的な実装 |
nlib_swapendian_32 | ( | uint32_t * | p, |
size_t | count | ||
) |
エンディアンを変換します。
[in,out] | p | エンディアンを変換する領域へのポインタ |
[in] | count | データの個数 |
0 | 成功。 |
EINVAL | p がNULL の場合 |
Platform | implementation |
---|---|
Win32 | SIMDを利用した実装 |
Linux | SIMDを利用した実装 |
FreeBSD | SIMDを利用した実装 |
OS X | SIMDを利用した実装 |
CAFE | 一般的な実装 |
CTR | 一般的な実装 |
nlib_swapendian_64 | ( | uint64_t * | p, |
size_t | count | ||
) |
エンディアンを変換します。
[in,out] | p | エンディアンを変換する領域へのポインタ |
[in] | count | データの個数 |
0 | 成功。 |
EINVAL | p がNULL の場合 |
Platform | implementation |
---|---|
Win32 | SIMDを利用した実装 |
Linux | SIMDを利用した実装 |
FreeBSD | SIMDを利用した実装 |
OS X | SIMDを利用した実装 |
CAFE | 一般的な実装 |
CTR | 一般的な実装 |
nlib_thread_attr_destroy | ( | nlib_thread_attr * | attr | ) |
スレッド初期化オブジェクトを破壊します。
[out] | attr | 破壊するオブジェクト |
0 | 成功しました。 |
EINVAL | attr がNULL だった場合 |
nlib_thread_attr_getint | ( | const nlib_thread_attr * | attr, |
int | key, | ||
int * | value | ||
) |
スレッドの属性オブジェクトのキーに対応する整数を取得する。
[in] | attr | スレッドの属性 |
[in] | key | キー |
[out] | value | キーに対応する値が設定される |
0 | 成功しました。 |
EINVAL | 引数の値が不正です。 |
Platform | implementation |
---|---|
Win32 | nlib独自の実装 |
Linux | pthread_attr_getdetachstate(), pthread_attr_getstacksize(), pthread_attr_getschedparam(), pthread_attr_getaffinity_np() |
FreeBSD | pthread_attr_getdetachstate(), pthread_attr_getstacksize(), pthread_attr_getschedparam(), pthread_attr_getaffinity_np() |
OS X | pthread_attr_getdetachstate(), pthread_attr_getstacksize(), pthread_attr_getschedparam() |
CAFE | nlib独自の実装 |
CTR | nlib独自の実装 |
nlib_thread_attr_getptr | ( | const nlib_thread_attr * | attr, |
int | key, | ||
void ** | value | ||
) |
スレッドの属性オブジェクトのキーに対応するポインタを取得する。現在のところEINVAL
のみを返します。
[in] | attr | スレッドの属性 |
[in] | key | キー |
[out] | value | キーに対応する値が設定される |
0 | 成功しました。 |
EINVAL | 引数の値が不正です。 |
nlib_thread_attr_getstack | ( | const nlib_thread_attr * | attr, |
void ** | stack_addr, | ||
size_t * | stack_size | ||
) |
スレッドの属性オブジェクトのスタック設定を取得する。
[in] | attr | スレッドの属性 |
[out] | stack_addr | スタックアドレス |
[out] | stack_size | スタックサイズ |
Platform | implementation |
---|---|
Win32 | nlib独自の実装 |
Linux | pthread_attr_getstack() |
FreeBSD | pthread_attr_getstack() |
OS X | pthread_attr_getstack() |
CAFE | nlib独自の実装 |
CTR | nlib独自の実装 |
nlib_thread_attr_init | ( | nlib_thread_attr * | attr | ) |
スレッド属性オブジェクトを初期化して、デフォルトに設定する。
[out] | attr | 初期化される属性 |
0 | 成功しました。 |
EINVAL | attr がNULL だった場合 |
nlib_thread_attr_setint | ( | nlib_thread_attr * | attr, |
int | key, | ||
int | value | ||
) |
スレッドの属性オブジェクトのキーに対応する整数を設定する。
[out] | attr | スレッドの属性 |
[in] | key | キー |
[in] | value | 設定される値 |
0 | 成功しました。 |
EINVAL | 引数の値が不正です。 |
キー | 説明 |
---|---|
NLIB_THREAD_ATTR_KEY_DETACHSTATE | 0以外の場合はデタッチ状態でスレッドを立ち上げる |
NLIB_THREAD_ATTR_KEY_STACKSIZE | スレッドのスタックサイズ |
NLIB_THREAD_ATTR_KEY_PRIORITY | スレッドの優先度 |
NLIB_THREAD_ATTR_KEY_AFFINITY | スレッドのアフィニティマスク |
Platform | implementation |
---|---|
Win32 | スレッド起動直後にデタッチ, _beginthreadex(), スレッド起動直後に設定, スレッド起動直後に設定 |
Linux | pthread_attr_setdetachstate(), pthread_attr_setstacksize(), pthread_attr_setschedparam(), pthread_attr_setaffinity_np() |
FreeBSD | pthread_attr_setdetachstate(), pthread_attr_setstacksize(), pthread_attr_setschedparam(), pthread_attr_setaffinity_np() |
OS X | pthread_attr_setdetachstate(), pthread_attr_setstacksize(), pthread_attr_setschedparam(), スレッド起動直後に設定 |
CAFE | OSCreateThread(), OSCreateThread(), OSCreateThread(), OSCreateThread() |
CTR | スレッド起動直後にデタッチ, nn::os::Thread::TryStartUsingAutoStack(), nn::os::Thread::TryStartUsingAutoStack(), なし |
nlib_thread_attr_setptr | ( | nlib_thread_attr * | attr, |
int | key, | ||
void * | value | ||
) |
スレッドの属性オブジェクトのキーに対応するポインタを設定する。現在のところEINVAL
のみを返します。
[out] | attr | スレッドの属性 |
[in] | key | キー |
[in] | value | 設定される値 |
0 | 成功しました。 |
EINVAL | 引数の値が不正です。 |
nlib_thread_attr_setstack | ( | nlib_thread_attr * | attr, |
void * | stack_addr, | ||
size_t | stack_size | ||
) |
スレッドの属性オブジェクトのスタック設定を設定する。
Platform | implementation |
---|---|
Win32 | nlib独自の実装(設定した値は無視されます) |
Linux | pthread_attr_getstack() |
FreeBSD | pthread_attr_getstack() |
OS X | pthread_attr_getstack() |
CAFE | nlib独自の実装 |
CTR | nlib独自の実装 |
[out] | attr | スレッドの属性 |
[in] | stack_addr | スタックアドレス |
[in] | stack_size | スタックサイズ |
nlib_thread_cleanup_pop | ( | int | exec | ) |
クリーンアップハンドラが格納されているスタックの一番上のハンドラを削除します。
[in] | exec | 0以外ならクリーンアップハンドラを実行する。0ならば実行しない。 |
Platform | implementation |
---|---|
Win32 | nlib独自の実装 |
Linux | pthread_cleanup_pop() |
FreeBSD | pthread_cleanup_pop() |
OS X | pthread_cleanup_pop() |
CAFE | nlib独自の実装 |
CTR | 実装が存在しません(コンパイルエラー) |
nlib_thread_cleanup_push | ( | void(*)(void *) | fn, |
void * | arg | ||
) |
fn
を専用のスタックにプッシュします。
[in] | fn | |
[in] | arg |
nlib_thread_exit()
の実行時に実行されるクリーンアップハンドラを専用のスタックにプッシュします。 nlib_thread_cleanup_pop()
される前にnlib_thread_exit()
(nlib_thread_exit_cpp()
ではない)が呼ばれた場合、順番にハンドラを実行してスレッドの終了処理を行います。 return文の実行でスレッドから抜ける場合にはクリーンアップハンドラは実行されないことに注意してください。 また、C++例外を利用した場合にハンドラが実行されるかどうかは不定(プラットフォームに依存)で、クリーンアップハンドラ内でnlib_thread_exit()
又はnlib_thred_exit_cpp()
を呼び出した場合の動作は不定です。 Platform | implementation |
---|---|
Win32 | nlib独自の実装 |
Linux | pthread_cleanup_push() |
FreeBSD | pthread_cleanup_push() |
OS X | pthread_cleanup_push() |
CAFE | nlib独自の実装 |
CTR | 実装が存在しません(コンパイルエラー) |
nlib_thread_create | ( | nlib_thread * | thread, |
const nlib_thread_attr * | attr, | ||
nlib_thread_func | func, | ||
void * | arg | ||
) |
新しいスレッド作成して実行します。
[out] | thread | スレッドの作成が成功した場合、スレッドを指すデータが格納される。 |
[in] | attr | NULL を指定した場合はデフォルトの属性が指定されます。 |
[in] | func | 新しいスレッドで実行する関数 |
[in] | arg | 関数func に渡す引数 |
0 | 成功した場合 |
EINVAL | thread , func がNULL だった場合、その他パラメータが不正と判定された場合 |
ENOMEM | メモリの動的確保に失敗した場合 |
EAGAIN | リソース不足等(スレッド数が多すぎる、メモリ不足)でスレッドを立ち上げられなかった場合 |
EACCES | リソース不足等(スレッド数が多すぎる、メモリ不足)でスレッドを立ち上げられなかった場合 |
func
をarg
を引数として実行されます。 また、デフォルトではスレッドはJoin可能なものとして作成されます。 nlib_thread_detach | ( | nlib_thread | thread | ) |
実行中のスレッドをデタッチ状態にします。
[in] | thread | スレッドの識別子 |
0 | 成功した場合 |
EINVAL | スレッドが見つからなかったがデタッチされている |
ESRCH | スレッドが見つからなかったがデタッチされている |
Platform | implementation |
---|---|
Win32 | CloseHandle() |
Linux | pthread_detach() |
FreeBSD | pthread_detach() |
OS X | pthread_detach() |
CAFE | OSDetachThread() |
CTR | Thread::Detach() |
nlib_thread_equal | ( | nlib_thread | th1, |
nlib_thread | th2 | ||
) |
2つのスレッドが同一スレッドを指すかどうかチェックします。
[in] | th1 | 比較するnlib_thread 型の値 |
[in] | th2 | 比較するnlib_thread 型の値 |
th1
とth2
が同一のスレッドを指している時、非0の値が返る。それ以外の場合、0が返る。 nlib_thread_exit | ( | void | ) |
呼び出しスレッドを終了します。
nlib_thread_cleanup_push()
, nlib_thread_cleanup_pop()
を用いてヒープ上に構築されたオブジェクトを明示的に解体する必要があります。 Platform | implementation |
---|---|
Win32 | _endthreadex(0) |
Linux | pthread_exit(0) |
FreeBSD | pthread_exit(0) |
OS X | pthread_exit(0) |
CAFE | OSExitThread(0) |
CTR | 実装が存在しません(コンパイルエラー) |
nlib_thread_exit_cpp | ( | ) |
呼び出しスレッドを終了します。
catch (...)
で例外がキャッチされてしまうと正しく動作しません。 また、この関数の呼び出し元の全ての関数で無例外指定(noexcept他)が指定されていてはいけません。 なお、nlib_thread_cleanup_push()
, nlib_thread_cleanup_pop()
が用いられている場合の動作は不定(プラットフォームによる)です。 Platform | implementation |
---|---|
Win32 | nlib_unwind_exceptionをスロー |
Linux | pthread_exit(0)の内部でabi::__forced_unwindをスロー |
FreeBSD | pthread_exit(0)の内部で_Unwind_Exceptionをスロー |
OS X | nlib_unwind_exceptionをスロー |
CAFE | 実装が存在しません(コンパイルエラー) |
CTR | 実装が存在しません(コンパイルエラー) |
nlib_thread_cleanup_push()
で登録されたデストラクタはLinuxとFreeBSDの場合は実行されます。また、FreeBSDの場合はスローされた(特殊な)C++例外をキャッチすることができません。nlib_thread_getconcurrency | ( | unsigned int * | num_cpu | ) |
ハードウェアスレッドの数を取得します。
[out] | num_cpu | ハードウェアスレッドの数が設定されます。 |
0 | 成功しました。 |
Platform | implementation |
---|---|
Win32 | GetSystemInfo(&sysinfo); sysinfo.dwNumberOfProcessors |
Linux | sysconf(_SC_NPROCESSORS_ONLN) |
FreeBSD | sysconf(_SC_NPROCESSORS_ONLN) |
OS X | sysconf(_SC_NPROCESSORS_ONLN) |
CAFE | OSGetCoreCount() |
CTR | 1 |
nlib_thread_getcpu | ( | int * | cpuid | ) |
呼び出したスレッドが実行されているCPUを取得します。
[out] | cpuid | CPU番号 |
cpuid
がNULL
の場合はEINVAL
を返す*cpuid
を0に設定してエラーを返します。 Platform | implementation |
---|---|
Win32(VISTA) | GetCurrentProcessorNumber() |
Win32(Windows 7以降) | GetCurrentProcessorNumberEx() |
Linux | sched_getcpu(), (GetCurrentProcessorNumber() if cygwin) |
FreeBSD | 0を設定しENOTSUPを返す |
OS X | 0を設定しENOTSUPを返す |
CAFE | OSGetCoreId() |
CTR | nn::os::Thread::GetCurrentProcessorNumber() |
nlib_thread_getid | ( | nlib_thread_id * | id | ) |
実行中のスレッドに対応する一意の整数値を格納する。
[out] | id | スレッドに対応する整数値が格納される |
0 | 成功しました |
Platform | implementation |
---|---|
Win32 | GetCurrentThreadId() |
Linux | syscall(SYS_gettid), (GetCurrentThreadId() if cygwin) |
FreeBSD | thr_self() |
OS X | pthread_threadid_np() |
CAFE | OSGetCurrentThread() |
CTR | nn::os::Thread::GetCurrentId() |
nlib_thread_getpriority | ( | nlib_thread | thread, |
int * | priority | ||
) |
スレッドの現在の実行優先度を取得します。数値の意味は実装依存です。
[in] | thread | スレッドの識別子 |
[out] | priority | 実行優先度が格納されます。 |
0 | 成功しました。 |
EINVAL | priority がNULL だった場合 |
ESRCH | thread が無効であることが検出された場合(EINVAL を返す場合もある) |
Platform | implementation |
---|---|
Win32 | GetThreadPriority() |
Linux | pthread_getschedparam() |
FreeBSD | pthread_getschedparam() |
OS X | pthread_getschedparam() |
CAFE | OSGetThreadPriority() |
CTR | Thread::GetCurrentPriority() |
nlib_thread_join | ( | nlib_thread | thread | ) |
スレッドの終了を待ちます。
[in] | thread | 終了を待つスレッドの識別子 |
0 | 成功した場合 |
EINVAL | スレッドが見つからなかったがデタッチされている |
ESRCH | スレッドが見つからなかったがデタッチされている |
Platform | implementation |
---|---|
Win32 | WaitForSingleObject() + CloseHandle() |
Linux | pthread_join() |
FreeBSD | pthread_join() |
OS X | pthread_join() |
CAFE | OSJoinThread() |
CTR | Thread::Join() |
nlib_thread_priority_default | ( | int * | priority | ) |
実行優先度に指定できる数値のデフォルト値を取得します。
[out] | priority | 実行優先度 |
0 | 成功した場合 |
Platform | implementation |
---|---|
Win32 | THREAD_PRIORITY_NORMAL |
Linux | 0 |
FreeBSD | 0 |
OS X | 0 |
CAFE | OS_PRIORITY_APP_DEFAULT |
CTR | 16 |
nlib_thread_priority_max | ( | int * | priority | ) |
実行優先度に指定できる数値の最大値を取得します。
[out] | priority | 実行優先度 |
0 | 成功した場合 |
Platform | implementation |
---|---|
Win32 | THREAD_BASE_PRIORITY_LOWRT |
Linux | sched_get_priority_max(SCHED_OTHER) |
FreeBSD | sched_get_priority_max(SCHED_OTHER) |
OS X | sched_get_priority_max(SCHED_OTHER) |
CAFE | 31 |
CTR | 31 |
nlib_thread_priority_min | ( | int * | priority | ) |
実行優先度に指定できる数値の最小値を取得します。
[out] | priority | 実行優先度 |
0 | 成功した場合 |
Platform | implementation |
---|---|
Win32 | THREAD_BASE_PRIORITY_IDLE |
Linux | sched_get_priority_min(SCHED_OTHER) |
FreeBSD | sched_get_priority_min(SCHED_OTHER) |
OS X | sched_get_priority_min(SCHED_OTHER) |
CAFE | 0 |
CTR | 0 |
nlib_thread_self | ( | nlib_thread * | thread | ) |
実行中のスレッドに対応するnlib_thread
の値を格納する。
[out] | thread | スレッドの識別子 |
0 | 成功しました。 |
Platform | implementation |
---|---|
Win32 | GetCurrentThread() |
Linux | pthread_self() |
FreeBSD | pthread_self() |
OS X | pthread_self() |
CAFE | OSGetCurrentThread() |
CTR | ENOTSUP を返す |
nlib_thread_setaffinity | ( | nlib_thread | thread, |
uint32_t | affinity | ||
) |
指定されたスレッドのプロセッサアフィニティマスクを設定します。
[in] | thread | スレッドの識別子 |
[in] | affinity | スレッドアフィニティマスク |
thread
に自身のスレッドを指定する必要があります。 これはLinuxでは自身以外のスレッドのtid
(pthread_t
ではない)の取得がサポートされていないためです。 自身以外のスレッドを指定した場合はEINVAL
を返します。 Platform | implementation |
---|---|
Win32 | SetThreadAffinityMask() |
Linux | pthread_setaffinity_np(), (SetThreadAffinityMask() if cygwin) |
FreeBSD | pthread_setaffinity_np() |
OS X | thread_policy_set() |
CAFE | OSSuspendThread(), OSSetThreadAffinity(), OSResumeThread()。1, 2, 4がそれぞれコア0, コア1, コア2に対応する。自スレッドに対する設定は不可。 |
CTR | ENOTSUP を返す |
nlib_thread_setname | ( | const char * | string_literal | ) |
スレッドに名前をつけます。
[in] | string_literal | スレッド名(リテラル文字列) |
Platform | implementation |
---|---|
Win32 | RaiseException(MS_VC_EXCEPTION, ....) |
Linux | prctl(PR_SET_NAME, ....), cygwinの場合はENOTSUP を返す。 |
FreeBSD | pthread_set_name_np() |
OS X | pthread_setname_np() |
CAFE | OSSetThreadName() |
CTR | ENOTSUP を返す |
nlib_thread_setpriority | ( | nlib_thread | thread, |
int | priority | ||
) |
スレッドの実行優先度を設定します。数値の意味は実装依存です。
[in] | thread | スレッドの識別子 |
[in] | priority | 設定される実行優先度 |
0 | 成功しました。 |
EINVAL | priority がNULL だった場合、priority の値が不正だった場合 |
ESRCH | thread が無効であることが検出された場合(EINVAL を返す場合もある) |
その他 | 権限が無い等の理由で設定できなかった場合 |
Platform | implementation |
---|---|
Win32 | SetThreadPriority() |
Linux | pthread_setschedparam() |
FreeBSD | pthread_setschedparam() |
OS X | pthread_setschedparam() |
CAFE | OSSetThreadPriority() |
CTR | Thread::ChangePriority() |
nlib_ticktime | ( | nlib_duration * | t | ) |
ブートからの経過時間を取得します。
[out] | t | ブートからの経過時間が格納される変数へのポインタ |
0 | 成功した場合 |
EINVAL | t がNULL の場合 |
Platform | implementation |
---|---|
Win32 | GetTickCount64() |
Linux | clock_gettime(CLOCK_MONOTONIC, ...) |
FreeBSD | clock_gettime(CLOCK_MONOTONIC, ...) |
OS X | host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock), clock_get_time(cclock, &mts) |
CAFE | OSGetSystemTime() |
CTR | nn::os::Tick::GetSystemCurrent() |
nlib_tls_alloc | ( | nlib_tls * | tls, |
nlib_tls_destructor | destr | ||
) |
TLSスロットに対する新しいIDを確保します。
[out] | tls | TLSスロットのIDが格納されるポインタ |
[in] | destr | スレッド終了時に呼び出されるデストラクタ関数 |
0 | 成功した場合 |
EINVAL | tls がNULL の場合 |
EAGAIN | TLSスロットを確保するためのリソースが不足した場合、又は、TLSスロットの数がシステムの上限に達した場合 |
destr
関数内で、nlib_tls_alloc()
を呼んだ場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | TlsAlloc()+ |
Linux | pthread_key_create() |
FreeBSD | pthread_key_create() |
OS X | pthread_key_create() |
CAFE | No SDK API called |
CTR | nn::os::ThreadLocalStorage |
nlib_tls_setvalue()
で値を設定した場合、デストラクタ関数が複数回呼ばれる実装と1回だけ呼ばれる実装が存在します。 現在のところcygwinとCTRでは1回だけ呼び出されることに注意してください。この場合、前述のような状況でメモリリークを引き起こす可能性があります。nlib_tls_free | ( | nlib_tls | tls | ) |
TLSスロットに対応するIDを解放します。
[in] | tls | 解放するID |
0 | 成功した場合 |
EINVAL | tls は有効なIDではない。 |
Platform | implementation |
---|---|
Win32 | TlsFree() |
Linux | pthread_key_delete() |
FreeBSD | pthread_key_delete() |
OS X | pthread_key_delete() |
CAFE | No SDK API called |
CTR | ThreadLocalStorage::~ThreadLocalStorage() |
nlib_tls_getvalue | ( | nlib_tls | tls, |
void ** | value | ||
) |
TLSスロットから値を取り出します。
[in] | tls | TLSスロットのID |
[out] | value | 格納されている値を取得するポインタ |
0 | 成功した場合 |
EINVAL | tls は有効なIDではない。 |
Platform | implementation |
---|---|
Win32 | TlsGetValue() |
Linux | pthread_getspecific() |
FreeBSD | pthread_getspecific() |
OS X | pthread_getspecific() |
CAFE | OSGetThreadSpecific() |
CTR | ThreadLocalStorage::GetValue() |
nlib_tls_setvalue | ( | nlib_tls | tls, |
const void * | value | ||
) |
TLSスロットに値を格納します。
[in] | tls | TLSスロットのID |
[in] | value | 設定する値 |
0 | 成功した場合 |
EINVAL | tls は有効なIDではない。 |
Platform | implementation |
---|---|
Win32 | TlsSetValue() |
Linux | pthread_setspecific() |
FreeBSD | pthread_setspecific() |
OS X | pthread_setspecific() |
CAFE | OSSetThreadSpecific() + OSSetThreadCleanupCallback() |
CTR | ThreadLocalStorage::SetValue() |
nlib_tryonce | ( | nlib_onceflag * | flag, |
nlib_oncefunc | func | ||
) |
nlib_once
と概ね同じですが、func
が他のスレッドで実行中だった場合、EBUSY
を返します。
[in] | flag | NLIB_ONCE_INIT で初期化されていて、関数の実行後に値が変化します。 |
[in] | func | 高々1回実行される関数 |
0 | 関数の実行が完了している場合 |
EBUSY | 関数が他のスレッドで実行中の場合 |
EINVAL | flag がNULL だった場合 |
nlib_unlink | ( | const char * | native_path | ) |
ファイルを削除する
[in] | native_path | パス名(UTF-8) |
0 | 成功した場合 |
EINVAL | native_path がNULL だった場合 |
ENOENT | native_path が存在しない場合 |
その他 | 何らかの原因で失敗した場合 |
Platform | implementation |
---|---|
Win32 | DeleteFileW() |
Linux | unlink() |
FreeBSD | unlink() |
OS X | unlink() |
CAFE | FSRemove() |
CTR | nn::fs::TryDeleteFile() |
|
noexcept |
1つのコードポイントをUTF-16からUTF-32に変換します。
[out] | utf32 | UTF-32の文字が格納される |
[in] | upper | UTF-16の最初の16bit |
[in] | lower | upper に続く16bit |
0 | 変換できなかった場合 |
1 | upper のみがUTF-32に変換された場合 |
2 | upper と lower が組み合わされてUTF-32に変換された場合 |
|
noexcept |
UTF-16文字列からUTF-8文字列に変換します。
[out] | utf8count | 変換された文字数(ヌル文字を含まないchar の個数)が格納されます。 |
[out] | utf8 | 変換された文字列を格納するためのバッファ |
[in] | buflen | utf8 のバッファ・サイズ(ヌル文字を含む文字数単位) |
[in] | utf16 | UTF-16文字列 |
0 | エラーは発生していません。 |
EINVAL | utf8 がNULL でbuflen > 0の場合、又はutf16 がNULL の場合 |
ERANGE | 変換後の文字列が収まらない場合(文字列は切り詰められて途中まで格納される) |
EILSEQ | 変換できないデータが検出された場合 |
char
の個数)を *utf8count
に設定します(utf8count
がNULL
でない場合)。 utf8
にNULL
, buflen
に0を指定するとutf8count
に変換されたUTF-8の数(必ずしもコードポイントの数ではない)を格納します。 *utf8count
に設定し、utf8
に空文字列を設定してEILSEQ
を返します。
|
inlinenoexcept |
文字列中のコードポイントの数を取得します。
[out] | count | コードポイントの数が格納されるポインタ |
[in] | str | 文字列 |
0 | 成功した場合 |
EINVAL | count 又は str がNULL の場合 |
EILSEQ | コードポイントに変換できないデータがあった場合 |
Platform.h の 2240 行目に定義があります。
|
inlinenoexcept |
文字列中のコードポイントの数を取得します。
[out] | count | コードポイントの数が格納されるポインタ |
[out] | len | str の長さが格納されるポインタ |
[in] | str | 文字列 |
0 | 成功した場合 |
EINVAL | count 又は str がNULL の場合 |
EILSEQ | コードポイントに変換できないデータがあった場合 |
Platform.h の 2244 行目に定義があります。
|
inlinenoexcept |
nlib_strcpy()
のUTF-16版です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ(文字数) |
[in] | s2 | コピー元のバッファ |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | nlib_utf16nlen() + nlib_memcpy() |
Linux | nlib_utf16nlen() + nlib_memcpy() |
FreeBSD | nlib_utf16nlen() + nlib_memcpy() |
OS X | nlib_utf16nlen() + nlib_memcpy() |
CAFE | nlib_utf16nlen() + nlib_memcpy() |
CTR | nlib_utf16nlen() + nlib_memcpy() |
Platform.h の 2201 行目に定義があります。
|
inlinenoexcept |
ヌル文字を含まないnlib_utf16_t
の数を数えます。
[in] | str | UTF-16文字列 |
nlib_utf16_t
の数)を返します。Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | ループを展開した実装 |
CTR | ループを展開した実装 |
Platform.h の 2194 行目に定義があります。
|
inlinenoexcept |
nlib_strcpy()
のUTF-16版です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ(文字数) |
[in] | s2 | コピー元のバッファ |
[in] | n | コピーする文字数 |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | nlib_utf16nlen() + nlib_memcpy() |
Linux | nlib_utf16nlen() + nlib_memcpy() |
FreeBSD | nlib_utf16nlen() + nlib_memcpy() |
OS X | nlib_utf16nlen() + nlib_memcpy() |
CAFE | nlib_utf16nlen() + nlib_memcpy() |
CTR | nlib_utf16nlen() + nlib_memcpy() |
Platform.h の 2206 行目に定義があります。
|
inlinenoexcept |
nlib_strnlen()
のUTF-16版です。
[in] | s | 文字列へのポインタ |
[in] | maxsize | 文字列のサイズ(戻り値の最大数) |
s
がNULL
の場合は0を返します。文字列の長さがmaxsize
以上の場合は maxsize
を返します。 Platform | implementation |
---|---|
Win32 | SIMDを用いた実装 |
Linux | SIMDを用いた実装 |
FreeBSD | SIMDを用いた実装 |
OS X | SIMDを用いた実装 |
CAFE | ループを展開した実装 |
CTR | ループを展開した実装 |
Platform.h の 2197 行目に定義があります。
|
noexcept |
UTF-32文字列からUTF-8文字列に変換します。
[out] | utf8count | 変換された文字数(ヌル文字を含まないchar の個数)が格納されます。 |
[out] | utf8 | 変換された文字列を格納するためのバッファ |
[in] | buflen | utf8 のバッファ・サイズ(ヌル文字を含む文字数単位) |
[in] | utf32 | UTF-32文字列 |
0 | エラーは発生していません。 |
EINVAL | utf8 がNULL でbuflen > 0の場合、又はutf32 がNULL の場合 |
ERANGE | 変換後の文字列が収まらない場合(文字列は切り詰められて途中まで格納される) |
EILSEQ | 変換できないデータが検出された場合 |
char
の個数)を*utf8count
に設定します(utf8count
がNULL
でない場合)。 utf8
にNULL
, buflen
に0を指定するとutf8count
に変換されたUTF-8の数を格納します。 *utf8count
に設定し、utf8
に空文字列を設定してEILSEQ
を返します。
|
noexcept |
1つのUTF-32文字をUTF-16に変換します。
[out] | upper | UTF-16の最初の16bitが格納される |
[out] | lower | upper に続く16bit(あれば)が格納される |
[in] | utf32 | 1文字のUTF-32 |
0 | 変換できなかった場合 |
1 | upper のみに結果が格納されている場合 |
2 | upper とlower に結果が格納されている場合 |
|
noexcept |
1文字のUTF-32をUTF-8に変換します。
[out] | utf8 | 変換されたUTF-8文字列が格納されます。ヌル終端しないことに注意してください。 |
[in] | utf32 | 1文字のUTF-32 |
0 | 変換できなかった場合 |
1 | utf8[0] のみに値が設定された場合 |
2 | utf8[0] , utf8[1] に値が設定された場合 |
3 | utf8[0] , utf8[1] , utf8[2] に値が設定された場合 |
4 | utf8[0] , utf8[1] , utf8[2] , utf8[3] に値が設定された場合 |
|
noexcept |
文字列中のコードポイントの数を取得します。
[out] | count | コードポイントの数が格納されるポインタ |
[in] | str | 文字列 |
0 | 成功した場合 |
EINVAL | count 又は str がNULL の場合 |
EILSEQ | コードポイントに変換できないデータがあった場合 |
|
inlinenoexcept |
nlib_strcpy()
のUTF-32版です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ(文字数) |
[in] | s2 | コピー元のバッファ |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | nlib_utf32nlen() + nlib_memcpy() |
Linux | nlib_utf32nlen() + nlib_memcpy() |
FreeBSD | nlib_utf32nlen() + nlib_memcpy() |
OS X | nlib_utf32nlen() + nlib_memcpy() |
CAFE | nlib_utf32nlen() + nlib_memcpy() |
CTR | nlib_utf32nlen() + nlib_memcpy() |
Platform.h の 2226 行目に定義があります。
|
inlinenoexcept |
ヌル文字を含まないnlib_utf32_t
の数を数えます。
[in] | str | UTF-32文字列 |
nlib_utf32_t
の数)を返します。 Platform.h の 2219 行目に定義があります。
|
inlinenoexcept |
nlib_strcpy()
のUTF-32版です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ(文字数) |
[in] | s2 | コピー元のバッファ |
[in] | n | コピーする文字数 |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | nlib_utf32nlen() + nlib_memcpy() |
Linux | nlib_utf32nlen() + nlib_memcpy() |
FreeBSD | nlib_utf32nlen() + nlib_memcpy() |
OS X | nlib_utf32nlen() + nlib_memcpy() |
CAFE | nlib_utf32nlen() + nlib_memcpy() |
CTR | nlib_utf32nlen() + nlib_memcpy() |
Platform.h の 2231 行目に定義があります。
|
inlinenoexcept |
nlib_strnlen()
のUTF-32版です。
[in] | s | 文字列へのポインタ |
[in] | maxsize | 文字列のサイズ(戻り値の最大数) |
s
がNULL
の場合は0を返します。文字列の長さがmaxsize
以上の場合はmaxsize
を返します。 Platform.h の 2222 行目に定義があります。
|
noexcept |
UTF-8文字列からUTF-16文字列に変換します。UTF-16文字列はヌル終端されます。
[out] | utf16count | 変換された文字数(ヌル文字を含まないnlib_utf16_t の個数)が格納されます。 |
[out] | utf16 | 変換された文字列を格納するためのバッファ |
[in] | buflen | utf16 のバッファ・サイズ(ヌル文字を含む文字数単位) |
[in] | utf8 | UTF-8文字列 |
0 | 成功しました。 |
EINVAL | utf16 がNULL でbuflen > 0の場合、又はutf8 がNULL の場合 |
ERANGE | 変換後の文字列が収まらない場合(文字列は切り詰められて途中まで格納される) |
EILSEQ | 変換できないデータが検出された場合 |
nlib_utf16_t
の個数)を*utf16count
に設定します(utf16count
がNULL
でない場合)。 utf16
にNULL
, buflen
に0を指定するとutf16count
に変換されたUTF-16の数(必ずしもコードポイントの数ではない)を格納します。 *utf16count
に設定し、utf16
に空文字列を設定してEILSEQ
を返します。
|
noexcept |
UTF-8文字列からUTF-32文字列に変換します。
[out] | utf32count | 変換された文字数(ヌル文字を含まないnlib_utf32_t の個数)が格納されます。 |
[out] | utf32 | 変換された文字列を格納するためのバッファ |
[out] | buflen | utf32 のバッファ・サイズ(ヌル文字を含む文字数単位) |
[in] | utf8 | UTF-8文字列 |
0 | エラーは発生していません。 |
EINVAL | utf32 がNULL でbuflen > 0の場合、又はutf8 がNULL の場合 |
ERANGE | 変換後の文字列が収まらない場合(文字列は切り詰められて途中まで格納される) |
EILSEQ | 変換できないデータが検出された場合 |
*utf32count
に設定します(utf32count
がNULL
でない場合)。 utf32
にNULL
, buflen
に0を指定するとutf32count
に変換されたUTF-32の数を格納します。 *utf32count
に設定し、utf32
に空文字列を設定してEILSEQ
を返します。
|
noexcept |
UTF-8を1文字分のUTF-32に変換します。
[out] | utf32 | 変換された文字が格納される |
[in] | utf8 | UTF-8文字列 |
0 | 変換できなかった場合 |
1 | utf8[0] のみを変換した場合 |
2 | utf8[0] , utf8[1] を変換した場合 |
3 | utf8[0] , utf8[1] , utf8[2] を変換した場合 |
4 | utf8[0] , utf8[1] , utf8[2] , utf8[3] を変換した場合 |
nlib_utf8_to_wide | ( | size_t * | wccount, |
wchar_t * | wcstr, | ||
size_t | buflen, | ||
const char * | utf8 | ||
) |
UTF-8文字列からUTF-16/UTF-32文字列に変換します。
[out] | wccount | 変換された文字数(ヌル文字を含まないwchar_t の個数)が格納されます。 |
[out] | wcstr | 変換された文字列を格納するためのバッファ |
[in] | buflen | wcstr のバッファ・サイズ(ヌル文字を含む文字数単位) |
[in] | utf8 | UTF-8文字列 |
wchar_t
が16bitか32bitかによって、nlib_utf8_to_utf16()
かnlib_utf8_to_utf32()
が呼び出されます。 nlib_virtual_alloc | ( | void ** | ptr, |
size_t | size | ||
) |
仮想メモリアドレス空間を割り当てます。
[out] | ptr | 割り当てられた仮想メモリアドレス空間の開始アドレスが書き込まれます。 |
[in] | size | 割り当てる仮想メモリアドレス空間のサイズ(バイト単位) |
Platform | implementation |
---|---|
Win32 | VirtualAlloc(NULL, size, MEM_RESERVE, PAGE_READWRITE); |
Linux | mmap(NULL, size, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); |
FreeBSD | mmap(NULL, size, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); |
OS X | mmap(NULL, size, PROT_NONE, MAP_ANON | MAP_PRIVATE, -1, 0); |
CAFE | MEMAllocFromDefaultHeapEx(size, OSGetPageSize()) |
CTR | MemoryBlockのコンストラクト(最大8領域のみ確保可能) |
nlib_virtual_free | ( | void * | ptr, |
size_t | size | ||
) |
仮想メモリアドレス空間の割り当てを解除します
[in] | ptr | nlib_virtual_alloc()に与えた値 |
[in] | size | nlib_virtual_alloc()に与えた値 |
ptr
, size
がnlib_virtual_alloc()に与えた値と違う場合の動作は不定です。 Platform | implementation |
---|---|
Win32 | VirtualFree(ptr, 0, MEM_RELEASE); |
Linux | munmap(ptr, size) |
FreeBSD | munmap(ptr, size) |
OS X | munmap(ptr, size) |
CAFE | MEMFreeToDefaultHeap(ptr) |
CTR | MemoryBlockのデストラクト |
nlib_vsnprintf | ( | size_t * | count, |
char * | buf, | ||
size_t | size, | ||
const char * | fmt, | ||
va_list | args | ||
) |
より安全な形式のvsnprintf
で、標準のvsnprintf
の動作の違いも吸収します。
[out] | count | 書き込まれた文字数(ヌル文字を含まない) |
[in] | buf | 出力が書き込まれるバッファ |
[in] | size | バッファのサイズ(ヌル文字を含む文字数) |
[in] | fmt | 書式の設定 |
[in] | args | 引数リスト |
0 | 成功した場合 |
ERANGE | 出力がバッファに入りきらない場合 |
EINVAL | count 等がNULL の場合 |
vsnprintf()
は実装により戻り値やerrno
の設定値が異なることが多いのですが、これを統一します。 ERANGE
を返した場合、count
には書き込まれるはずだった文字数が設定され、buf
には収まる限りのNULL
終端された文字列が格納されます。 nlib_snprintf()
, nlib_vdprintf()
, nlib_dprintf()
, nlib_printf()
が存在します。 buf
に配列を利用していてC++の場合には、引数size
を省略できるバージョンが実装されています。 Platform | implementation |
---|---|
Win32 | _vsnprintf_s + nn::nlib::VsnPrintfFallback() |
Linux | vsnprintf |
FreeBSD | vsnprintf |
OS X | vsnprintf |
CAFE | vsnprintf |
CTR | vsnprintf |
nlib_vsnwprintf | ( | size_t * | count, |
wchar_t * | buf, | ||
size_t | size, | ||
const wchar_t * | fmt, | ||
va_list | args | ||
) |
より安全な形式のvswprintf
で、各種vswprintf
の動作の違いも吸収します。
[out] | count | 書き込まれた文字数(ヌル文字を含まない) |
[in] | buf | 出力が書き込まれるバッファ |
[in] | size | バッファのサイズ(ヌル文字を含む文字数) |
[in] | fmt | 書式の設定 |
[in] | args | 引数リスト |
0 | 成功した場合 |
ERANGE | 出力がバッファに入りきらない場合 |
EINVAL | count 等がNULL の場合 |
vswprintf()
は実装により戻り値やerrno
の設定値が異なることが多いのですが、これを統一します。 ERANGE
を返した場合、count
には書き込まれるはずだった文字数が設定され、buf
には収まる限りのNULL 終端された文字列が格納されます。 nlib_snwprintf()
, nlib_vdwprintf()
, nlib_dwprintf()
, nlib_wprintf()
が存在します。 buf
に配列を利用していてC++の場合には、引数size
を省略できるバージョンが実装されています。 Platform | implementation |
---|---|
Win32 | _vsnwprintf_s + nn::nlib::VsnPrintfFallback() |
Linux | vswprintf + nlib_vsnwprintf_fallback() |
FreeBSD | nlib_vsnwprintf_fallback() |
OS X | nlib_vsnwprintf_fallback() |
CAFE | vswprintf + nlib_vsnwprintf_fallback() |
CTR | vswprintf + nlib_vsnwprintf_fallback() |
nlib_wcscat | ( | wchar_t * | s1, |
size_t | s1max, | ||
const wchar_t * | s2 | ||
) |
N1078のwcscat_sに相当する実装です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ(文字数) |
[in] | s2 | コピー元のバッファ |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | nlib_wcsnlen() + nlib_memcpy() |
Linux | nlib_wcsnlen() + nlib_memcpy() |
FreeBSD | nlib_wcsnlen() + nlib_memcpy() |
OS X | nlib_wcsnlen() + nlib_memcpy() |
CAFE | nlib_wcsnlen() + nlib_memcpy() |
CTR | nlib_wcsnlen() + nlib_memcpy() |
nlib_wcscplen | ( | size_t * | count, |
const wchar_t * | str | ||
) |
文字列中のコードポイントの数を取得します。
[out] | count | コードポイントの数が格納されるポインタ |
[in] | str | 文字列 |
0 | 成功した場合 |
EINVAL | count 又は str がNULL の場合 |
EILSEQ | コードポイントに変換できないデータがあった場合 |
nlib_wcscpy | ( | wchar_t * | s1, |
size_t | s1max, | ||
const wchar_t * | s2 | ||
) |
N1078のwcscpy_sに相当する実装です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ(文字数) |
[in] | s2 | コピー元のバッファ |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | nlib_wcsnlen() + nlib_memcpy() |
Linux | nlib_wcsnlen() + nlib_memcpy() |
FreeBSD | nlib_wcsnlen() + nlib_memcpy() |
OS X | nlib_wcsnlen() + nlib_memcpy() |
CAFE | nlib_wcsnlen() + nlib_memcpy() |
CTR | nlib_wcsnlen() + nlib_memcpy() |
nlib_wcslen | ( | const wchar_t * | s | ) |
内部でwcslen()
を呼び出します。独自の実装が動作する場合もあります。
[in] | s | 文字列へのポインタ |
s
がNULL
の場合は0を返します。 nlib_wcsncat | ( | wchar_t * | s1, |
size_t | s1max, | ||
const wchar_t * | s2, | ||
size_t | n | ||
) |
N1078のwcsncat_sに相当する実装です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ(文字数) |
[in] | s2 | コピー元のバッファ |
[in] | n | コピーする文字数 |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | nlib_wcsnlen() + nlib_memcpy() |
Linux | nlib_wcsnlen() + nlib_memcpy() |
FreeBSD | nlib_wcsnlen() + nlib_memcpy() |
OS X | nlib_wcsnlen() + nlib_memcpy() |
CAFE | nlib_wcsnlen() + nlib_memcpy() |
CTR | nlib_wcsnlen() + nlib_memcpy() |
nlib_wcsncpy | ( | wchar_t * | s1, |
size_t | s1max, | ||
const wchar_t * | s2, | ||
size_t | n | ||
) |
N1078のwcsncpy_sに相当する実装です。
[in,out] | s1 | コピー先のバッファ |
[in] | s1max | コピー先のバッファ・サイズ(文字数) |
[in] | s2 | コピー元のバッファ |
[in] | n | コピーする文字数 |
0 | 成功した場合 |
ERANGE | s1 又はs2 がNULL の場合 |
ERANGE | バッファが足りなかった場合 |
s1
がNULL
でない場合は、s1[0] = 0
が設定されます。 バッファが重なる場合の動作は未定義です。 Platform | implementation |
---|---|
Win32 | nlib_wcsnlen() + nlib_memcpy() |
Linux | nlib_wcsnlen() + nlib_memcpy() |
FreeBSD | nlib_wcsnlen() + nlib_memcpy() |
OS X | nlib_wcsnlen() + nlib_memcpy() |
CAFE | nlib_wcsnlen() + nlib_memcpy() |
CTR | nlib_wcsnlen() + nlib_memcpy() |
nlib_wcsnlen | ( | const wchar_t * | s, |
size_t | maxsize | ||
) |
N1078のwcsnlen_sに相当する実装です。
[in] | s | 文字列へのポインタ |
[in] | maxsize | 文字列のサイズ(戻り値の最大数) |
s
がNULL
の場合は0を返します。文字列の長さがmaxsize
以上の場合はmaxsize
を返します。 Platform | implementation |
---|---|
Win32 | nlib_utf16nlen() |
Linux | nlib_utf32nlen() |
FreeBSD | nlib_utf32nlen() |
OS X | nlib_utf32nlen() |
CAFE | nlib_utf16nlen() |
CTR | nlib_utf16nlen() |
nlib_wide_to_utf8 | ( | size_t * | utf8count, |
char * | utf8, | ||
size_t | buflen, | ||
const wchar_t * | wcstr | ||
) |
UTF-16/UTF-32文字列からUTF-8文字列に変換します。
[out] | utf8count | 変換された文字数(ヌル文字を含まないchar の個数)が格納されます。 |
[out] | utf8 | 変換された文字列を格納するためのバッファ |
[in] | buflen | utf8のバッファ・サイズ(ヌル文字を含む文字数単位) |
[in] | wcstr | UTF-16/UTF-32文字列 |
wchar_t
が16bitか32bitかによって、nlib_utf16_to_utf8()
かnlib_utf32_to_utf8()
が呼び出されます。 nlib_write_stderr | ( | size_t * | result, |
const void * | buf, | ||
size_t | count | ||
) |
標準エラー出力に文字列を書き出します。
[out] | result | 書き出すことのできた文字の数 |
[in] | buf | UTF-8文字列へのポインタ(NULL 終端しない) |
[in] | count | 文字数 |
0 | 成功した場合 |
Platform | implementation |
---|---|
Win32 | MultiByteToWideChar() + GetStdHandle(STD_ERROR_HANDLE) + WriteConsoleW() |
Linux | write() |
FreeBSD | write() |
OS X | write() |
CAFE | OSConsoleWrite() |
CTR | nn::dbg::detail::PutString() |
nlib_write_stdout | ( | size_t * | result, |
const void * | buf, | ||
size_t | count | ||
) |
標準出力に文字列を書き出します。
[out] | result | 書き出すことのできた文字の数 |
[in] | buf | UTF-8文字列へのポインタ(NULL 終端しない) |
[in] | count | 文字数 |
0 | 成功した場合 |
Platform | implementation |
---|---|
Win32 | MultiByteToWideChar() + GetStdHandle(STD_OUTPUT_HANDLE) + WriteConsoleW() |
Linux | write(), errnoがEINTR の場合は内部で再度実行される。 |
FreeBSD | write(), errnoがEINTR の場合は内部で再度実行される。 |
OS X | write(), errnoがEINTR の場合は内部で再度実行される。 |
CAFE | OSConsoleWrite() |
CTR | nn::dbg::detail::PutString() |
nlib_yield | ( | void | ) |
スレッドの実行権を手放す。
Platform | implementation |
---|---|
Win32 | Sleep(0) |
Linux | sched_yield() |
FreeBSD | sched_yield() |
OS X | sched_yield() |
CAFE | OSYieldThread() |
CTR | nn::os::Thread::Yield() |
© 2013, 2014, 2015 Nintendo Co., Ltd. All rights reserved.