ビットでログを記録する

(見たままモードで記事を作るとはてな記法に変更できなかったので書き直しました)
ビットでログを記録するロジックを作ってみた。
C言語だが、少しだけオブジェクト指向っぽく。

typedef uint32_t        LOG_VALUE_TYPE;
#define HL_BIT_LOG_NUM  (sizeof(LOG_VALUE_TYPE)*8)
typedef struct T_HL_BIT_LOG_INF {
    uint16_t        log_no_max;     /* cvr log max        */
    uint16_t        buf_size;       /* buffuer size       */
    LOG_VALUE_TYPE  *p_bits;        /* bits data address  */
} hl_bit_log_inf;
static  LOG_VALUE_TYPE  bit[HL_BIT_LOG_NUM] = {
    0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000020, 0x00000040, 0x00000080,
    0x00000100, 0x00000200, 0x00000400, 0x00000800, 0x00001000, 0x00002000, 0x00004000, 0x00008000,
    0x00010000, 0x00020000, 0x00040000, 0x00080000, 0x00100000, 0x00200000, 0x00400000, 0x00800000,
    0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000,
    };


/**
 * @brief 初期化
 * 
 * @param p_bit_log_inf ビットログ管理構造体アドレス
 * @param p_bits        ログバッファ
 * @param buf_size      ログバッファサイズ
 * @param log_no_max    ログNo最大値
 * @return int          0:OK -1:NG
 */
int hl_bit_log_init(hl_bit_log_inf *p_bit_log_inf, LOG_VALUE_TYPE *p_bits, uint16_t buf_size, uint16_t log_no_max)
{
    if (p_bit_log_inf != NULL)  ;
    else return -1;
    if (buf_size < (log_no_max / (sizeof(uint8_t)))) ;
    else return -1;
    p_bit_log_inf->log_no_max   = log_no_max;
    p_bit_log_inf->buf_size     = buf_size;
    p_bit_log_inf->p_bits       = p_bits;
    return 0;
}
/**
 * @brief 終了処理
 * 
 * @param p_bit_log_inf ビットログ管理構造体アドレス
 */
void hl_bit_log_del(hl_bit_log_inf *p_bit_log_inf)
{
    p_bit_log_inf->log_no_max   = 0;
    p_bit_log_inf->buf_size     = 0;
    p_bit_log_inf->p_bits       = NULL;
}
/**
 * @brief ログセット
 * 
 * @param p_bit_log_inf ビットログ管理構造体アドレス
 * @param no            ログNo 
 * @return int          0:OK -1:NG
 */
int hl_bit_log_set(hl_bit_log_inf *p_bit_log_inf, uint16_t no)
{
    int ret;
    if (no < p_bit_log_inf->log_no_max) {
        int y   = no / HL_BIT_LOG_NUM;
        int x   = no % HL_BIT_LOG_NUM;
        p_bit_log_inf->p_bits[y] |= bit[x];
        ret = 0;
    }
    else {
        ret = -1;
    }
    return ret;
}


/**
 * @brief セットチェック
 * 
 * @param p_bit_log_inf ビットログ管理構造体アドレス
 * @param no            ログNo
 * @return int          1 : on  セット 0 : off 未セット -1 : noが範囲外
 */
int hl_bit_log_is_set(hl_bit_log_inf *p_bit_log_inf, uint16_t no)
{
    int ret;
    if (no < p_bit_log_inf->log_no_max) {
        int y   = no / HL_BIT_LOG_NUM;
        int x   = no % HL_BIT_LOG_NUM;
        if ( (p_bit_log_inf->p_bits[y] & bit[x]) == 0 )
            ret = 0;
        else
            ret = 1;
    }
    else {
        ret = -1;
    }
    return ret;
}