c_util
C utility library for low-level programming
|
文字列操作用API関数 core_string の実装ファイル More...
#include "core_string.h"
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <limits.h>
#include "core_memory.h"
#include "message.h"
#include "internal/core_string_internal_data.h"
#include "../../include/define.h"
Macros | |
#define | CHECK_ARG_NULL_RETURN_ERROR(func_name_, arg_name_, ptr_) |
引数のNULLチェックを行い、NULLであればCORE_STRING_INVALID_ARGUMENTで処理を終了するマクロ | |
#define | CHECK_ARG_NULL_RETURN_VOID(func_name_, arg_name_, ptr_) |
引数のNULLチェックを行い、NULLであればワーニングを出し、リターンするマクロ | |
Functions | |
void | core_string_default_create (core_string_t *const string_) |
引数で与えたstring_オブジェクトを「デフォルト状態」に初期化する。 | |
CORE_STRING_ERROR_CODE | core_string_create (const char *const src_, core_string_t *const dst_) |
引数のsrc_をコピーして、dst_オブジェクトを初期化済み状態にする。 | |
CORE_STRING_ERROR_CODE | core_string_copy (const core_string_t *const src_, core_string_t *const dst_) |
コピー元src_の文字列内容を、コピー先dst_に複製する。 | |
CORE_STRING_ERROR_CODE | core_string_copy_from_char (const char *const src_, core_string_t *const dst_) |
dst_にchar*型文字列をコピーする | |
void | core_string_destroy (core_string_t *const string_) |
string_が保持するメモリを破棄する。 | |
CORE_STRING_ERROR_CODE | core_string_buffer_reserve (uint64_t buffer_size_, core_string_t *const string_) |
string_オブジェクトに指定サイズの文字列バッファを確保する。 | |
CORE_STRING_ERROR_CODE | core_string_buffer_resize (uint64_t buffer_size_, core_string_t *const string_) |
core_string_tオブジェクトのバッファサイズをbuffer_size_に拡張する | |
uint64_t | core_string_buffer_capacity (const core_string_t *const string_) |
core_string_tオブジェクトのバッファサイズを取得する。 | |
bool | core_string_is_empty (const core_string_t *const string_) |
core_string_tオブジェクトが保持する文字列格納バッファが空かどうかを判定する | |
bool | core_string_equal (const core_string_t *const string1_, const core_string_t *const string2_) |
2つのcore_string_tオブジェクトが保持する文字列が等しいかを比較する | |
bool | core_string_equal_from_char (const char *const str1_, const core_string_t *const string2_) |
char*型文字列とcore_string_tオブジェクトが保持する文字列が等しいかを比較する | |
uint64_t | core_string_length (const core_string_t *const string_) |
core_string_tオブジェクトが保持している文字列の長さを取得する | |
const char * | core_string_cstr (const core_string_t *const string_) |
core_string_tオブジェクトが保持している文字列の先頭ポインタを取得する | |
CORE_STRING_ERROR_CODE | core_string_concat (const core_string_t *const string_, core_string_t *const dst_) |
dst_の末尾にstring_の内容を連結する | |
CORE_STRING_ERROR_CODE | core_string_substring_copy (const core_string_t *const src_, core_string_t *const dst_, uint16_t from_, uint16_t to_) |
src_ の [from_, to_] 範囲の部分文字列を dst_ にコピーする | |
CORE_STRING_ERROR_CODE | core_string_trim (const core_string_t *const src_, core_string_t *const dst_, char ltrim_, char rtrim_) |
指定したトリム文字を取り除いた文字列をdst_にコピーする。 | |
CORE_STRING_ERROR_CODE | core_string_to_i32 (const core_string_t *const string_, int32_t *out_value_) |
core_string_tオブジェクトの内容をint32_t型整数に変換する。 | |
文字列操作用API関数 core_string の実装ファイル
このファイルでは core_string_t オブジェクトを用いた文字列操作関数群を実装する。 core_stringは「ユーザーが文字列長さやバッファサイズを意識せずに 安全に文字列操作を行えること」を目的としており、以下の特徴を持つ。
core_string_destroy()
を呼ぶことで明示的にメモリを解放できる利用上の注意:
core_string_destroy()
を呼び出し、内部のメモリを解放することcore_string_default_create()
は未初期化オブジェクトをデフォルト状態に戻すための関数であり、 すでに初期化済みのオブジェクトに対して呼び出すとメモリリークを起こす可能性がある#define CHECK_ARG_NULL_RETURN_ERROR | ( | func_name_, | |
arg_name_, | |||
ptr_ ) |
引数のNULLチェックを行い、NULLであればCORE_STRING_INVALID_ARGUMENTで処理を終了するマクロ
#define CHECK_ARG_NULL_RETURN_VOID | ( | func_name_, | |
arg_name_, | |||
ptr_ ) |
引数のNULLチェックを行い、NULLであればワーニングを出し、リターンするマクロ
uint64_t core_string_buffer_capacity | ( | const core_string_t *const | string_ | ) |
core_string_tオブジェクトのバッファサイズを取得する。
使用例:
[in] | string_ | バッファサイズを取得する対象オブジェクト。未初期化状態は不可。( core_string_initialization_rule 参照) |
INVALID_VALUE_U64 | 引数string_がNULL |
0 | オブジェクトがデフォルト状態、またはバッファサイズが0 |
バッファサイズ(byte) | 正常に取得できた場合のバッファサイズを返す |
CORE_STRING_ERROR_CODE core_string_buffer_reserve | ( | uint64_t | buffer_size_, |
core_string_t *const | string_ ) |
string_オブジェクトに指定サイズの文字列バッファを確保する。
使用例:
[in] | buffer_size_ | 確保するバッファサイズ(byte)(終端文字を含むサイズを指定する)(文字列長 + 1) |
[out] | string_ | メモリ確保対象オブジェクト。未初期化状態は不可。( core_string_initialization_rule 参照) |
CORE_STRING_INVALID_ARGUMENT | 引数string_がNULL |
CORE_STRING_MEMORY_ALLOCATE_ERROR | メモリ確保に失敗 |
CORE_STRING_SUCCESS | メモリ確保が正常に完了 |
CORE_STRING_ERROR_CODE core_string_buffer_resize | ( | uint64_t | buffer_size_, |
core_string_t *const | string_ ) |
core_string_tオブジェクトのバッファサイズをbuffer_size_に拡張する
使用例:
[in] | buffer_size_ | 新しいバッファサイズ(byte) 終端文字を含めるため「文字列長 + 1」を指定すること |
[in,out] | string_ | バッファサイズを拡張する対象オブジェクト。未初期化状態は不可。( core_string_initialization_rule 参照) |
CORE_STRING_INVALID_ARGUMENT | 引数string_がNULL |
CORE_STRING_MEMORY_ALLOCATE_ERROR | 一時バッファまたは新規バッファのメモリ確保に失敗 |
CORE_STRING_RUNTIME_ERROR | 一時バッファへのコピーまたは戻しに失敗 |
CORE_STRING_SUCCESS | 正常にリサイズが完了、または既に十分な容量が確保されている |
CORE_STRING_ERROR_CODE core_string_concat | ( | const core_string_t *const | string_, |
core_string_t *const | dst_ ) |
dst_の末尾にstring_の内容を連結する
使用例:
[in] | string_ | 連結する文字列 (コピー元)。未初期化状態は不可。( core_string_initialization_rule 参照) |
[out] | dst_ | 連結結果を格納するオブジェクト (コピー先)。未初期化状態は不可。( core_string_initialization_rule 参照) |
CORE_STRING_INVALID_ARGUMENT | string_またはdst_が NULL |
CORE_STRING_RUNTIME_ERROR | string_ またはdst_がデフォルト状態( core_string_initialization_rule 参照)、または一時バッファの生成やコピーに失敗した場合 |
CORE_STRING_SUCCESS | 連結が正常に完了 |
CORE_STRING_ERROR_CODE core_string_copy | ( | const core_string_t *const | src_, |
core_string_t *const | dst_ ) |
コピー元src_の文字列内容を、コピー先dst_に複製する。
使用例:
[in] | src_ | コピー元オブジェクト(初期化済み状態である必要あり)( core_string_initialization_rule 参照) |
[out] | dst_ | コピー先オブジェクト |
CORE_STRING_INVALID_ARGUMENT | 引数src_またはdst_がNULL |
CORE_STRING_RUNTIME_ERROR | コピー元src_がデフォルト状態( core_string_initialization_rule 参照)、または文字列コピーに失敗 |
CORE_STRING_BUFFER_EMPTY | コピー元オブジェクトsrc_が内部で保持している文字列が空 |
CORE_STRING_MEMORY_ALLOCATE_ERROR | コピー先オブジェクトのメモリ確保に失敗 |
CORE_STRING_SUCCESS | 正常にコピーが完了 |
CORE_STRING_ERROR_CODE core_string_copy_from_char | ( | const char *const | src_, |
core_string_t *const | dst_ ) |
dst_にchar*型文字列をコピーする
使用例:
[in] | src_ | コピー元文字列 |
[out] | dst_ | コピー先文字列オブジェクト(デフォルト状態または初期化済み状態である必要あり)( core_string_initialization_rule 参照) |
CORE_STRING_INVALID_ARGUMENT | 引数src_またはdst_がNULL |
CORE_STRING_MEMORY_ALLOCATE_ERROR | コピー先オブジェクトのメモリ確保に失敗 |
CORE_STRING_RUNTIME_ERROR | 文字列のコピーに失敗 |
CORE_STRING_SUCCESS | 正常にコピーが完了 |
CORE_STRING_ERROR_CODE core_string_create | ( | const char *const | src_, |
core_string_t *const | dst_ ) |
引数のsrc_をコピーして、dst_オブジェクトを初期化済み状態にする。
使用例:
[in] | src_ | 初期化文字列(終端文字まで含めてコピーされる) |
[out] | dst_ | 初期化対象オブジェクト |
CORE_STRING_INVALID_ARGUMENT | 引数src_またはdst_がNULL |
CORE_STRING_RUNTIME_ERROR | 文字列のコピーに失敗(これが発生したら本関数のバグ) |
CORE_STRING_MEMORY_ALLOCATE_ERROR | 文字列バッファメモリの確保に失敗 |
CORE_STRING_SUCCESS | 正常に初期化とコピーが完了 |
const char * core_string_cstr | ( | const core_string_t *const | string_ | ) |
core_string_tオブジェクトが保持している文字列の先頭ポインタを取得する
使用例:
[in] | string_ | c文字列を取得する対象のcore_string_tオブジェクト。未初期化状態は不可。( core_string_initialization_rule 参照) |
NULL | 引数がNULLまたはデフォルト状態( core_string_initialization_rule 参照)のオブジェクトが渡された場合 |
その他 | 内部バッファの先頭アドレス |
void core_string_default_create | ( | core_string_t *const | string_ | ) |
引数で与えたstring_オブジェクトを「デフォルト状態」に初期化する。
[WARNING] core_string_default_create - Argument string_ requires a valid pointer.
使用例:
なお、上記コードは下記のコードと等価である。
[in,out] | string_ | デフォルト状態とするオブジェクト |
void core_string_destroy | ( | core_string_t *const | string_ | ) |
string_が保持するメモリを破棄する。
[WARNING] core_string_destroy - Argument string_ requires a valid pointer.
使用例:
[in,out] | string_ | 破棄対象オブジェクト。未初期化状態は不可。( core_string_initialization_rule 参照) |
bool core_string_equal | ( | const core_string_t *const | string1_, |
const core_string_t *const | string2_ ) |
2つのcore_string_tオブジェクトが保持する文字列が等しいかを比較する
使用例:
[in] | string1_ | 比較対象1。未初期化状態は不可。( core_string_initialization_rule 参照) |
[in] | string2_ | 比較対象2。未初期化状態は不可。( core_string_initialization_rule 参照) |
true | 2つの文字列が等しい |
false | 引数がNULL/デフォルト状態( core_string_initialization_rule 参照) / 文字列長や中身が一致しない場合 |
bool core_string_equal_from_char | ( | const char *const | str1_, |
const core_string_t *const | string2_ ) |
char*型文字列とcore_string_tオブジェクトが保持する文字列が等しいかを比較する
使用例:
[in] | str1_ | 比較対象の文字列 |
[in] | string2_ | 比較対象のcore_string_tオブジェクト。未初期化状態は不可。( core_string_initialization_rule 参照) |
true | 文字列が等しい |
false | 引数が NULL / デフォルト状態( core_string_initialization_rule 参照) / 文字列長や中身が一致しない場合 |
bool core_string_is_empty | ( | const core_string_t *const | string_ | ) |
core_string_tオブジェクトが保持する文字列格納バッファが空かどうかを判定する
使用例:
[in] | string_ | 判定対象オブジェクト。未初期化状態は不可。( core_string_initialization_rule 参照) |
true | オブジェクトがNULL / デフォルト状態( core_string_initialization_rule 参照) / 空文字列である |
false | 文字列が1文字以上存在する |
uint64_t core_string_length | ( | const core_string_t *const | string_ | ) |
core_string_tオブジェクトが保持している文字列の長さを取得する
使用例:
[in] | string_ | 長さを取得する対象のcore_string_tオブジェクト。未初期化状態は不可。( core_string_initialization_rule 参照) |
INVALID_VALUE_U64 | 引数が NULL の場合 |
0 | 未初期化のオブジェクトが渡された場合 |
その他 | 保持している文字列の長さ |
CORE_STRING_ERROR_CODE core_string_substring_copy | ( | const core_string_t *const | src_, |
core_string_t *const | dst_, | ||
uint16_t | from_, | ||
uint16_t | to_ ) |
src_ の [from_, to_] 範囲の部分文字列を dst_ にコピーする
使用例:
[in] | src_ | 部分文字列を抽出する元の文字列オブジェクト。未初期化状態は不可。( core_string_initialization_rule 参照) |
[out] | dst_ | 抽出結果を格納する文字列オブジェクト。未初期化状態は不可。( core_string_initialization_rule 参照) |
[in] | from_ | 抽出を開始するインデックス (0-based) |
[in] | to_ | 抽出を終了するインデックス (0-based, inclusive) |
CORE_STRING_INVALID_ARGUMENT |
|
CORE_STRING_RUNTIME_ERROR |
|
CORE_STRING_SUCCESS | 正常に部分文字列のコピーが完了 |
CORE_STRING_ERROR_CODE core_string_to_i32 | ( | const core_string_t *const | string_, |
int32_t * | out_value_ ) |
core_string_tオブジェクトの内容をint32_t型整数に変換する。
使用例:
[in] | string_ | 変換対象の文字列オブジェクト。( core_string_initialization_rule 参照) |
[out] | out_value_ | 変換結果を格納するポインタ |
CORE_STRING_INVALID_ARGUMENT | 引数string_またはout_value_がNULL |
CORE_STRING_RUNTIME_ERROR | string_がデフォルト状態( core_string_initialization_rule 参照)、空文字列、変換失敗、または範囲外の値 |
CORE_STRING_SUCCESS | 正常に変換が完了 |
CORE_STRING_ERROR_CODE core_string_trim | ( | const core_string_t *const | src_, |
core_string_t *const | dst_, | ||
char | ltrim_, | ||
char | rtrim_ ) |
指定したトリム文字を取り除いた文字列をdst_にコピーする。
使用例:
[in] | src_ | トリム対象の文字列オブジェクト。未初期化状態は不可。( core_string_initialization_rule 参照) |
[out] | dst_ | トリム結果の出力先オブジェクト。未初期化状態は不可。( core_string_initialization_rule 参照) |
[in] | ltrim_ | 左端のトリム対象文字 |
[in] | rtrim_ | 右端のトリム対象文字 |
CORE_STRING_INVALID_ARGUMENT | 引数がNULL |
CORE_STRING_RUNTIME_ERROR | src_がデフォルト状態( core_string_initialization_rule 参照)または長さ取得に失敗 |
CORE_STRING_MEMORY_ALLOCATE_ERROR | メモリ再確保に失敗 |
CORE_STRING_SUCCESS | 正常終了 |