39 #ifndef picox_core_detail_xstddef_h_ 40 #define picox_core_detail_xstddef_h_ 58 #define X_COUNT_OF(a) (sizeof(a) / sizeof(*(a))) 63 #define X_COUNT_OF_ROW(x) (sizeof(x) / sizeof(x[0])) 68 #define X_COUNT_OF_COL(x) (sizeof(x[0]) / sizeof(x[0][0])) 73 #define X_COUNT_OF_2D(x) (X_COUNT_OF_ROW(x) * X_COUNT_OF_COL(x)) 78 #define X_SIZEOF_MEM(s, m) (sizeof(((s*)0)->m)) 83 #define X_OFFSET_OF(s, m) ((uintptr_t)&(((s *)0)->m)) 88 #define X_ALIGN_OF(type) X_OFFSET_OF(struct { char c; type member; }, member) 115 #if (X_HAS_TYPEOF != 0) && (X_HAS_STATEMENT_EXPRESSIONS != 0) 116 #define X_CONTAINER_OF(ptr, type, member) \ 118 const X_TYPEOF(((type*)0)->member)* mptr = (ptr); \ 119 (type*)((char*)mptr - X_OFFSET_OF(type,member) ); \ 122 #define X_CONTAINER_OF(ptr, type, member) \ 123 ((type*) ((char*)(ptr) - X_OFFSET_OF(type, member))) 128 #define X_STATIC_ASSERT_CAT_(a, b) a ## b 134 #define X_STATIC_ASSERT(cond) \ 135 enum { X_STATIC_ASSERT_CAT_(X_STATIC_ASSERTION_FAILED, __LINE__) = \ 136 sizeof( struct { int assertion_failed[(cond) ? 1: -1];})} 152 #define X_SIZEOF_CHAR (1) 153 #define X_SIZEOF_SHORT (2) 156 #define X_SIZEOF_INT (1) 157 #elif UINT_MAX == 0xFFFF 158 #define X_SIZEOF_INT (2) 159 #elif UINT_MAX == 0xFFFFFFFF 160 #define X_SIZEOF_INT (4) 161 #elif UINT_MAX == 0xFFFFFFFFFFFFFFFF 162 #define X_SIZEOF_INT (8) 164 #error unspported platform 167 #if ULONG_MAX == 0xFFFFFFFF 168 #define X_SIZEOF_LONG (4) 169 #elif ULONG_MAX == 0xFFFFFFFFFFFFFFFF 170 #define X_SIZEOF_LONG (8) 172 #error unspported platform 175 #if UINTPTR_MAX == 0xFFFF 176 #define X_SIZEOF_INTPTR (2) 177 #elif UINTPTR_MAX == 0xFFFFFFFF 178 #define X_SIZEOF_INTPTR (4) 179 #elif UINTPTR_MAX == 0xFFFFFFFFFFFFFFFF 180 #define X_SIZEOF_INTPTR (8) 182 #error unspported platform 185 #if SIZE_MAX == 0xFFFF 186 #define X_SIZEOF_SIZE (2) 187 #elif SIZE_MAX == 0xFFFFFFFF 188 #define X_SIZEOF_SIZE (4) 189 #elif SIZE_MAX == 0xFFFFFFFFFFFFFFFF 190 #define X_SIZEOF_SIZE (8) 192 #error unspported platform 204 #define X_MSBOF_CHAR (X_BIT(CHAR_BIT)) 205 #define X_MSBOF_SHORT (USHORT_MAX & (~(USHORT_MAX >> 1))) 206 #define X_MSBOF_INT (UINT_MAX & (~(UINT_MAX >> 1))) 207 #define X_MSBOF_LONG (ULONG_MAX & (~(ULONG_MAX >> 1))) 208 #define X_MSBOF_INTPTR (UINTPTR_MAX & (~(UINTPTR_MAX >> 1))) 209 #define X_MSBOF_SIZE (SIZE_MAX & (~(SIZE_MAX >> 1))) 210 #define X_MSBOF_INT8 (1U << 7) 211 #define X_MSBOF_INT16 (1U << 15) 212 #define X_MSBOF_INT32 (X_UINT32_C(1) << 31) 226 #define X_INT32_C(c) c ## L 227 #define X_UINT32_C(c) c ## UL 229 #define X_INT32_C(c) c 230 #define X_UINT32_C(c) c 233 #if X_SIZEOF_LONG < 8 234 #define X_INT64_C(c) c ## LL 235 #define X_UINT64_C(c) c ## ULL 237 #define X_INT64_C(c) c ## L 238 #define X_UINT64_C(c) c ## UL 254 typedef uint32_t
XSize;
272 typedef uint32_t
XTag;
281 #define X_MAKE_TAG(a,b,c,d) \ 282 ( ((uint32_t)(a) << 24) \ 283 | ((uint32_t)(b) << 16) \ 284 | ((uint32_t)(c) << 8) \ 285 | ((uint32_t)(d) << 0) ) 290 typedef uint32_t
XMode;
295 typedef uint32_t
XBits;
299 typedef int (*
XCompareFunc)(
const void* a,
const void* b);
303 typedef void* (*XMallocFunc)(
size_t size);
316 typedef void (*
XDeleter)(
void* ptr);
330 char c;
int i;
long l;
long long ll;
void* p;
331 float f;
double d;
long double ld; void(*fp)(void);
337 #define X_DEF_MAX_ALIGNED(name, size) \ 338 XMaxAlign name[((size) + sizeof(XMaxAlign) - 1) / sizeof(XMaxAlign)] 410 X_OPEN_FLAG_READ = (1 << 0),
483 X_OPEN_MODE_UNKNOWN = 0xFF,
489 #define X_PATH_MAX (X_CONF_FILE_PATH_MAX) 494 #define X_NAME_MAX (X_CONF_FILE_NAME_MAX) 499 #define X_LINE_MAX (X_CONF_LINE_MAX) 504 #define X_XFS_TYPE (X_CONF_XFS_TYPE) Definition: xstddef.h:378
Definition: xstddef.h:385
Definition: xstddef.h:382
Definition: xstddef.h:396
Definition: xstddef.h:376
Definition: xstddef.h:384
XOpenMode
ファイルオープン等のモードです
Definition: xstddef.h:435
Definition: xstddef.h:372
XError
errnoの代替として使用する共通のエラーコードを表す列挙型です
Definition: xstddef.h:367
Definition: xstddef.h:371
Definition: xstddef.h:383
Definition: xstddef.h:380
static void x_null_deleter(void *ptr)
何もしないデリータです
Definition: xstddef.h:317
int(* XCompareFunc)(const void *a, const void *b)
qsort()互換の比較関数ポインタ型です
Definition: xstddef.h:296
uint32_t XBits
XModeと同じくビットフラグを格納しますが、よりビットを意識した型です
Definition: xstddef.h:292
uint32_t XSize
何らかの大きさを表すのに十分なサイズを備えた符号なし整数型です
Definition: xstddef.h:251
Definition: xstddef.h:387
ストリームサイズの末尾
Definition: xstddef.h:347
Definition: xstddef.h:386
"r" 読み込み
Definition: xstddef.h:441
Definition: xstddef.h:390
Definition: xstddef.h:395
Definition: xstddef.h:392
Definition: xstddef.h:375
"r+" 読み書き
Definition: xstddef.h:462
ストリームの先頭
Definition: xstddef.h:343
組込み型の最大アライメント型です。
Definition: xstddef.h:325
uint32_t XTag
何らかのIDを格納するための符号なし整数が型です
Definition: xstddef.h:269
Definition: xstddef.h:393
"w" 上書き書き込み
Definition: xstddef.h:448
Definition: xstddef.h:410
int32_t XSSize
XSizeの符号あり版です。size_tに対するssize_tと同じ役割です
Definition: xstddef.h:256
XOpenFlag
ファイルオープン等に使用するフラグです
Definition: xstddef.h:405
Definition: xstddef.h:388
void(* XFreeFunc)(void *ptr)
free()互換のメモリ開放関数ポインタ型です
Definition: xstddef.h:304
Definition: xstddef.h:374
"w+" 上書き読み書き
Definition: xstddef.h:470
ストリームポインタの現在地
Definition: xstddef.h:345
"a+" 追記読み書き
Definition: xstddef.h:479
Definition: xstddef.h:389
Definition: xstddef.h:381
int32_t XOffset
何らかのオフセットを表すのに十分な大きさをもった符号あり整数型です
Definition: xstddef.h:261
Definition: xstddef.h:411
Definition: xstddef.h:370
Definition: xstddef.h:409
Definition: xstddef.h:377
uint32_t XMode
何らかのビットフラグを格納することを意図した型です
Definition: xstddef.h:287
XSeekMode
シークの起点を指定する列挙型です
Definition: xstddef.h:340
Definition: xstddef.h:391
Definition: xstddef.h:379
void(* XDeleter)(void *ptr)
オブジェクトを削除する関数ポインタ型です
Definition: xstddef.h:313
Definition: xstddef.h:408
Definition: xstddef.h:394
"a" 追記書き込み
Definition: xstddef.h:456
Definition: xstddef.h:373