picox  0.1
xstddef.h ファイル

共通の型やマクロ定義等 [詳解]

被依存関係図:

[ソースコード]

データ構造

union  XMaxAlign
 組込み型の最大アライメント型です。 [詳解]
 

マクロ定義

#define X_ALIGN_OF(type)    X_OFFSET_OF(struct { char c; type member; }, member)
 型typeのアライメントを返します。
 
#define X_CONTAINER_OF(ptr, type, member)    ((type*) ((char*)(ptr) - X_OFFSET_OF(type, member)))
 複合型のメンバを指すポインタから、複合型の先頭アドレスを取得します [詳解]
 
#define X_COUNT_OF(a)    (sizeof(a) / sizeof(*(a)))
 一次元配列の要素数を返します。
 
#define X_COUNT_OF_2D(x)    (X_COUNT_OF_ROW(x) * X_COUNT_OF_COL(x))
 二次元配列の要素数を返します。
 
#define X_COUNT_OF_COL(x)   (sizeof(x[0]) / sizeof(x[0][0]))
 二次元配列の列要素数を返します。
 
#define X_COUNT_OF_ROW(x)   (sizeof(x) / sizeof(x[0]))
 二次元配列の行要素数を返します。
 
#define X_DEF_MAX_ALIGNED(name, size)   XMaxAlign name[((size) + sizeof(XMaxAlign) - 1) / sizeof(XMaxAlign)]
 最大サイズのアライメントでsizeバイト以上の領域を持つ変数nameを定義します。
 
#define X_LINE_MAX   (X_CONF_LINE_MAX)
 
#define X_MAKE_TAG(a, b, c, d)
 a, b, c, dからXTagに格納するIDを生成します [詳解]
 
#define X_NAME_MAX   (X_CONF_FILE_NAME_MAX)
 
#define X_OFFSET_OF(s, m)    ((uintptr_t)&(((s *)0)->m))
 構造体や共用体メンバの先頭からのオフセットを返します。
 
#define X_PATH_MAX   (X_CONF_FILE_PATH_MAX)
 
#define X_SIZEOF_MEM(s, m)   (sizeof(((s*)0)->m))
 構造体や共用体メンバのsizeofを返します。
 
#define X_STATIC_ASSERT(cond)
 コンパイル時アサートを行います。 [詳解]
 
#define X_XFS_TYPE   (X_CONF_XFS_TYPE)
 
X_SIZEOF_XXX

プリプロセスで使用するためのsizeof定義です

プリプロセスでsizeof()は使用できないのでlimits.hのXXX_MAXの定義から型サイズ を推測しています。

覚え書き
Cの規格上はintのビット幅が8 or 16 or 32 or 64といった保証はないので本当は 0xXXと比較してサイズを推測するのは問題がある。 しかしこのライブラリは特殊なビット幅のプロセッサは対象としていないのでこれで よしとする。
#define X_SIZEOF_CHAR   (1)
 
#define X_SIZEOF_SHORT   (2)
 
X_MSBOF_XXX

各型の最上位ビットです

#define X_MSBOF_CHAR   (X_BIT(CHAR_BIT))
 
#define X_MSBOF_SHORT   (USHORT_MAX & (~(USHORT_MAX >> 1)))
 
#define X_MSBOF_INT   (UINT_MAX & (~(UINT_MAX >> 1)))
 
#define X_MSBOF_LONG   (ULONG_MAX & (~(ULONG_MAX >> 1)))
 
#define X_MSBOF_INTPTR   (UINTPTR_MAX & (~(UINTPTR_MAX >> 1)))
 
#define X_MSBOF_SIZE   (SIZE_MAX & (~(SIZE_MAX >> 1)))
 
#define X_MSBOF_INT8   (1U << 7)
 
#define X_MSBOF_INT16   (1U << 15)
 
#define X_MSBOF_INT32   (X_UINT32_C(1) << 31)
 
X_XXX_C

定数サフィックスを補完するためのマクロです。

末尾の_CはConstantを表します

#define X_INT32_C(c)    c ## L
 
#define X_UINT32_C(c)    c ## UL
 
#define X_INT64_C(c)    c ## LL
 
#define X_UINT64_C(c)    c ## ULL
 

型定義

typedef uint32_t XBits
 XModeと同じくビットフラグを格納しますが、よりビットを意識した型です
 
typedef int(* XCompareFunc) (const void *a, const void *b)
 qsort()互換の比較関数ポインタ型です
 
typedef void(* XDeleter) (void *ptr)
 オブジェクトを削除する関数ポインタ型です [詳解]
 
typedef void(* XFreeFunc) (void *ptr)
 free()互換のメモリ開放関数ポインタ型です
 
typedef void *(* XMallocFunc) (size_t size)
 malloc()互換のメモリ確保関数ポインタ型です
 
typedef uint32_t XMode
 何らかのビットフラグを格納することを意図した型です
 
typedef int32_t XOffset
 何らかのオフセットを表すのに十分な大きさをもった符号あり整数型です
 
typedef uint32_t XSize
 何らかの大きさを表すのに十分なサイズを備えた符号なし整数型です [詳解]
 
typedef int32_t XSSize
 XSizeの符号あり版です。size_tに対するssize_tと同じ役割です
 
typedef uint32_t XTag
 何らかのIDを格納するための符号なし整数が型です [詳解]
 

列挙型

enum  XError {
  X_ERR_NONE = 0, X_ERR_IO = 1, X_ERR_INVALID = 2, X_ERR_TIMED_OUT = 3,
  X_ERR_BUSY = 4, X_ERR_AGAIN = 5, X_ERR_CANCELED = 6, X_ERR_NO_MEMORY = 7,
  X_ERR_EXIST = 8, X_ERR_NOT_READY = 9, X_ERR_ACCESS = 10, X_ERR_NO_ENTRY = 11,
  X_ERR_NOT_SUPPORTED = 12, X_ERR_DISCONNECTED = 13, X_ERR_INPROGRESS = 14, X_ERR_PROTOCOL = 15,
  X_ERR_MANY = 16, X_ERR_RANGE = 17, X_ERR_BROKEN = 18, X_ERR_NAME_TOO_LONG = 19,
  X_ERR_INVALID_NAME = 20, X_ERR_IS_DIRECTORY = 21, X_ERR_NOT_DIRECTORY = 22, X_ERR_NOT_EMPTY = 23,
  X_ERR_NO_SPACE = 24, X_ERR_INTERNAL = 25, X_ERR_OTHER = 26, X_ERR_UNKNOWN = 27
}
 errnoの代替として使用する共通のエラーコードを表す列挙型です [詳解]
 
enum  XOpenFlag {
  X_OPEN_FLAG_READ = (1 << 0), X_OPEN_FLAG_WRITE = (1 << 1), X_OPEN_FLAG_READ_WRITE = X_OPEN_FLAG_READ | X_OPEN_FLAG_WRITE, X_OPEN_FLAG_APPEND = (1 << 2),
  X_OPEN_FLAG_TRUNCATE = (1 << 3)
}
 ファイルオープン等に使用するフラグです [詳解]
 
enum  XOpenMode {
  X_OPEN_MODE_READ = X_OPEN_FLAG_READ, X_OPEN_MODE_WRITE = X_OPEN_FLAG_WRITE | X_OPEN_FLAG_TRUNCATE, X_OPEN_MODE_APPEND = X_OPEN_FLAG_WRITE | X_OPEN_FLAG_APPEND, X_OPEN_MODE_READ_PLUS = X_OPEN_FLAG_READ_WRITE,
  X_OPEN_MODE_WRITE_PLUS = X_OPEN_FLAG_READ_WRITE | X_OPEN_FLAG_TRUNCATE, X_OPEN_MODE_APPEND_PLUS = X_OPEN_FLAG_READ_WRITE | X_OPEN_FLAG_APPEND, X_OPEN_MODE_UNKNOWN = 0xFF
}
 ファイルオープン等のモードです [詳解]
 
enum  XSeekMode { X_SEEK_SET = SEEK_SET, X_SEEK_CUR = SEEK_CUR, X_SEEK_END = SEEK_END }
 シークの起点を指定する列挙型です [詳解]
 

関数

static void x_null_deleter (void *ptr)
 何もしないデリータです
 

詳解

共通の型やマクロ定義等

著者
MaskedW