GL CHOCO ENGINE
Loading...
Searching...
No Matches
choco_macros.h File Reference

全レイヤーで使用される共通マクロ定義 More...

#include <stddef.h>
#include "choco_message.h"
Include dependency graph for choco_macros.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define NO_COVERAGE
 
#define KIB   ((size_t)(1ULL << 10))
 KiB定義(=1024)
 
#define MIB   ((size_t)(1ULL << 20))
 MiB定義(=1024 * 1024)
 
#define GIB   ((size_t)(1ULL << 30))
 GiB定義(=1024 * 1024 * 1024)
 
#define IS_POWER_OF_TWO(val_)   ( ((size_t)(val_) != 0u) && ( (((size_t)(val_) & ((size_t)(val_) - 1u)) == 0u)))
 2の冪乗かをチェックする
 
#define IF_ARG_NULL_GOTO_CLEANUP(ptr_, return_variable_, rslt_code_, rslt_str_, function_name_, variable_name_)
 引数ptr_がNULLであればret_コードを出力し、cleanupにジャンプする
 
#define IF_ARG_NOT_NULL_GOTO_CLEANUP(ptr_, return_variable_, rslt_code_, rslt_str_, function_name_, variable_name_)
 引数ptr_がNULLでなければret_コードを出力し、cleanupにジャンプする
 
#define IF_ALLOC_FAIL_GOTO_CLEANUP(ptr_, return_variable_, rslt_code_, function_name_, variable_name_)
 引数ptr_がNULLであればret_コードを出力し、cleanupにジャンプする
 
#define IF_ARG_FALSE_GOTO_CLEANUP(is_valid_, return_variable_, rslt_code_, rslt_str_, function_name_, variable_name_)
 引数is_valid_がfalseであればret_コードを出力し、cleanupにジャンプする
 

Detailed Description

全レイヤーで使用される共通マクロ定義

Author
chocolate-pie24
Version
0.1
Date
2025-09-20
License
MIT License. See LICENSE file in the project root for full license text.

Macro Definition Documentation

◆ GIB

#define GIB   ((size_t)(1ULL << 30))

GiB定義(=1024 * 1024 * 1024)

◆ IF_ALLOC_FAIL_GOTO_CLEANUP

#define IF_ALLOC_FAIL_GOTO_CLEANUP (   ptr_,
  return_variable_,
  rslt_code_,
  function_name_,
  variable_name_ 
)
Value:
do { \
if(NULL == ptr_) { \
ERROR_MESSAGE("%s(NO_MEMORY) - Failed to allocate %s memory.", function_name_, variable_name_); \
return_variable_ = rslt_code_; \
goto cleanup; \
} \
} while(0); \

引数ptr_がNULLであればret_コードを出力し、cleanupにジャンプする

Note
エラーメッセージはNO_MEMORYで、function_name_とvariable_name_をエラーメッセージに出力する
Parameters
[in]ptr_NULL判定対象変数
[in]return_variable_この関数を呼び出す関数のリターン変数
[in]rslt_code_実行結果コード
[in]function_name_このマクロを使用する関数名称
[in]variable_name_NULL判定対象変数名
#define ERROR_CODE 1
#define SUCCESS 0
int func(void) {
int result = ERROR_CODE;
int* a = NULL;
IF_ALLOC_FAIL_GOTO_CLEANUP(a, result, ERROR_CODE, "func", "a") // NULLなのでcleanupに飛ぶ
result = SUCCESS;
cleanup:
return result;
}
#define IF_ALLOC_FAIL_GOTO_CLEANUP(ptr_, return_variable_, rslt_code_, function_name_, variable_name_)
引数ptr_がNULLであればret_コードを出力し、cleanupにジャンプする
Definition: choco_macros.h:151

◆ IF_ARG_FALSE_GOTO_CLEANUP

#define IF_ARG_FALSE_GOTO_CLEANUP (   is_valid_,
  return_variable_,
  rslt_code_,
  rslt_str_,
  function_name_,
  variable_name_ 
)
Value:
do { \
if(!(is_valid_)) { \
ERROR_MESSAGE("%s(%s) - Argument %s is not valid.", function_name_, rslt_str_, variable_name_); \
return_variable_ = rslt_code_; \
goto cleanup; \
} \
} while(0); \

引数is_valid_がfalseであればret_コードを出力し、cleanupにジャンプする

Parameters
[in]is_valid_true/false判定変数
[in]return_variable_この関数を呼び出す関数のリターン変数
[in]rslt_code_実行結果コード
[in]rslt_str_実行結果コードの文字列
[in]function_name_このマクロを使用する関数名称
[in]variable_name_true/false判定対象変数名
#define ERROR_CODE 1
#define SUCCESS 0
int func(void) {
int result = ERROR_CODE;
bool a = false;
IF_ARG_FALSE_GOTO_CLEANUP(a, result, ERROR_CODE, "error_code", "func", "a") // falseなのでcleanupに飛ぶ
result = SUCCESS;
cleanup:
return result;
}
#define IF_ARG_FALSE_GOTO_CLEANUP(is_valid_, return_variable_, rslt_code_, rslt_str_, function_name_, variable_name_)
引数is_valid_がfalseであればret_コードを出力し、cleanupにジャンプする
Definition: choco_macros.h:183

◆ IF_ARG_NOT_NULL_GOTO_CLEANUP

#define IF_ARG_NOT_NULL_GOTO_CLEANUP (   ptr_,
  return_variable_,
  rslt_code_,
  rslt_str_,
  function_name_,
  variable_name_ 
)
Value:
do { \
if(NULL != ptr_) { \
ERROR_MESSAGE("%s(%s) - Argument %s requires a null pointer.", function_name_, rslt_str_, variable_name_); \
return_variable_ = rslt_code_; \
goto cleanup; \
} \
} while(0); \

引数ptr_がNULLでなければret_コードを出力し、cleanupにジャンプする

Parameters
[in]ptr_NULL判定対象変数
[in]return_variable_この関数を呼び出す関数のリターン変数
[in]rslt_code_実行結果コード
[in]rslt_str_実行結果コードの文字列
[in]function_name_このマクロを使用する関数名称
[in]variable_name_NULL判定対象変数名
#define ERROR_CODE 1
#define SUCCESS 0
int func(void) {
int result = ERROR_CODE;
int a = 0;
IF_ARG_NOT_NULL_GOTO_CLEANUP(&a, result, ERROR_CODE, "error_code", "func", "a") // 非NULLなのでcleanupに飛ぶ
result = SUCCESS;
cleanup:
return result;
}
#define IF_ARG_NOT_NULL_GOTO_CLEANUP(ptr_, return_variable_, rslt_code_, rslt_str_, function_name_, variable_name_)
引数ptr_がNULLでなければret_コードを出力し、cleanupにジャンプする
Definition: choco_macros.h:118

◆ IF_ARG_NULL_GOTO_CLEANUP

#define IF_ARG_NULL_GOTO_CLEANUP (   ptr_,
  return_variable_,
  rslt_code_,
  rslt_str_,
  function_name_,
  variable_name_ 
)
Value:
do { \
if(NULL == ptr_) { \
ERROR_MESSAGE("%s(%s) - Argument %s requires a valid pointer.", function_name_, rslt_str_, variable_name_); \
return_variable_ = rslt_code_; \
goto cleanup; \
} \
} while(0); \

引数ptr_がNULLであればret_コードを出力し、cleanupにジャンプする

Parameters
[in]ptr_NULL判定対象変数
[in]return_variable_この関数を呼び出す関数のリターン変数
[in]rslt_code_実行結果コード
[in]rslt_str_実行結果コードの文字列
[in]function_name_このマクロを使用する関数名称
[in]variable_name_NULL判定対象変数名
#define ERROR_CODE 1
#define SUCCESS 0
int func(void) {
int result = ERROR_CODE;
int* a = NULL;
IF_ARG_NULL_GOTO_CLEANUP(a, result, ERROR_CODE, "error_code", "func", "a") // NULLなのでcleanupに飛ぶ
result = SUCCESS;
cleanup:
return result;
}
#define IF_ARG_NULL_GOTO_CLEANUP(ptr_, return_variable_, rslt_code_, rslt_str_, function_name_, variable_name_)
引数ptr_がNULLであればret_コードを出力し、cleanupにジャンプする
Definition: choco_macros.h:86

◆ IS_POWER_OF_TWO

#define IS_POWER_OF_TWO (   val_)    ( ((size_t)(val_) != 0u) && ( (((size_t)(val_) & ((size_t)(val_) - 1u)) == 0u)))

2の冪乗かをチェックする

Return values
true2の冪乗
false2の冪乗ではない

◆ KIB

#define KIB   ((size_t)(1ULL << 10))

KiB定義(=1024)

◆ MIB

#define MIB   ((size_t)(1ULL << 20))

MiB定義(=1024 * 1024)