#ifndef __MYU_STANDARD_LIBRARY__mslstl_H__
#define __MYU_STANDARD_LIBRARY__mslstl_H__

#pragma warning( disable : 4786 ) // VC での警告を取り除きます。

//	include
#include "mslcommon.h"
#include <string>
#include <vector>
#include <map>

#include <msl_ra_list.h>

namespace msl{

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

//	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, std::vector<std::string>& tokened_ary,
	int option=MSL_STRTOK_OPT_EMPTY_SKIP );
int string_tokenize( const char* str, std::vector<std::string> tokens, std::vector<std::string>& tokened_ary,
	int option=MSL_STRTOK_OPT_EMPTY_SKIP );
*/

	/*
	template <typename T> class vector2 : public std::vector<T>
	{
	public:
		vector2(std::vector<T> v){
			this = v;
		}
		void append(std::vector<T> &a){
			this->insert(this->end(), a.begin(), a.end());
		}
		vector2& operator += (std::vector<T> &a){
			append(a);
			return *this;
		}
	};
	*/

//////////////////////////////////////////////////////////////////////

//	クラス宣言
class string_ex : public std::string
{
public:
	//	コンストラクタ
	string_ex(){}
	string_ex(const char* s){ set(s); }
	string_ex(int num){ set(num); }
	string_ex(std::string &s){ set(s); }
	
	////////////////////////////////////////////

	//	設定
	void set(int num){
		char work[32];
		sprintf(work, "%d", num);
		assign(work);
	}
	void set_unsigned(int num){
		char work[32];
		sprintf(work, "%u", num);
		assign(work);
	}
	void set_u(int num){ set_unsigned(num); }
	void setu(int num){ set_unsigned(num); }
	void setU(int num){ set_unsigned(num); }
	void set(const char* s){ assign(s); }
	void set(std::string &s){ assign(s); }
	
	////////////////////////////////////////////

	//	取得
	const char* get(){ return c_str(); }
	operator const char*(){ return c_str(); }
	operator int(){ return atoi(c_str()); }
};
typedef string_ex int_string;

//////////////////////////////////////////////////////////////////////

}//namespace msl

//	V1にV2を追加
#define MYU_VECTOR_APPEND(V1,V2)	V1.insert(V1.end(), V2.begin(), V2.end());

/*
class msl_string_util
{
public:
	static string& replace( string& str, const string from, const string to );	//	文字列置換
};

namespace msl{
	typedef msl_string_util string_util;
	typedef msl_string_util stringutil;
}
*/


#endif//__MYU_STANDARD_LIBRARY__mslstl_H__
