picox
0.1
|
picoxで共通に使用する型や定数、マクロの定義 [詳解]
![]() |
データ構造 | |
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) |
型定義 | |
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) |
何もしないデリータです | |
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 | |
末尾の | |
#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 |
picoxで共通に使用する型や定数、マクロの定義
#define X_CONTAINER_OF | ( | ptr, | |
type, | |||
member | |||
) | ((type*) ((char*)(ptr) - X_OFFSET_OF(type, member))) |
複合型のメンバを指すポインタから、複合型の先頭アドレスを取得します
ptr | 複合型typeのmemberを指すポインタ |
type | memberをメンバに持つ複合型 |
member | ptrが指す複合型のメンバ名 |
#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_PATH_MAX (X_CONF_FILE_PATH_MAX) |
#define X_STATIC_ASSERT | ( | cond | ) |
コンパイル時アサートを行います。
#define X_XFS_TYPE (X_CONF_XFS_TYPE) |
typedef void(* XDeleter) (void *ptr) |
オブジェクトを削除する関数ポインタ型です
XFreeFuncと同じインターフェースですが、XFreeFuncがメモリの開放だけを意図して いるのに対して、XDeleterはオブジェクトの終了処理を意識しているという、文脈の 違いがあります。
typedef uint32_t XSize |
何らかの大きさを表すのに十分なサイズを備えた符号なし整数型です
size_tの型は実装依存であり、例えばsizeof(size_t) == 2の環境では、32bitのアド レス空間を持つシリアルフラッシュのアドレッシングに使用できませんし、16bit以 上のファイルサイズを扱えません。
この型はそういった外部デバイスのサイズ情報の格納にも適した型で定義しています 。
typedef uint32_t XTag |
何らかのIDを格納するための符号なし整数が型です
IDには決まった使い道があるわけではないですが、例えばCでC++の仮想クラスのよう な機能を実現したい時の型チェックに使用するといった例があります。
enum XError |
errnoの代替として使用する共通のエラーコードを表す列挙型です
エラーコードを共通とするか、モジュール固有とするかはどちらも一長一短があり、 難しい問題です。共通化すると、インターフェースを統一しやすくなりますが、モジ ュール固有にすると、より詳細な情報を表現できます。
picoxでは主にファイルシステム等の抽象化レイヤのインターフェースの統一のため にこの型を使用します。
enum XOpenFlag |
enum XOpenMode |
ファイルオープン等のモードです
fopen()で使用可能な"r","r+","w","w+","a","a+"
に対応しています。 picoxでは、"rb"等の指定によるバイナリモード、テキストモードという区別はして おらず、常にバイナリモードの動作を行います。
各モードの動作は下記リンクを参考にしてください。
picoxでは基本的にglibcの動作を踏襲するように各モジュールを実装していますが、 複雑な操作を行う場合は、SEEK_SET以外のシークと、追記は使わない方が無難かもし れません。
enum XSeekMode |