//---------------------------------------------------------------------------
#ifndef stdToolsH
#define stdToolsH
//---------------------------------------------------------------------------
#include <string>
//---------------------------------------------------------------------------
	//template <typename T>
	//std::string toStdStr(T val);

	//std::string FloatToStdStr(float val);
	std::string IntToStdStr(int val); //Вырезает из строки не цифры
	std::string FloatToStdStr(double val,int digits = -1); 
	template <typename T>
	std::wstring toStdWStr(T val);
	std::wstring IntToStdWStr(int val);

	template <typename T>
	std::string toStringHex(T val);
	std::string toStringHex2(int val);

	template<typename T>
	T fromString(const std::string& s);
	int StdStrToInt(std::string& str, bool cutInt = false);
	int StdStrToUInt(std::string& str, bool cutInt = false);
	float StdStrToFloat(std::string& str);
	double StdStrToDouble(std::string& str);

	template<typename T>
	T fromWString(const std::wstring& s);
	int StdWStrToInt(const std::wstring& s);

	//Конвертация строк
	std::string CodeBSD(std::string str); ///<Закодировать число в двоично десятичный формат
	std::string CodeBSD(int val,int len = 0); ///<Закодировать число в двоично десятичный формат
	int BSDToInt(char chr); //Двоично десятичный символ в int
	int BSDToInt(std::string str, size_t start = 0, size_t len = 0); //Двоично десятичную строку в int
	std::string DecodeBSD(char chr); //1 символ в BSD число
	std::string DecodeBSD(std::string str, size_t start = 0, size_t len = 0); //Раскодироваьт из двоично десятичного формата

	std::wstring StringToWString(const std::string& in, const std::locale &loc); // = std::locale("rus") //Конвертация из одно байтного в мульти и обратно
	std::string WStringToString(const std::wstring &s, const std::locale &loc, char default_char = '?'); // = std::locale("rus")
	std::wstring s2ws(const std::string& s); //В c++ buildere это работало а StringToWString нет
	std::string ws2s(const std::wstring& s);
	std::string convUTF16ToUTF8(const std::wstring& widestring); //Конвертация из UTF16LE в UTF8
	std::wstring convUTF8ToUTF16(const std::string& str); //Конвертация из UTF8 в UTF16LE
	std::string UnicodeToDOS886(std::wstring str); //Конвертим из Unicode в DOS 866 кодировку
	std::wstring DOS886ToUnicode(std::string str); //Конвертим из DOS 866 в Unicode кодировку



	void replaseChars(std::string& str,char oldCh,char newCh); //Заменить 1 символ другим
//	std::string replace(std::string text, std::string s, std::string d);
//	std::string getExePath();

	std::wstring UpperCase(const std::wstring& str); ///<К верхнему регистру строку (долго работает)
	std::string BeforeLast(std::string str,char ch);
	std::wstring BeforeWLast(std::wstring str,wchar_t ch);
	std::string BeforeFirst(std::string str,const char ch);
	std::wstring BeforeWFirst(std::wstring str,const wchar_t ch);
	std::string AfterFirst(std::string str,const char ch);
	std::wstring AfterWFirst(std::wstring str,const wchar_t ch);
	std::string AfterLast(std::string str,const char ch);
	std::string CutBeforeFirst(std::string& str,const char ch);
	std::wstring CutBeforeWFirst(std::wstring& str,const wchar_t ch);
	std::string replaceStrings(std::string sors,std::string find,std::string repl);
	std::wstring replaceStrings(std::wstring sors,std::wstring find,std::wstring repl);


	std::string trim(const std::string & s); //Удалить пробелы в начале и конце строки

	std::string add0(std::string str); //Добавить 0 в начало строоки если 1 символ для даты нужно

	std::string getStrDate();
	std::wstring getWStrDate();
	std::string getDateTime();

	std::string getAppPathA(); //Путь к DLL либо к EXE
	std::wstring getAppPathW(); //Путь к DLL

//------------------------------------------------------------------------------
/*struct TIniStructSTD
{
	TIniStructSTD *next; //След. значение
	std::wstring section; //Секция
	std::wstring ident; //Идентификатор
	std::wstring value; //Значение
};

class TIniFileSTD
{
private:
	std::wstring path;
	TIniStructSTD *first; //Первый из списка
	TIniStructSTD *last;
public:
	TIniFileSTD(std::wstring path);
	virtual ~TIniFileSTD();
	std::string ReadString(std::string Section,std::string Ident,std::string Default);
	//float ReadFloat(std::wstring Section,std::wstring Ident,float Default);
	//long ReadLong(std::wstring Section,std::wstring Ident,long Default);
	//unsigned long ReadULong(std::wstring Section,std::wstring Ident,unsigned long Default);
	//bool ReadBool(std::wstring Section,std::wstring Ident,bool Default);
	void WriteString(std::string Section,std::string Ident,std::string Value);
	//void WriteFloat(std::wstring Section,std::wstring Ident,float Value);
	//void WriteLong(std::wstring Section,std::wstring Ident,long Value);
	//void WriteULong(std::wstring Section,std::wstring Ident,unsigned long Value);
	//void WriteBool(std::wstring Section,std::wstring Ident,bool Value);
	void Save(); //Сохранить из памяти в файл
};*/
//------------------------------------------------------------------------------
#endif