[DEV] add many const and capability to convert element in string and the oposite

This commit is contained in:
Edouard DUPIN 2013-05-14 21:46:11 +02:00
parent 91c6690daa
commit fe0d7ab99f
7 changed files with 168 additions and 93 deletions

View File

@ -30,9 +30,9 @@ etk::Char::operator void *()
}; };
void etk::Char::SetValue(const etk::Vector<char>& data) void etk::Char::SetValue(const etk::Vector<char>& _data)
{ {
m_data = data; m_data = _data;
// check presence of '\0' (note : start by the end might be faster ... // check presence of '\0' (note : start by the end might be faster ...
for (int32_t iii=m_data.Size()-1; iii>=0; iii--) { for (int32_t iii=m_data.Size()-1; iii>=0; iii--) {
if (m_data[iii] == '\0') { if (m_data[iii] == '\0') {

View File

@ -24,7 +24,7 @@ namespace etk
~Char(void); ~Char(void);
operator const char *(); operator const char *();
operator void *(); operator void *();
void SetValue(const etk::Vector<char>& data); void SetValue(const etk::Vector<char>& _data);
}; };
}; };

View File

@ -1747,7 +1747,7 @@ template<class CLASS_TYPE> class RegExp {
* @brief Get the regular expression string * @brief Get the regular expression string
* @return the string representing the RegExp * @return the string representing the RegExp
*/ */
etk::UString GetRegExp(void) const etk::UString& GetRegExp(void) const
{ {
return m_expressionRequested; return m_expressionRequested;
}; };

View File

@ -126,15 +126,29 @@ void etk::UString::Set(const uniChar_t * inputData, int32_t len)
} }
etk::UString::UString(char inputData) etk::UString::UString(const bool _inputData)
{ {
char tmpVal[2];
// generate the UString :
sprintf(tmpVal, "%c", inputData);
// set the internal data :
m_data.Clear(); m_data.Clear();
if (true == _inputData) {
m_data.PushBack('t');
m_data.PushBack('r');
m_data.PushBack('u');
m_data.PushBack('e');
} else {
m_data.PushBack('f');
m_data.PushBack('a');
m_data.PushBack('l');
m_data.PushBack('s');
m_data.PushBack('e');
}
m_data.PushBack('\0');
}
etk::UString::UString(const char inputData)
{
m_data.Clear();
m_data.PushBack((uint32_t)inputData);
m_data.PushBack('\0'); m_data.PushBack('\0');
Set(tmpVal);
} }
@ -161,7 +175,7 @@ etk::UString::UString(unsigned int inputData, const char* mode)
Set(tmpVal); Set(tmpVal);
} }
etk::UString::UString(float inputData) etk::UString::UString(const float inputData)
{ {
char tmpVal[256]; char tmpVal[256];
// generate the UString : // generate the UString :
@ -172,7 +186,7 @@ etk::UString::UString(float inputData)
Set(tmpVal); Set(tmpVal);
} }
etk::UString::UString(double inputData) etk::UString::UString(const double inputData)
{ {
char tmpVal[256]; char tmpVal[256];
// generate the UString : // generate the UString :
@ -640,7 +654,14 @@ etk::Char etk::UString::c_str(void) const
return tmpVar; return tmpVar;
} }
bool etk::UString::ToBool(void) const
{
if( true == CompareNoCase("true")
|| *this == "1") {
return true;
}
return false;
}
int64_t etk::UString::ToInt64(void) const int64_t etk::UString::ToInt64(void) const
{ {
int64_t ret=0; int64_t ret=0;

View File

@ -28,11 +28,12 @@ namespace etk
void Set(const uniChar_t* inputData, int32_t len=-1); void Set(const uniChar_t* inputData, int32_t len=-1);
void Set(const char* inputData, int32_t len=-1); void Set(const char* inputData, int32_t len=-1);
// basic convertion integer en string // basic convertion integer en string
UString(char inputData); UString(const bool _inputData);
UString(const char _inputData);
UString(int inputData, const char* mode="%d"); UString(int inputData, const char* mode="%d");
UString(unsigned int inputData, const char* mode="%d"); UString(unsigned int inputData, const char* mode="%d");
UString(float inputData); UString(const float inputData);
UString(double inputData); UString(const double inputData);
UString(const etk::UString &etkS); UString(const etk::UString &etkS);
//UString(const uniChar_t inputData); //UString(const uniChar_t inputData);
// destructor : // destructor :
@ -41,7 +42,7 @@ namespace etk
/***************************************************** /*****************************************************
* = assigment * = assigment
*****************************************************/ *****************************************************/
const etk::UString& operator= (const etk::UString &etkS ); const etk::UString& operator= (const etk::UString& etkS );
const etk::UString& operator= (etk::Vector<char> inputData); const etk::UString& operator= (etk::Vector<char> inputData);
const etk::UString& operator= (etk::Vector<int8_t> inputData); const etk::UString& operator= (etk::Vector<int8_t> inputData);
const etk::UString& operator= (etk::Vector<uniChar_t> inputData); const etk::UString& operator= (etk::Vector<uniChar_t> inputData);
@ -157,6 +158,11 @@ namespace etk
* @return the requested float * @return the requested float
*/ */
float ToFloat(void) const; float ToFloat(void) const;
/**
* @brief Transform the current string in a boolean
* @return the requested bool
*/
bool ToBool(void) const;
}; };
etk::CCout& operator <<(etk::CCout &os, const etk::UString &obj); etk::CCout& operator <<(etk::CCout &os, const etk::UString &obj);

View File

@ -8,136 +8,148 @@
#include <etk/math/Vector2D.h> #include <etk/math/Vector2D.h>
etk::CCout& etk::operator <<(etk::CCout &os, const etk::Vector2D<int32_t> obj) etk::CCout& etk::operator <<(etk::CCout& _os, const etk::Vector2D<int32_t>& _obj)
{ {
os << "("; _os << "(";
os << obj.x(); _os << _obj.x();
os << ","; _os << ",";
os << obj.y(); _os << _obj.y();
os << ")"; _os << ")";
return os; return _os;
} }
etk::CCout& etk::operator <<(etk::CCout &os, const etk::Vector2D<float> obj) etk::CCout& etk::operator <<(etk::CCout& _os, const etk::Vector2D<float>& _obj)
{ {
os << "("; _os << "(";
os << obj.x(); _os << _obj.x();
os << ","; _os << ",";
os << obj.y(); _os << _obj.y();
os << ")"; _os << ")";
return os; return _os;
} }
etk::CCout& etk::operator <<(etk::CCout &os, const etk::Vector2D<uint32_t> obj) etk::CCout& etk::operator <<(etk::CCout& _os, const etk::Vector2D<uint32_t>& _obj)
{ {
os << "("; _os << "(";
os << obj.x(); _os << _obj.x();
os << ","; _os << ",";
os << obj.y(); _os << _obj.y();
os << ")"; _os << ")";
return os; return _os;
} }
etk::CCout& etk::operator <<(etk::CCout &os, const etk::Vector2D<bool> obj) etk::CCout& etk::operator <<(etk::CCout& _os, const etk::Vector2D<bool>& _obj)
{ {
os << "("; _os << "(";
os << obj.x(); _os << _obj.x();
os << ","; _os << ",";
os << obj.y(); _os << _obj.y();
os << ")"; _os << ")";
return os; return _os;
} }
namespace etk {
template<> Vector2D<bool>::Vector2D(const etk::UString& str) namespace etk
{
template<> Vector2D<bool>::operator etk::UString(void) const
{
etk::UString str;
str = "(";
str += x();
str += ",";
str += y();
str += ")";
return str;
}
template<> Vector2D<bool>::Vector2D(const etk::UString& _str)
{ {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = false; m_floats[1] = false;
if (str.StartWith("(")) { if (_str.StartWith("(")) {
if (str.StartWith("(t")) { if (_str.StartWith("(t")) {
if (str.CompareNoCase("(true,true)")) { if (_str.CompareNoCase("(true,true)")) {
m_floats[0] = true; m_floats[0] = true;
m_floats[1] = true; m_floats[1] = true;
} else if (str.CompareNoCase("(true,false)")) { } else if (_str.CompareNoCase("(true,false)")) {
m_floats[0] = true; m_floats[0] = true;
m_floats[1] = false; m_floats[1] = false;
} else if (str.CompareNoCase("(true)")) { } else if (_str.CompareNoCase("(true)")) {
m_floats[0] = true; m_floats[0] = true;
m_floats[1] = true; m_floats[1] = true;
} }
} else if (str.StartWith("(f")) { } else if (_str.StartWith("(f")) {
if (str.CompareNoCase("(false,true)")) { if (_str.CompareNoCase("(false,true)")) {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = true; m_floats[1] = true;
} else if (str.CompareNoCase("(false,false)")) { } else if (_str.CompareNoCase("(false,false)")) {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = false; m_floats[1] = false;
} else if (str.CompareNoCase("(false)")) { } else if (_str.CompareNoCase("(false)")) {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = false; m_floats[1] = false;
} }
} else { } else {
if (str.CompareNoCase("(1,1)")) { if (_str.CompareNoCase("(1,1)")) {
m_floats[0] = true; m_floats[0] = true;
m_floats[1] = true; m_floats[1] = true;
} else if (str.CompareNoCase("(1)")) { } else if (_str.CompareNoCase("(1)")) {
m_floats[0] = true; m_floats[0] = true;
m_floats[1] = true; m_floats[1] = true;
} else if (str.CompareNoCase("(1,0)")) { } else if (_str.CompareNoCase("(1,0)")) {
m_floats[0] = true; m_floats[0] = true;
m_floats[1] = false; m_floats[1] = false;
} else if (str.CompareNoCase("(0,1)")) { } else if (_str.CompareNoCase("(0,1)")) {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = true; m_floats[1] = true;
} else if (str.CompareNoCase("(0,0)")) { } else if (_str.CompareNoCase("(0,0)")) {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = false; m_floats[1] = false;
} else if (str.CompareNoCase("(0)")) { } else if (_str.CompareNoCase("(0)")) {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = false; m_floats[1] = false;
} }
} }
} else { } else {
if (str.StartWith("t")) { if (_str.StartWith("t")) {
if (str.CompareNoCase("true,true")) { if (_str.CompareNoCase("true,true")) {
m_floats[0] = true; m_floats[0] = true;
m_floats[1] = true; m_floats[1] = true;
} else if (str.CompareNoCase("true,false")) { } else if (_str.CompareNoCase("true,false")) {
m_floats[0] = true; m_floats[0] = true;
m_floats[1] = false; m_floats[1] = false;
} else if (str.CompareNoCase("true")) { } else if (_str.CompareNoCase("true")) {
m_floats[0] = true; m_floats[0] = true;
m_floats[1] = true; m_floats[1] = true;
} }
} else if (str.StartWith("f")) { } else if (_str.StartWith("f")) {
if (str.CompareNoCase("false,true")) { if (_str.CompareNoCase("false,true")) {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = true; m_floats[1] = true;
} else if (str.CompareNoCase("false,false")) { } else if (_str.CompareNoCase("false,false")) {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = false; m_floats[1] = false;
} else if (str.CompareNoCase("false")) { } else if (_str.CompareNoCase("false")) {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = false; m_floats[1] = false;
} }
} else { } else {
if (str.CompareNoCase("1,1")) { if (_str.CompareNoCase("1,1")) {
m_floats[0] = true; m_floats[0] = true;
m_floats[1] = true; m_floats[1] = true;
} else if (str.CompareNoCase("1")) { } else if (_str.CompareNoCase("1")) {
m_floats[0] = true; m_floats[0] = true;
m_floats[1] = true; m_floats[1] = true;
} else if (str.CompareNoCase("1,0")) { } else if (_str.CompareNoCase("1,0")) {
m_floats[0] = true; m_floats[0] = true;
m_floats[1] = false; m_floats[1] = false;
} else if (str.CompareNoCase("0,1")) { } else if (_str.CompareNoCase("0,1")) {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = true; m_floats[1] = true;
} else if (str.CompareNoCase("0,0")) { } else if (_str.CompareNoCase("0,0")) {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = false; m_floats[1] = false;
} else if (str.CompareNoCase("0")) { } else if (_str.CompareNoCase("0")) {
m_floats[0] = false; m_floats[0] = false;
m_floats[1] = false; m_floats[1] = false;
} }
@ -145,54 +157,87 @@ namespace etk {
} }
} }
template<> Vector2D<int32_t>::Vector2D(const etk::UString& str) template<> Vector2D<int32_t>::operator etk::UString(void) const
{
etk::UString str;
str = "(";
str += x();
str += ",";
str += y();
str += ")";
return str;
}
template<> Vector2D<int32_t>::Vector2D(const etk::UString& _str)
{ {
m_floats[0] = 0; m_floats[0] = 0;
m_floats[1] = 0; m_floats[1] = 0;
if (str.StartWith("(")) { if (_str.StartWith("(")) {
int32_t val1=0; int32_t val1=0;
int32_t val2=0; int32_t val2=0;
sscanf(str.c_str(), "(%d,%d)", &val1, &val2); sscanf(_str.c_str(), "(%d,%d)", &val1, &val2);
m_floats[0] = val1; m_floats[0] = val1;
m_floats[1] = val2; m_floats[1] = val2;
} else { } else {
int32_t val1=0; int32_t val1=0;
int32_t val2=0; int32_t val2=0;
sscanf(str.c_str(), "%d,%d", &val1, &val2); sscanf(_str.c_str(), "%d,%d", &val1, &val2);
m_floats[0] = val1; m_floats[0] = val1;
m_floats[1] = val2; m_floats[1] = val2;
} }
} }
template<> Vector2D<uint32_t>::Vector2D(const etk::UString& str) template<> Vector2D<uint32_t>::operator etk::UString(void) const
{
etk::UString str;
str = "(";
str += x();
str += ",";
str += y();
str += ")";
return str;
}
template<> Vector2D<uint32_t>::Vector2D(const etk::UString& _str)
{ {
m_floats[0] = 0; m_floats[0] = 0;
m_floats[1] = 0; m_floats[1] = 0;
if (str.StartWith("(")) { if (_str.StartWith("(")) {
int32_t val1=0; int32_t val1=0;
int32_t val2=0; int32_t val2=0;
sscanf(str.c_str(), "(%d,%d)", &val1, &val2); sscanf(_str.c_str(), "(%d,%d)", &val1, &val2);
m_floats[0] = etk_max(0,val1); m_floats[0] = etk_max(0,val1);
m_floats[1] = etk_max(0,val2); m_floats[1] = etk_max(0,val2);
} else { } else {
int32_t val1=0; int32_t val1=0;
int32_t val2=0; int32_t val2=0;
sscanf(str.c_str(), "%d,%d", &val1, &val2); sscanf(_str.c_str(), "%d,%d", &val1, &val2);
m_floats[0] = etk_max(0,val1); m_floats[0] = etk_max(0,val1);
m_floats[1] = etk_max(0,val2); m_floats[1] = etk_max(0,val2);
} }
} }
template<> Vector2D<float>::Vector2D(const etk::UString& str) template<> Vector2D<float>::operator etk::UString(void) const
{
etk::UString str;
str = "(";
str += x();
str += ",";
str += y();
str += ")";
return str;
}
template<> Vector2D<float>::Vector2D(const etk::UString& _str)
{ {
m_floats[0] = 0; m_floats[0] = 0;
m_floats[1] = 0; m_floats[1] = 0;
//TK_DEBUG("start parsing od vec2 with \"" << str << "\""); //TK_DEBUG("start parsing od vec2 with \"" << str << "\"");
if (str.StartWith("(")) { if (_str.StartWith("(")) {
//TK_DEBUG(" start with ("); //TK_DEBUG(" start with (");
sscanf(str.c_str(), "(%f,%f)", &m_floats[0], &m_floats[1]); sscanf(_str.c_str(), "(%f,%f)", &m_floats[0], &m_floats[1]);
} else { } else {
sscanf(str.c_str(), "%f,%f", &m_floats[0], &m_floats[1]); sscanf(_str.c_str(), "%f,%f", &m_floats[0], &m_floats[1]);
} }
//TK_DEBUG(" result " << *this); //TK_DEBUG(" result " << *this);
} }

View File

@ -363,15 +363,18 @@ namespace etk
{ {
return m_floats[0] == 0 && m_floats[1] == 0; return m_floats[0] == 0 && m_floats[1] == 0;
} }
//!< string cast :
operator etk::UString(void) const;
//etk::UString UString(void) const { return *this; };
}; };
/** /**
* @brief Debug operator To display the curent element in a Human redeable information * @brief Debug operator To display the curent element in a Human redeable information
*/ */
etk::CCout& operator <<(etk::CCout &os, const etk::Vector2D<int32_t> obj); etk::CCout& operator <<(etk::CCout &os, const etk::Vector2D<int32_t>& obj);
etk::CCout& operator <<(etk::CCout &os, const etk::Vector2D<float> obj); etk::CCout& operator <<(etk::CCout &os, const etk::Vector2D<float>& obj);
etk::CCout& operator <<(etk::CCout &os, const etk::Vector2D<uint32_t> obj); etk::CCout& operator <<(etk::CCout &os, const etk::Vector2D<uint32_t>& obj);
etk::CCout& operator <<(etk::CCout &os, const etk::Vector2D<bool> obj); etk::CCout& operator <<(etk::CCout &os, const etk::Vector2D<bool>& obj);
}; };
// To siplify the writing of the code ==> this permit to have the same name with the glsl language... // To siplify the writing of the code ==> this permit to have the same name with the glsl language...