GL CHOCO ENGINE
Loading...
Searching...
No Matches
choco_string.c File Reference

文字列を格納するコンテナモジュールAPIの実装 More...

#include <string.h>
#include <stddef.h>
#include <stdbool.h>
#include <stdint.h>
#include "engine/containers/choco_string.h"
#include "engine/core/memory/choco_memory.h"
#include "engine/base/choco_macros.h"
#include "engine/base/choco_message.h"
Include dependency graph for choco_string.c:

Data Structures

struct  choco_string
 文字列コンテナ内部状態管理構造体 More...
 

Functions

choco_string_result_t choco_string_default_create (choco_string_t **string_)
 空の文字列コンテナを生成する
 
choco_string_result_t choco_string_create_from_c_string (choco_string_t **string_, const char *src_)
 const char*型文字列src_で文字列コンテナを生成する
 
void choco_string_destroy (choco_string_t **string_)
 string_が管理しているメモリと自身のメモリを解放し、*string_=NULLにする
 
choco_string_result_t choco_string_copy (choco_string_t *dst_, const choco_string_t *src_)
 文字列コンテナsrc_が管理する文字列をdst_にコピーする
 
choco_string_result_t choco_string_copy_from_c_string (choco_string_t *dst_, const char *src_)
 const char*型文字列src_をdst_にコピーする
 
choco_string_result_t choco_string_concat (const choco_string_t *string_, choco_string_t *dst_)
 文字列コンテナstring_が管理する文字列をdst_の末尾に連結する
 
choco_string_result_t choco_string_concat_from_c_string (const char *string_, choco_string_t *dst_)
 const char*型文字列string_をdst_の末尾に連結する
 
size_t choco_string_length (const choco_string_t *string_)
 文字列コンテナstring_が管理する文字列の長さを取得する
 
const char * choco_string_c_str (const choco_string_t *string_)
 文字列コンテナstring_が管理する文字列の先頭アドレスを取得する
 

Detailed Description

文字列を格納するコンテナモジュールAPIの実装

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

Function Documentation

◆ choco_string_c_str()

const char * choco_string_c_str ( const choco_string_t string_)

文字列コンテナstring_が管理する文字列の先頭アドレスを取得する

Note
  • string_がNULLまたは内部管理バッファがNULLで空の文字列を返す
  • 取得したconst char*は choco_string_destroy でstring_が破棄されるまで有効
choco_string_t* string = NULL;
// エラー処理
const char* c_ptr = choco_string_c_str(string);
fprintf(stdout, "%s\n", c_ptr); // 標準出力にaaaaaが出力される
choco_string_result_t
文字列API実行結果コードリスト
Definition: choco_string.h:40
const char * choco_string_c_str(const choco_string_t *string_)
文字列コンテナstring_が管理する文字列の先頭アドレスを取得する
Definition: choco_string.c:399
void choco_string_destroy(choco_string_t **string_)
string_が管理しているメモリと自身のメモリを解放し、*string_=NULLにする
Definition: choco_string.c:167
choco_string_result_t choco_string_create_from_c_string(choco_string_t **string_, const char *src_)
const char*型文字列src_で文字列コンテナを生成する
Definition: choco_string.c:122
文字列コンテナ内部状態管理構造体
Definition: choco_string.c:68
Parameters
string_文字列先頭アドレス取得元構造体インスタンス
Returns
const char* 文字列先頭アドレス

◆ choco_string_concat()

choco_string_result_t choco_string_concat ( const choco_string_t string_,
choco_string_t dst_ 
)

文字列コンテナstring_が管理する文字列をdst_の末尾に連結する

Note
  • 自己連結(dst_にdst_を連結する)ことは禁止する(内部バッファ管理を簡便にするため)
  • string_が管理する文字列が""の場合は何もしない
  • dst_が管理するバッファの容量が足りない場合は,新規にバッファを取得し直す
choco_string_t* string = NULL;
// エラー処理
choco_string_t* dst = NULL;
// エラー処理
ret = choco_string_concat(string, dst); // dstの文字列はbbbaaaとなる
// エラー処理
choco_string_result_t choco_string_concat(const choco_string_t *string_, choco_string_t *dst_)
文字列コンテナstring_が管理する文字列をdst_の末尾に連結する
Definition: choco_string.c:281
Parameters
string_連結元文字列
dst_連結先文字列
Return values
CHOCO_STRING_INVALID_ARGUMENT以下のいずれか
  • dst_ == NULL
  • string_ == NULL
CHOCO_STRING_BAD_OPERATION連結先文字列と連結元文字列の先頭アドレスが等しい(自己連結は禁止する)
CHOCO_STRING_DATA_CORRUPTED以下のいずれか
  • string_の内部データが破損(アドレスへの不正アクセス等により発生)
  • dst_の内部データが破損(アドレスへの不正アクセス等により発生)
CHOCO_STRING_OVERFLOW連結後の文字列長さがsize_tの上限を超過
CHOCO_STRING_NO_MEMORYメモリ確保失敗
CHOCO_STRING_LIMIT_EXCEEDEDメモリ管理システムの管理変数が使用可能範囲を超過
CHOCO_STRING_SUCCESS文字列の連結に成功し,正常終了

◆ choco_string_concat_from_c_string()

choco_string_result_t choco_string_concat_from_c_string ( const char *  string_,
choco_string_t dst_ 
)

const char*型文字列string_をdst_の末尾に連結する

Note
  • string_が""の場合は何もしない
  • dst_が管理するバッファの容量が足りない場合は,新規にバッファを取得し直す
choco_string_t* dst = NULL;
// エラー処理
ret = choco_string_concat_from_c_string("aaa", dst); // dstの文字列はbbbaaaとなる
// エラー処理
choco_string_result_t choco_string_concat_from_c_string(const char *string_, choco_string_t *dst_)
const char*型文字列string_をdst_の末尾に連結する
Definition: choco_string.c:338
Parameters
string_連結元文字列
dst_連結先文字列
Return values
CHOCO_STRING_INVALID_ARGUMENT以下のいずれか
  • dst_ == NULL
  • string_ == NULL
CHOCO_STRING_DATA_CORRUPTEDdst_の内部データが破損(アドレスへの不正アクセス等により発生)
CHOCO_STRING_OVERFLOW連結後の文字列長さがsize_tの上限を超過
CHOCO_STRING_NO_MEMORYメモリ確保失敗
CHOCO_STRING_LIMIT_EXCEEDEDメモリ管理システムの管理変数が使用可能範囲を超過
CHOCO_STRING_SUCCESS文字列の連結に成功し,正常終了

◆ choco_string_copy()

choco_string_result_t choco_string_copy ( choco_string_t dst_,
const choco_string_t src_ 
)

文字列コンテナsrc_が管理する文字列をdst_にコピーする

Note
dst_のバッファサイズにより下記の動作をする
  • dst_のバッファサイズがsrc_の文字列長さ+1(終端文字)よりも小さい: dst_のバッファサイズをsrc_の文字列長さ+1(終端文字)に拡張
  • dst_のバッファサイズがsrc_の文字列長さ+1(終端文字)よりも大きい: dst_のバッファサイズは変更せず,文字列をコピー
  • dst_のバッファサイズとsrc_の文字列長さ+1(終端文字)が等しい: dst_のバッファサイズは変更せず,文字列をコピー
choco_string_t* dst = NULL;
// エラー処理
choco_string_t* src = NULL;
// エラー処理
ret = choco_string_copy(dst, src); // dstのバッファにaaa+'\0'がコピーされる
// エラー処理
choco_string_result_t choco_string_copy(choco_string_t *dst_, const choco_string_t *src_)
文字列コンテナsrc_が管理する文字列をdst_にコピーする
Definition: choco_string.c:184
choco_string_result_t choco_string_default_create(choco_string_t **string_)
空の文字列コンテナを生成する
Definition: choco_string.c:92
Parameters
dst_コピー先文字列コンテナ
src_コピー元文字列コンテナ
Return values
CHOCO_STRING_INVALID_ARGUMENT以下のいずれか
  • dst_ == NULL
  • src_ == NULL
CHOCO_STRING_DATA_CORRUPTED以下のいずれか
  • dst_内部データが破損(アドレスへの不正アクセス等により発生)
  • src_内部データが破損(アドレスへの不正アクセス等により発生)
CHOCO_STRING_OVERFLOWsrc_の文字列長さ+1(終端文字)がsize_tの最大値を超過
CHOCO_STRING_NO_MEMORYメモリ確保失敗
CHOCO_STRING_LIMIT_EXCEEDEDメモリ管理システムの管理変数が使用可能範囲を超過
CHOCO_STRING_SUCCESSコピーに成功し,正常終了
Warning
上記以外のエラーは,テストなどで意図的に発生させない限り起こり得ないエラーで確実にバグ

◆ choco_string_copy_from_c_string()

choco_string_result_t choco_string_copy_from_c_string ( choco_string_t dst_,
const char *  src_ 
)

const char*型文字列src_をdst_にコピーする

Note
dst_のバッファサイズにより下記の動作をする
  • dst_のバッファがsrc_の文字列長さ+1(終端文字)よりも小さい: dst_のバッファサイズをsrc_の文字列長さ+1(終端文字)に拡張
  • dst_のバッファがsrc_の文字列長さ+1(終端文字)よりも大きい: dst_のバッファサイズは変更せず,文字列をコピー
  • dst_のバッファとsrc_の文字列長さ+1(終端文字)に等しい: dst_のバッファサイズは変更せず,文字列をコピー
choco_string_t* dst = NULL;
// エラー処理
ret = choco_string_copy_from_c_string(dst, "aaa"); // dstのバッファにaaa+'\0'がコピーされる
// エラー処理
choco_string_result_t choco_string_copy_from_c_string(choco_string_t *dst_, const char *src_)
const char*型文字列src_をdst_にコピーする
Definition: choco_string.c:234
Parameters
dst_コピー先文字列コンテナ
src_コピー元文字列
Return values
CHOCO_STRING_INVALID_ARGUMENT以下のいずれか
  • dst_がNULL
  • src_がNULL
CHOCO_STRING_DATA_CORRUPTEDdst_の内部データが破損(アドレスへの不正アクセス等により発生)
CHOCO_STRING_OVERFLOWsrc_の文字列長さ+1(終端文字)がsize_tの上限を超過
CHOCO_STRING_NO_MEMORYメモリ確保失敗
CHOCO_STRING_LIMIT_EXCEEDEDメモリ管理システムの管理変数が使用可能範囲を超過
CHOCO_STRING_SUCCESSコピーに成功し,正常終了
Warning
上記以外のエラーは,テストなどで意図的に発生させない限り起こり得ないエラーで確実にバグ

◆ choco_string_create_from_c_string()

choco_string_result_t choco_string_create_from_c_string ( choco_string_t **  string_,
const char *  src_ 
)

const char*型文字列src_で文字列コンテナを生成する

Note
  • string_が管理する文字列バッファはsrc_の文字列長さ+1(終端文字)のサイズで初期化される
  • 生成したインスタンスは choco_string_destroy で破棄すること
choco_string_t* string = NULL;
// エラー処理
Parameters
string_初期化対象文字列コンテナ
src_初期化文字列
Return values
CHOCO_STRING_INVALID_ARGUMENT以下のいずれか
  • string_ == NULL
  • *string_ != NULL
  • src_ == NULL
CHOCO_STRING_NO_MEMORYメモリ確保失敗
CHOCO_STRING_LIMIT_EXCEEDEDメモリ管理システムの管理変数が使用可能範囲を超過
CHOCO_STRING_OVERFLOWsrc_の文字列長さ+1(終端文字)がsize_tの最大値を超過
CHOCO_STRING_SUCCESS初期化に成功し,正常終了
Warning
上記以外のエラーは,テストなどで意図的に発生させない限り起こり得ないエラーで確実にバグ

◆ choco_string_default_create()

choco_string_result_t choco_string_default_create ( choco_string_t **  string_)

空の文字列コンテナを生成する

Note
  • 文字列長さ0で初期化されたchoco_string_tインスタンスを生成する
  • 生成したインスタンスは choco_string_destroy で破棄すること
choco_string_t* string = NULL;
// エラー処理
Parameters
string_初期化対象文字列コンテナ
Return values
CHOCO_STRING_INVALID_ARGUMENT以下のいずれか
  • string_ == NULL
  • *string_ != NULL
CHOCO_STRING_NO_MEMORYメモリ確保失敗
CHOCO_STRING_LIMIT_EXCEEDEDメモリ管理システムの管理変数が使用可能範囲を超過
CHOCO_STRING_SUCCESS初期化に成功し,正常終了

◆ choco_string_destroy()

void choco_string_destroy ( choco_string_t **  string_)

string_が管理しているメモリと自身のメモリを解放し、*string_=NULLにする

Note
  • 2重デストロイ許可
  • string_ == NULLの場合はno-op
  • *string_ == NULLの場合はno-op
choco_string_t* string = NULL; // 必ずNULLで初期化しておく
// エラー処理
choco_string_destroy(&string); // string = NULLになる
choco_string_destroy(&string); // 2重デストロイ(何もしない)
Parameters
string_破棄対象構造体インスタンス

◆ choco_string_length()

size_t choco_string_length ( const choco_string_t string_)

文字列コンテナstring_が管理する文字列の長さを取得する

Note
  • string_がNULLまたはstring_内部管理バッファサイズが0の場合は0を返す
  • 終端文字を含まない長さが返される
choco_string_t* string = NULL;
// エラー処理
const size_t len = choco_string_length(string); // len == 5
size_t choco_string_length(const choco_string_t *string_)
文字列コンテナstring_が管理する文字列の長さを取得する
Definition: choco_string.c:391
Parameters
string_文字列長さ取得元構造体インスタンス
Returns
size_t 文字列長さ