/*
 *	argz.h
 *
 *	Argz Functions - Operations on argz vectors.
 *
 *	* Thu Oct 22 21:13:48 JST 2015 Naoyuki Sawa
 *	- 1st リリース。
 *	- 「Argz Functions」(http://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html)互換モジュールです。
 *	  関数仕様は「Argz Functions」と同じで、実装は独自です。
 *	  オリジナル版の「Argz Functions」は速度を重視してやや複雑ですが、当実装は単純に実装しました。
 *	- 関数仕様や使い方の説明は、上記のドキュメントの他、以下のドキュメントも参考になります。
 *	  「Linux Programmer's Manual - ARGZ_ADD」(http://linuxjm.osdn.jp/html/LDP_man-pages/man3/argz_add.3.html)
 *	  ただし、「Linux Programmer's Manual - ARGZ_ADD」は、argz_append()の説明に間違いが有るようです。
 *	  詳細は、argz_append()の実装部分のコメントを参照して下さい。
 *	* Wed Nov 18 21:37:53 JST 2015 Naoyuki Sawa
 *	- 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
 */
#ifndef __ARGZ_H__
#define __ARGZ_H__
#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus
/*****************************************************************************
 *	
 *****************************************************************************/
typedef int error_t;
/*---------------------------------------------------------------------------*/
error_t argz_create(char* argv[], char** argz, size_t* argz_len);
error_t argz_create_sep(const char* str, int sep, char** argz, size_t* argz_len);
size_t argz_count(const char* argz, size_t argz_len);
void argz_extract(const char* argz, size_t argz_len, char** argv);
void argz_stringify(char* argz, size_t argz_len, int sep);
error_t argz_append(char** argz, size_t* argz_len, const char* buf, size_t buf_len);
error_t argz_add(char** argz, size_t* argz_len, const char* str);
error_t argz_add_sep(char** argz, size_t* argz_len, const char* str, int sep);
void argz_delete(char** argz, size_t* argz_len, char* entry);
error_t argz_insert(char** argz, size_t* argz_len, char* before, const char* entry);
char* argz_next(const char* argz, size_t argz_len, const char* entry);
error_t argz_replace(char** argz, size_t* argz_len, const char* str, const char* with, unsigned* replace_count);
#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus
#endif//__ARGZ_H__
