THLIB [C言語用ライブラリ]

THLIB [C言語用ライブラリ]
■利用規約・免責事項
・本ソフトウェアは、だれでも無料で使うことができます。
・本ソフトウェアにより発生したトラブルの責任を一切負わないことをご了承ください。
・本ソフトウェアの著作権は平田寿浩に帰属します。
・ライセンスは MIT です
平田寿浩
解説は順次追加されます。


最初に hcval 変数について
これは、整数、文字列、浮動小数点、配列を扱える構造体です。

hcval *val, v;
ポインタは1つまたは無し、定義はこの2種類のみです。

int char などに変換するには 整数:LVAL_P(val)、文字列:SVAL_P(val)、浮動小数点:DVAL_P(val) という具合です
ポインタが無い場合は LVAL(val) SVAL(val) DVAL(val) という具合です。
文字列は SLEN_P(val) のように文字数も確認できます。

if (LAVL_P(val) == 16)
if (strcmp(SVAL_P(val), "abc") == 0)
のようにして比較します。

▼型の確認
●ポインタ有りの場合
if (VTYPE_P(val) == IS__L) 整数
if (VTYPE_P(val) == IS__D) 浮動小数点
if (VTYPE_P(val) == IS__S) 文字列
if (VTYPE_P(val) == IS__A) 配列
if (VTYPE_P(val) == IS__N) NULL

●ポインタ無しの場合
if (VTYPE(val) == IS__L) 整数
if (VTYPE(val) == IS__D) 浮動小数点
if (VTYPE(val) == IS__S) 文字列
if (VTYPE(val) == IS__A) 配列
if (VTYPE(val) == IS__N) NULL


hcval *hc_make_val(const char *fmt, ...)
hcval の作成

型を指定して入力します
l = 整数
s = 文字列
d = 浮動小数点

val = hc_make_val("l", 123);
val = hc_make_val("s", "こんにちは");
val = hc_make_val("d", 123.55);


hcval *hc_make_array(const char *fmt, ...)
配列の作成
hc_make_aray(NULL);
これで空の配列が作成されます。
通常の配列だけでなくハッシュ配列も作成できます
▼このように静的に配列を作ることもできますが、ハッシュは空の配列から指定の関数を使って作ります。
val = hc_make_array("sl", "abc", 777);
[ 0 => "abc", 1 => 777 ]

( hc_set_hash ) ( hc_array_push ) など配列用関数が複数あります。


hcval *hc_copy_val(hcval *ob)

hcval をコピーします
動的にメモリーが確保されますので使い終わったらフリー( hc_vfree )する必要があります。


int hc_count(hcval *value)

配列の要素数を返します。


void hc_array_push(hcval *val, const char *fmt, ...)

配列にデータを追加します。
例:hc_array_push(arr, "s", "abcdefg");


void hc_vfree(int cou, ...)

使い終わったhcvalのメモリーを解放します。
例:hc_vfree(2, val_1, val_2); //変数の数を指定して複数処理をすることもできます。


int hc_get(hcval *value, int ikey, char *skey, hcval *ret);

配列からデータを取り出します。
ikey は整数型キーを入れ、skeyは文字列型のキーを入れますが、文字列キーはハッシュで文字列キーを設定しているときにつかいます。
一つのデータを取り出すとき ikey か skey を入力しますが ikey を入力したときは、 skey は NULL を
skey を入力したとき、 ikey は -1 を入力してください。

引数 ret に戻り値が入ります。

ポインタ無しで宣言したものを使います。
hcval ret;

▼ &ret このように参照レベルをあわせます
hc_get(arr, 0, NULL, &ret);
// arr の配列データのキー 0 を取り出す例です

// データをダンプ
hc_vdump(&ret);
ret のメモリ解放は必要ありません


hcval *hc_get2(hcval *value, int ikey, char *skey, hcval *ret);

char *hc_strdup(char *ss);

char *hc_strndup(char *ss, size_t len);

int hc_str(char *str);

hcval *hc_expl(char *in_delim, char *in_s, int limit);

hcval *hc_expl2(int d, char *in_delim, hcval *in_s, int limit);

void hc_strmix(hcval **ret, const char *fmt, ...);

void hc_strmix2(hcstr *implstr, const char *fmt, ...);

void hc_strmix_s(char **ret, const char *fmt, ...);

hcval *hc_impl(char *sj, hcval *arr);

hcval *hc_replace(int d, char *needle, char *str, hcval *v);

char *hc_strjo(const char *fmt, ...);

hcval *hc_substr(int d, hcval *v, int f, int l);

void hc_substr_hs(hcstr *ret, hcstr *v, int f, int l);

hcval *hc_trim(int d, hcval *v);

void hc_set_hash(hcval *val, const char *fmt, ...);

void hc_array_update(hcval *val, int key, const char *fmt, ...);

void hc_array_del(hcval *val, const char *fmt, ...);

void hc_array_sort_l(hcval *data);

void hc_array_sort_d(hcval *data);

int hc_arr_search(hcval *val, hcval *arr);

size_t hc_file_rb(char *filename, unsigned char **ref);

size_t hc_file_wb(char *filename, unsigned char *data, size_t sz);

size_t hc_file_rv(char *filename, hcval **ref, int mode);

size_t hc_file_wv(char *filename, hcval *data);

char *hc_date(int mode);

int hc_is_file(char *_name);

int hc_is_dir(char *_name);

char *hc_getcwd(void);

int hc_mkdir(char *dname);

int hc_rmdir(char *dname);

int hc_unlink(char *fname);

void hc_proc(char *cmd, int mode, hcval **ret);

hcval *hc_dfname(char *path);

hcval *hc_dirname(char *path);

hcval *hc_basename(char *path);

hcval *hc_conv(hcval *ret, const char *fmt, ...);

int hc_get(hcval *value, int ikey, char *skey, hcval *ret);

hcval *hc_valcas(const char *fmt, hcval *value, hcval *ret);

char *hc_long_to_str(long l);

char *hc_double_to_str(double d);

void hc_array_sort_s(hcval *data);

void hc_vdump(hcval *value);

int hc_reg(char *restr, char *findin, int icase);

int hc_reg_v(char *restr, char *findin, int icase, hcval **array);

hcval *hc_split(char *spliton, char *str, int count, int icase);

void tha_push(THARR *arr, hcval *dat);

int hc_usleep(unsigned int useconds);

char *hc_strjo_n(const char *fmt, ...);

hcval *th_scdir(int mode, char *path);

コメント

この記事へのコメントは終了しました。