Merge "Modify Scanner class" into tizen_2.1
[platform/framework/native/appfw.git] / src / base / utility / FBaseUtil_ScannerImpl.cpp
index b0d19dc..87db23d 100644 (file)
@@ -23,7 +23,6 @@
 
 #define ANY_PATTERN L"\\s*[^\\s]*"
 #define DEFAULT_DELIMITER_PATTERN L"\\s*"
-//#define DEFAULT_LINE_SEPARATOR_PATTERN L".*(\r\n|[\u000A\n\r\u2028\u2029\u0085])|.+$"
 #define COMPLETE_LINE_PATTERN L".*(\r\n|[\u000A\n\r\u2028\u2029\u0085])|.+$"
 #define DEFAULT_LINE_SEPARATOR_PATTERN L"[\u000A\n\r\u2028\u2029\u0085]*"
 
@@ -172,26 +171,34 @@ result _ScannerImpl::GetNextToken(const RegularExpression& pattern, String& next
 result _ScannerImpl::GetNextToken(const String& pattern, String& nextStr)
 {
        result r = E_SUCCESS;
-       int length = 0;
+       int length1 = 0;
+       int length2 = 0;
 
        String str1;
        String str2;
        String anyPattern(ANY_PATTERN);
 
-       r = GetNextToken(anyPattern, str1, length);
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS || r == E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
-
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_DATA_NOT_FOUND, "The next token does not match to the pattern");
-
-       r = GetNextToken(pattern, str2, length);
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS || r == E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
+       while (true)
+       {
+               r = GetNextToken(anyPattern, str1, length1);
+               SysTryReturnResult(NID_BASE_UTIL, r != E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
+               SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_DATA_NOT_FOUND, "The next token does not match to the pattern");
 
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_DATA_NOT_FOUND, "The next token does not match to the pattern");
+               r = GetNextToken(pattern, str2, length2);
+               SysTryReturnResult(NID_BASE_UTIL, r != E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
+               SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_DATA_NOT_FOUND, "The next token does not match to the pattern");
 
-       if(str1 == str2)
-       {
-               nextStr = str1;
-               __position =  __position + length;
+               if(str1 == str2)
+               {
+                       nextStr = str1;
+                       __position =  __position + length2;
+                       break;
+               }
+               else
+               {
+                       nextStr = L"";
+                       __position = __position + length1;
+               }
        }
 
        return r;
@@ -211,13 +218,8 @@ result _ScannerImpl::GetNextSignedChar(signed char& nextSignedChar, int radix)
        String pattern(ANY_PATTERN);
 
        r = GetNextToken(pattern, out, length);
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS || r == E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
-
+       SysTryReturnResult(NID_BASE_UTIL, r != E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to signed char");
-/*     if(out.GetLength() > 1)
-       {
-               return E_OPERATION_FAILED;
-       }*/
 
        r = Int8::Parse(out, radix, ch);
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to signed char");
@@ -244,11 +246,6 @@ bool _ScannerImpl::IsNextTokenConvertibleToSignedChar(int radix)
        r = GetNextToken(pattern, out, length);
        SysTryReturn(NID_BASE_UTIL, r == E_SUCCESS, false, E_NUM_FORMAT, "[%s] Can not get the next token as signed char", GetErrorMessage(E_NUM_FORMAT));
 
-/*     if(out.GetLength() > 1)
-       {
-               return E_OPERATION_FAILED;
-       }*/
-
        r = Int8::Parse(out, radix, ch);
        SysTryReturn(NID_BASE_UTIL, r == E_SUCCESS, false, E_NUM_FORMAT, "[%s] Can not parse the token to signed char", GetErrorMessage(E_NUM_FORMAT));
 
@@ -268,8 +265,7 @@ result _ScannerImpl::GetNextInt(int& nextInt, int radix)
        String pattern(ANY_PATTERN);
 
        r = GetNextToken(pattern, out, length);
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS || r == E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
-
+       SysTryReturnResult(NID_BASE_UTIL, r != E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to integer");
 
        out.Replace(DEFAULT_GROUP_SEPARATOR, L"");
@@ -317,8 +313,7 @@ result _ScannerImpl::GetNextShort(short& nextShort, int radix)
        String pattern(ANY_PATTERN);
 
        r = GetNextToken(pattern, out, length);
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS || r == E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
-
+       SysTryReturnResult(NID_BASE_UTIL, r != E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to short");
 
        out.Replace(DEFAULT_GROUP_SEPARATOR, L"");
@@ -355,18 +350,22 @@ bool _ScannerImpl::IsNextTokenConvertibleToShort(int radix)
 
 result _ScannerImpl::GetNextLongLong(long long& nextLongLong)
 {
+       return GetNextLongLong(nextLongLong, __radix);
+}
+
+result _ScannerImpl::GetNextLongLong(long long& nextLongLong, int radix)
+{
        result r = E_SUCCESS;
        String out;
        int length = 0;
        String pattern(ANY_PATTERN);
 
        r = GetNextToken(pattern, out, length);
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS || r == E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
-
+       SysTryReturnResult(NID_BASE_UTIL, r != E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to long long");
 
        out.Replace(DEFAULT_GROUP_SEPARATOR, L"");
-       r = LongLong::Parse(out, nextLongLong);
+       r = LongLong::Parse(out, radix, nextLongLong);
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to long long");
 
        __position =  __position + length;
@@ -399,8 +398,7 @@ result _ScannerImpl::GetNextFloat(float& nextFloat)
        String pattern(ANY_PATTERN);
 
        r = GetNextToken(pattern, out, length);
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS || r == E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
-
+       SysTryReturnResult(NID_BASE_UTIL, r != E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to float");
 
        out.Replace(DEFAULT_GROUP_SEPARATOR, L"");
@@ -440,8 +438,7 @@ result _ScannerImpl::GetNextDouble(double& nextDouble)
        String pattern(ANY_PATTERN);
 
        r = GetNextToken(pattern, out, length);
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS || r == E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
-
+       SysTryReturnResult(NID_BASE_UTIL, r != E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to double");
 
        out.Replace(DEFAULT_GROUP_SEPARATOR, L"");
@@ -479,8 +476,7 @@ result _ScannerImpl::GetNextBool(bool& nextBool)
        String pattern(ANY_PATTERN);
 
        r = GetNextToken(pattern, out, length);
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS || r == E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
-
+       SysTryReturnResult(NID_BASE_UTIL, r != E_DATA_NOT_ENOUGH, E_DATA_NOT_ENOUGH, "Input has no remaining tokens");
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to bool");
 
        String temp;
@@ -719,8 +715,8 @@ void _ScannerImpl::SetRadix(int radix)
 result _ScannerImpl::GetNextToken(const String& pattern, String& ret, int& length)
 {
        result r = E_SUCCESS;
-       SysTryReturnResult(NID_BASE_UTIL, __pParseStr != null, E_DATA_NOT_ENOUGH, "Input has no remaining tokens.");
-       SysTryReturnResult(NID_BASE_UTIL, *__pParseStr != 0x0000, E_DATA_NOT_ENOUGH, "Input has no remaining tokens.");
+       SysTryReturnResult(NID_BASE_UTIL, __pParseStr + __position != null, E_DATA_NOT_ENOUGH, "Input has no remaining tokens.");
+       SysTryReturnResult(NID_BASE_UTIL, *(__pParseStr + __position) != 0x0000, E_DATA_NOT_ENOUGH, "Input has no remaining tokens.");
 
        RegularExpression regex;
        ArrayList matchedStrList;
@@ -816,7 +812,7 @@ result _ScannerImpl::GetNextMatchingString(const String& pattern, String& ret, i
                }
        }
 
-
        return r;
 }
+
 }}}   // Osp::Base::Utility