DBG: updated UString class (removed some usless stuff)
This commit is contained in:
		
							parent
							
								
									c79bc82292
								
							
						
					
					
						commit
						003150a4e5
					
				| 
						 | 
				
			
			@ -22,83 +22,6 @@
 | 
			
		|||
#include <errno.h>
 | 
			
		||||
#include "Exception.h"
 | 
			
		||||
 | 
			
		||||
void UTF8::String::ConvertFromDouble(const long double d, const UTF8::String & ThousandSeparator, const UTF8::String & FractionSeparator, const int IntegerPartLength, const int FractionPartLength)
 | 
			
		||||
{
 | 
			
		||||
    std::ostringstream os;
 | 
			
		||||
    os.precision(15);
 | 
			
		||||
    os << d;
 | 
			
		||||
 | 
			
		||||
    UTF8::String Number(os.str());
 | 
			
		||||
    UTF8::String Integer, Fraction;
 | 
			
		||||
 | 
			
		||||
    // Extracting integer and fraction
 | 
			
		||||
    std::vector <UTF8::String> Extracted = Number.Explode(".");
 | 
			
		||||
 | 
			
		||||
    unsigned int IntegerLength;
 | 
			
		||||
    if(IntegerPartLength)
 | 
			
		||||
    {
 | 
			
		||||
        IntegerLength = IntegerPartLength;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        IntegerLength = Extracted[0].Length();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    unsigned int FractionLength;
 | 
			
		||||
    if(FractionPartLength)
 | 
			
		||||
    {
 | 
			
		||||
        FractionLength = FractionPartLength;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        if(Extracted.size() > 1)
 | 
			
		||||
        {
 | 
			
		||||
            FractionLength = Extracted[1].Length();
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            FractionLength = 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Parsing integer
 | 
			
		||||
    for(unsigned int i = 0; i < IntegerLength; i++)
 | 
			
		||||
    {
 | 
			
		||||
        if((i > 0) && (i % 3 == 0))
 | 
			
		||||
        {
 | 
			
		||||
            Integer = ThousandSeparator + Integer;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if(Extracted[0].Length() < i + 1)
 | 
			
		||||
        {
 | 
			
		||||
            Integer = "0" + Integer;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            Integer = Extracted[0][Extracted[0].Length() - 1 - i] + Integer;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Parsing fraction
 | 
			
		||||
    if(FractionLength)
 | 
			
		||||
    {
 | 
			
		||||
        Fraction = FractionSeparator;
 | 
			
		||||
        for(unsigned int i = 0; i < FractionLength; i++)
 | 
			
		||||
        {
 | 
			
		||||
            if((Extracted.size() > 1) && (Extracted[1].Length() > i))
 | 
			
		||||
            {
 | 
			
		||||
                Fraction += Extracted[1][i];
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                Fraction += "0";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    * this = Integer + Fraction;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool UTF8::String::HasThisString(const UTF8::String & Str) const
 | 
			
		||||
{
 | 
			
		||||
    return GetSubstringPosition(Str) != -1;
 | 
			
		||||
| 
						 | 
				
			
			@ -227,7 +150,7 @@ bool operator!=(const std::string & str, const UTF8::String & StringObj)
 | 
			
		|||
 | 
			
		||||
UTF8::String UTF8::String::Quote() const
 | 
			
		||||
{
 | 
			
		||||
    return "«" + (*this) + "»";
 | 
			
		||||
    return "\"" + (*this) + "\"";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
UTF8::String UTF8::String::Trim() const
 | 
			
		||||
| 
						 | 
				
			
			@ -357,14 +280,6 @@ UTF8::String operator+(const std::string & str, const UTF8::String & StringObj)
 | 
			
		|||
    return s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
UTF8::String operator+(const long l, const UTF8::String & StringObj)
 | 
			
		||||
{
 | 
			
		||||
    UTF8::String s(l);
 | 
			
		||||
    s += StringObj;
 | 
			
		||||
 | 
			
		||||
    return s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
UTF8::String UTF8::String::operator+(const UTF8::String & s) const
 | 
			
		||||
{
 | 
			
		||||
    UTF8::String res(*this);
 | 
			
		||||
| 
						 | 
				
			
			@ -497,12 +412,6 @@ void UTF8::String::ConvertFromInt64(int64_t n)
 | 
			
		|||
    CalculateStringLength();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
UTF8::String::String(const long double d, const UTF8::String & ThousandSeparator, const UTF8::String & DecimalSeparator, const int IntegerPartCount, const int FractionPartCount)
 | 
			
		||||
{
 | 
			
		||||
    InitString();
 | 
			
		||||
    ConvertFromDouble(d, ThousandSeparator, DecimalSeparator, IntegerPartCount, FractionPartCount);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UTF8::String::InitString()
 | 
			
		||||
{
 | 
			
		||||
    Data = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -527,7 +436,7 @@ int UTF8::String::GetSymbolIndexInDataArray(unsigned int Position) const
 | 
			
		|||
{
 | 
			
		||||
    if(Position >= StringLength)
 | 
			
		||||
    {
 | 
			
		||||
        throw Exception((UTF8::String("[GetSymbolIndexInDataArray] trying to get position beyond the end of string. StringLength: ") + StringLength + " Position: " + Position + " String: [" + Data + "]").ToString());
 | 
			
		||||
        throw Exception(UTF8::String("[GetSymbolIndexInDataArray] trying to get position beyond the end of string."));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    unsigned int n = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -851,14 +760,6 @@ UTF8::String & UTF8::String::operator=(const uint32_t* str)
 | 
			
		|||
    return *this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
UTF8::String & UTF8::String::operator=(long double d)
 | 
			
		||||
{
 | 
			
		||||
    Empty();
 | 
			
		||||
    ConvertFromDouble(d);
 | 
			
		||||
 | 
			
		||||
    return *this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
UTF8::String::operator std::string() const
 | 
			
		||||
{
 | 
			
		||||
    return this->ToString();
 | 
			
		||||
| 
						 | 
				
			
			@ -885,86 +786,6 @@ std::string UTF8::String::ToString() const
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
double UTF8::String::ToDouble() const
 | 
			
		||||
{
 | 
			
		||||
    int64_t mul = 1;
 | 
			
		||||
    char c;
 | 
			
		||||
    int int_part = 0;
 | 
			
		||||
    double prec_part = 0;
 | 
			
		||||
 | 
			
		||||
    for(int i = DataArrayLength - 1; i >= 0; i--)
 | 
			
		||||
    {
 | 
			
		||||
        c = Data[i];
 | 
			
		||||
        if((c >= '0') && (c <= '9'))
 | 
			
		||||
        {
 | 
			
		||||
            int_part += (c - '0') * (int)mul;
 | 
			
		||||
            mul *= 10;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            if(c == '.')
 | 
			
		||||
            {
 | 
			
		||||
                prec_part = (double) int_part / (double) mul;
 | 
			
		||||
                int_part = 0;
 | 
			
		||||
                mul = 1;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if((c == '-') && (i == 0))
 | 
			
		||||
                {
 | 
			
		||||
                    int_part = -int_part;
 | 
			
		||||
                    prec_part = -prec_part;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    UTF8::String err = "Cannot convert \"" + * this + "\" to double.";
 | 
			
		||||
                    throw UTF8::Exception(err.ToConstCharPtr(), UTF8::Exception::StringToDoubleConversionError);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return int_part + prec_part;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int64_t UTF8::String::ToLong() const
 | 
			
		||||
{
 | 
			
		||||
    int64_t mul = 1;
 | 
			
		||||
    char c;
 | 
			
		||||
    int64_t number = 0;
 | 
			
		||||
 | 
			
		||||
    for(int i = DataArrayLength - 1; i >= 0; i--)
 | 
			
		||||
    {
 | 
			
		||||
        c = Data[i];
 | 
			
		||||
        if((c >= '0') && (c <= '9'))
 | 
			
		||||
        {
 | 
			
		||||
            number += (c - '0') * mul;
 | 
			
		||||
            mul *= 10;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            if(c == '.')
 | 
			
		||||
            {
 | 
			
		||||
                number = 0;
 | 
			
		||||
                mul = 1;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if((c == '-') && (i == 0))
 | 
			
		||||
                {
 | 
			
		||||
                    number = -number;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    UTF8::String err = "Cannot convert \"" + * this + "\" to number.";
 | 
			
		||||
                    throw UTF8::Exception(err.ToConstCharPtr(), UTF8::Exception::StringToIntConversionError);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
UTF8::String UTF8::String::operator+(const char* s) const
 | 
			
		||||
{
 | 
			
		||||
    UTF8::String res(*this);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,10 +64,8 @@ public:
 | 
			
		|||
    String(const String & orig);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Converting from long constructor. Automatically generates string from number.
 | 
			
		||||
     * Deconstructor.
 | 
			
		||||
     */
 | 
			
		||||
    String(const long double d, const UTF8::String & ThousandSeparator = "", const UTF8::String & FractionSeparator = ".", const int IntegerPartLength = 0, const int FractionPartLength = 0);
 | 
			
		||||
 | 
			
		||||
    ~String();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			@ -80,16 +78,6 @@ public:
 | 
			
		|||
     */
 | 
			
		||||
    static String FromFile(const UTF8::String & Path);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Converts UTF8::String to long
 | 
			
		||||
     */
 | 
			
		||||
    int64_t ToLong() const;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Converts UTF8::String to double
 | 
			
		||||
     */
 | 
			
		||||
    double ToDouble() const;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Converts UTF8::String to const char *
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			@ -141,11 +129,6 @@ public:
 | 
			
		|||
     */
 | 
			
		||||
    String & operator=(const uint32_t*);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Assign operator. Provides String1=(long double) expression.
 | 
			
		||||
     */
 | 
			
		||||
    String & operator=(long double);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Provides std::string test=String expression.
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			@ -282,7 +265,6 @@ private:
 | 
			
		|||
    int GetSymbolIndexInDataArray(unsigned int Position) const;
 | 
			
		||||
 | 
			
		||||
    void ConvertFromUTF32(const uint32_t*);
 | 
			
		||||
    void ConvertFromDouble(const long double d, const UTF8::String & ThousandSeparator = "", const UTF8::String & DecimalSeparator = ".", const int IntegerPartCount = 0, const int FractionPartCount = 0);
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -297,11 +279,6 @@ UTF8::String operator+(const char*, const UTF8::String &);
 | 
			
		|||
 */
 | 
			
		||||
UTF8::String operator+(const std::string &, const UTF8::String &);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Not in class overloaded operator +. Provides 123+String1 expression.
 | 
			
		||||
 */
 | 
			
		||||
UTF8::String operator+(long, const UTF8::String &);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Not in class overloaded operator ==. Provides "Test"==String1 expression.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
#include <windows.h>
 | 
			
		||||
 | 
			
		||||
//Functions taken from: http://www.nubaria.com/en/blog/?p=289
 | 
			
		||||
std::string ConvertUtf16ToUtf8(const std::wstring & wstr)
 | 
			
		||||
UString ConvertUtf16ToUtf8(const std::wstring & wstr)
 | 
			
		||||
{
 | 
			
		||||
    std::string convertedString;
 | 
			
		||||
    int requiredSize = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, 0, 0, 0, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ std::string ConvertUtf16ToUtf8(const std::wstring & wstr)
 | 
			
		|||
    return convertedString;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::wstring ConvertUtf8ToUtf16(const std::string & str)
 | 
			
		||||
std::wstring ConvertUtf8ToUtf16(const UString & str)
 | 
			
		||||
{
 | 
			
		||||
    std::wstring convertedString;
 | 
			
		||||
    int requiredSize = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, 0, 0);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,7 @@
 | 
			
		|||
 | 
			
		||||
typedef UTF8::String UString;
 | 
			
		||||
 | 
			
		||||
std::string ConvertUtf16ToUtf8(const std::wstring & wstr);
 | 
			
		||||
std::wstring ConvertUtf8ToUtf16(const std::string & str);
 | 
			
		||||
UString ConvertUtf16ToUtf8(const std::wstring & wstr);
 | 
			
		||||
std::wstring ConvertUtf8ToUtf16(const UString & str);
 | 
			
		||||
 | 
			
		||||
#endif // _USTRING_H
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue