#include "TextTool.h"

#include <fstream>
#include <stdarg.h>

using namespace std;

namespace HPL {
namespace General {
namespace TextTool {
/**
  *
  */
int load_StringLinesFromFile( const char* lpszFilePath,
	std::vector<std::string>* pvecOut) 
{
	// pvecOutの初期化はしない
	if( pvecOut == NULL ) {
		_ASSERT( 0 );
		return 1;
	}

	// オープン
	ifstream ifs( lpszFilePath );

	if( ifs.is_open() == false ) {
		// オープン失敗
		_ASSERT(0);
		return 1;
	}

	// 格納用バッファサイズ
	const int BUFFER_SIZE = 1024;

	// 格納用バッファ
	char lpszBuffer[ BUFFER_SIZE ];

	
	while( ifs.getline( lpszBuffer, BUFFER_SIZE ) ) {
		// stringに変換
		string line( lpszBuffer );

		// 格納
		pvecOut->push_back( line );
	}

	ifs.close();

	return 0;
}

/**
  *
  */
bool is_SkipLine( string& strLine ) {

	return strLine.compare("") == 0 ||
		strLine.at(0) == ';' ||
		strLine.at(0) == '#';
}

std::string get_String( const char* format, ... ) {
	const int BUFFER_MAX = 1024;
	char message[BUFFER_MAX];

	va_list maker;
	va_start( maker, format );
	vsprintf_s( message, BUFFER_MAX, format, maker );
	std::string str( message );
	return str;
}
std::vector<std::string> split( std::string& strIn, const char* lpczSeparator ){
	std::vector<std::string> arrays;

	int sepLength = strlen( lpczSeparator );

	for(int i = 0; i < static_cast<int>(strIn.length()); i ++){

		// 次のセパレータの位置を取得
		int pos = strIn.find( lpczSeparator, i);

		
		if(pos == std::string::npos){
			// 最後に達した

			// 最後の要素を入れてFinish
			arrays.push_back( strIn.substr( i ) );
			break;

		}else if(pos == i){
			// セパレータが繰り返されている
			// スキップします
			i = pos + sepLength - 1;
		}else {
			// 前のセパレータの位置 or 最初の位置から、次のセパレータまでの位置を切り出し、配列に追加
			arrays.push_back( strIn.substr( i, pos - i) );
			i = pos + sepLength - 1;
		}
	}
	return arrays;
}
}
}
}