#ifndef __MYU_STANDARD_LIBRARY__mslstr2_H__
#define __MYU_STANDARD_LIBRARY__mslstr2_H__

//#include "mslcommon.h"
#include "msl_stlcommon.h"
#include "mslstr.h"

/*
//	STL系
#pragma warning( disable : 4786 ) // VC での警告を取り除きます。
#include <string>
#include <vector>
#include <map>
using namespace std;
*/

////////////////////////////////////////////////////
//
//	関数群
//

namespace msl{

int ultra_sscanf( const char* target_str, const char* format_str, vector<string>& value_list_out );
char* trim( const char* in_str, char* out_str, int out_bufsize, const char* del_chars=" \t\n\r" );
char* trim( char* str, const char* del_chars=" \t\n\r" );
char *strstrs( const char *haystack, vector<string>& needles );
char *strstrs_tail( const char *haystack, vector<string>& needles );

//	文字列置換
std::string& string_replace( std::string& str, const std::string from, const std::string to );

/*typedef struct
{
	string strFrom;
	string strTo;
}
STRRPC_ITEM;*/
class CStrRpcList
{
private:
	vector<string> m_fromList;
	vector<string> m_fromTo;
public:
	void push_back( const char* szFrom, const char* szTo ){ add(szFrom,szTo); }
	void add( const char* szFrom, const char* szTo ){
		m_fromList.push_back(szFrom);
		m_fromTo.push_back(szTo);
	}
	size_t size(){ return m_fromList.size(); }
	const char* GetFrom(int i){ return m_fromList[i].c_str(); }
	const char* GetTo(int i){ return m_fromTo[i].c_str(); }
};
char* strrpc( char* str, size_t memsize, const char* from, const char* to );
char* strrpc( char* str, size_t memsize, vector<string> &fromList, vector<string> &toList );
char* strrpc( char* str, size_t memsize, CStrRpcList &rpcList );

//	tokenize（strtok()とはちょっと挙動が違うので注意）
#define MSL_STRTOK_OPT_NULL			(0x00)
#define MSL_STRTOK_OPT_TOKEN_CHARS	(0x01)
#define MSL_STRTOK_OPT_EMPTY_SKIP	(0x02)
int string_tokenize( const char* str, const char* token, vector<string>& tokened_ary,
	int option=MSL_STRTOK_OPT_EMPTY_SKIP );
int string_tokenize( const char* str, vector<string>& needles, vector<string>& tokened_ary,
	int option=MSL_STRTOK_OPT_EMPTY_SKIP );

}//namespace msl

///////////////////////////////////////////////////
//
//	自作のgetpass()  by ミュー
//
//	・入力関数を隠す関数です。
//	　VCにはgetpass()は無いっぽいので自作で作ってみました。
//	　機能が少し拡張されています。（もともとのgetpass()とは挙動が違います）
//	・cOverrideは入力した文字の変わりに表示する文字です。（*等）
//	　ここに'\0'を指定した場合は、何も文字を表示しません。
//	・出力先バッファに入りきらなくなるときは入力を受け付けなくなります。
//	　（バックスペースを除く）
//	・バックスペースで1文字戻ります。
//
const char* myu_getpass( char *szOutBuf, size_t nOutBufSize, char cOverride );

/*
//	Windows用関数
#ifdef WIN32
BOOL MyuUnicodeToAnsi( const char* szUnicodeStrIn, char* szAnsiStrOut, int nOutBufSize );
BOOL MyuUnicodeToAnsi( char* szAnsiStrOut, int nOutBufSize );
#endif//WIN32
*/

#endif//__MYU_STANDARD_LIBRARY__mslstr2_H__
