[N_SE-33612] In Decode(), add code to check if str[0] is '+' or '-'
authordahyeong.kim <dahyeong.kim@samsung.com>
Mon, 15 Apr 2013 07:52:29 +0000 (16:52 +0900)
committerdahyeong.kim <dahyeong.kim@samsung.com>
Mon, 15 Apr 2013 08:21:30 +0000 (17:21 +0900)
Change-Id: I852f4674462538d534409551d6d20503de3cc79d
Signed-off-by: dahyeong.kim <dahyeong.kim@samsung.com>
inc/FBaseInt8.h
inc/FBaseString.h
src/base/FBaseInt8.cpp
src/base/FBaseInteger.cpp
src/base/FBaseLong.cpp
src/base/FBaseShort.cpp
src/base/FBaseString.cpp

index 7360927..9986875 100644 (file)
@@ -198,6 +198,13 @@ public:
         *      - Sign:
         *              '-'
         * @endcode
+        * @remarks             This method has portability issue. @n
+        *                              When the specified string is nagative number in the ARM architecture, type casting is needed like following code.
+        * @code
+        *      char ret;
+        *      Int8::Decode(L"-0X20", ret);
+        *      SomeOutputFunction(static_cast< signed char >(ret));
+        * @endcode
         */
        static result Decode(const String& s, char& ret);
 
index 10178ba..409a50a 100644 (file)
@@ -92,7 +92,7 @@ public:
         *
         * @param[in]   ch                      A Unicode character
         */
-       String(const wchar_t ch);
+       String(wchar_t ch);
 
        /**
         * Initializes this instance of %String with the specified Unicode string.
index 284df62..40dd62f 100644 (file)
@@ -109,7 +109,7 @@ Int8::Decode(const String& s, char& ret)
        wchar_t* pEnd = null;
        String str(s);
 
-       if (s[0] == L'-')
+       if (s[0] == L'-' || s[0] == L'+')
        {
                startIndex = 1;
                minLength = 3;
index 244374c..96563b2 100644 (file)
@@ -90,20 +90,28 @@ Integer::Decode(const String& s, int& ret)
                "[%s] The length of s MUST be greater than 0.", GetErrorMessage(E_NUM_FORMAT));
 
        int radix = 0;
+       int startIndex = 0;
+       int minLength = 2;
        wchar_t* pEnd = null;
        String str(s);
 
+       if (s[0] == L'-' || s[0] == L'+')
+       {
+               startIndex = 1;
+               minLength = 3;
+       }
+
        // Find radix
-       if (s[0] == L'#')
+       if (s[startIndex] == L'#')
        {
                radix = Character::RADIX_HEXADECIMAL;
 
                // Remove '#'
-               str.Remove(0, 1);
+               str.Remove(startIndex, 1);
        }
-       else if (s[0] == L'0' && (s.GetLength() >= 2))
+       else if (s[startIndex] == L'0' && (s.GetLength() >= minLength))
        {
-               if (s[1] == L'x' || s[1] == L'X')
+               if (s[startIndex + 1] == L'x' || s[startIndex + 1] == L'X')
                {
                        radix = Character::RADIX_HEXADECIMAL;
                }
index d349748..b6ed711 100644 (file)
@@ -101,20 +101,28 @@ Long::Decode(const String& s, long& ret)
                "[%s] The length of s MUST be greater than 0.", GetErrorMessage(E_NUM_FORMAT));
 
        int radix = 0;
+       int startIndex = 0;
+       int minLength = 2;
        wchar_t* pEnd = null;
        String str(s);
 
+       if (s[0] == L'-' || s[0] == L'+')
+       {
+               startIndex = 1;
+               minLength = 3;
+       }
+
        // Find radix
-       if (s[0] == L'#')
+       if (s[startIndex] == L'#')
        {
                radix = Character::RADIX_HEXADECIMAL;
 
                // Remove '#'
-               str.Remove(0, 1);
+               str.Remove(startIndex, 1);
        }
-       else if (s[0] == L'0' && (s.GetLength() >= 2))
+       else if (s[startIndex] == L'0' && (s.GetLength() >= minLength))
        {
-               if (s[1] == L'x' || s[1] == L'X')
+               if (s[startIndex + 1] == L'x' || s[startIndex + 1] == L'X')
                {
                        radix = Character::RADIX_HEXADECIMAL;
                }
index f40452c..18f8fa5 100644 (file)
@@ -108,20 +108,28 @@ Short::Decode(const String& s, short& ret)
 
        long value = 0;
        int radix = 0;
+       int startIndex = 0;
+       int minLength = 2;
        wchar_t* pEnd = null;
        String str(s);
 
+       if (s[0] == L'-' || s[0] == L'+')
+       {
+               startIndex = 1;
+               minLength = 3;
+       }
+
        // Find radix
-       if (s[0] == L'#')
+       if (s[startIndex] == L'#')
        {
                radix = Character::RADIX_HEXADECIMAL;
 
                // Remove '#'
-               str.Remove(0, 1);
+               str.Remove(startIndex, 1);
        }
-       else if (s[0] == L'0' && (s.GetLength() >= 2))
+       else if (s[startIndex] == L'0' && (s.GetLength() >= minLength))
        {
-               if (s[1] == L'x' || s[1] == L'X')
+               if (s[startIndex + 1] == L'x' || s[startIndex + 1] == L'X')
                {
                        radix = Character::RADIX_HEXADECIMAL;
                }
index dac9971..24dda81 100644 (file)
@@ -74,7 +74,7 @@ String::String(int capacity)
        SysTryReturnVoidResult(NID_BASE, r == E_SUCCESS, E_OUT_OF_MEMORY, "Memory allocation failed.");
 }
 
-String::String(const wchar_t ch)
+String::String(wchar_t ch)
        : __capacity(0)
        , __length(0)
        , __hash(0)