[2.2.1] Fix MemLeak and Apply beautifier in Scanner
authordahyeong.kim <dahyeong.kim@samsung.com>
Tue, 23 Jul 2013 05:15:15 +0000 (14:15 +0900)
committerdahyeong.kim <dahyeong.kim@samsung.com>
Tue, 23 Jul 2013 05:15:15 +0000 (14:15 +0900)
Change-Id: Id83da5199f162d2b9753ca8fe3923edac30b27cf
Signed-off-by: dahyeong.kim <dahyeong.kim@samsung.com>
src/base/utility/FBaseUtil_ScannerImpl.cpp
src/base/utility/FBaseUtil_ScannerImpl.h

index 794d4dd..852e9ab 100644 (file)
@@ -1,3 +1,24 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @File       :       FBaseUtil_ScannerImpl.cpp
+ * @brief      :       Implementation for _ScannerImpl Class
+ */
+
 #include <sys/stat.h>
 #include <stdio.h>
 #include <errno.h>
 
 #define ANY_PATTERN L"\\s*[^\\s]*"
 #define DEFAULT_DELIMITER_PATTERN L"\\s+"
-#define DEFAULT_DELIMITER_PATTERN_ZERO_OR_MORE L"\\s*"
 #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]*"
 
-
 #define DEFAULT_GROUP_SEPARATOR L","
 #define DEFAULT_DECIMAL_SEPARATOR L"."
 #define DEFAULT_NEGATIVE_PREFIX L"-"
@@ -39,37 +58,38 @@ using namespace Tizen::Base;
 namespace Tizen { namespace Base { namespace Utility
 {
 _ScannerImpl::_ScannerImpl(void)
-       :__radix(10),
-        __delimiter(DEFAULT_DELIMITER_PATTERN),
-        __pParseStr(null),
-        __isAllocatedOnHeap(false),
-        __position(0)
+       : __radix(10)
+       , __delimiter(DEFAULT_DELIMITER_PATTERN)
+       , __pParseStr(null)
+       , __isAllocatedOnHeap(false)
+       , __position(0)
 {
-
 }
 
 _ScannerImpl::~_ScannerImpl()
 {
-       if(__isAllocatedOnHeap == true)
+       if (__isAllocatedOnHeap)
        {
                delete[] __pParseStr;
                __pParseStr = null;
        }
 }
 
-result _ScannerImpl::Construct(const String& str)
+result
+_ScannerImpl::Construct(const String& str)
 {
        result r = E_SUCCESS;
        __pParseStr = str.GetPointer();
        return r;
 }
 
-result _ScannerImpl::Construct(const String& filePath, const String& encodingScheme)
+result
+_ScannerImpl::Construct(const String& filePath, const String& encodingScheme)
 {
        result r = E_SUCCESS;
        FILE* pFile = null;
        char* pFilePath = null;
-       bool res =  false;
+       bool res = false;
        _ICUConverter converter;
        struct stat st;
        off_t fileSize = 0;
@@ -86,15 +106,15 @@ result _ScannerImpl::Construct(const String& filePath, const String& encodingSch
 
        pFile = fopen(pFilePath, "r");
        SysTryCatch(NID_BASE_UTIL, pFile != null, r = E_FILE_NOT_FOUND, E_FILE_NOT_FOUND,
-                       "[%s] Failed to open the file.", GetErrorMessage(__ConvertNativeErrorToResult(errno)));
+               "[%s] Failed to open the file.", GetErrorMessage(__ConvertNativeErrorToResult(errno)));
 
        retVal = stat(pFilePath, &st);
        SysTryCatch(NID_BASE_UTIL, retVal == 0, r = E_IO, E_IO,
-                       "[%s] Failed to get information about the file.", GetErrorMessage(__ConvertNativeErrorToResult(errno)));
+               "[%s] Failed to get information about the file.", GetErrorMessage(__ConvertNativeErrorToResult(errno)));
 
        fileSize = st.st_size + 1;      // +1 for null-terminated string
 
-       buffer = static_cast<char*>(calloc(fileSize, sizeof(char)));
+       buffer = static_cast< char* >(calloc(fileSize, sizeof(char)));
        SysTryCatch(NID_BASE_UTIL, buffer != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]");
        readCnt = fread(buffer, 1, fileSize - 1, pFile);
 
@@ -105,17 +125,17 @@ result _ScannerImpl::Construct(const String& filePath, const String& encodingSch
        }
 
        __pParseStr = converter.ConvertToUcharN(buffer, fileSize);
-       SysTryCatch(NID_BASE_UTIL, __pParseStr != null, r = E_IO, E_IO , "[%s] charcater conversion failed.", GetErrorMessage(E_IO));
+       SysTryCatch(NID_BASE_UTIL, __pParseStr != null, r = E_IO, E_IO, "[%s] charcater conversion failed.", GetErrorMessage(E_IO));
        __isAllocatedOnHeap = true;
 
 CATCH:
        delete[] pFilePath;
        pFilePath = null;
 
-       delete[] buffer;
+       free(buffer);
        buffer = null;
 
-       if(pFile != null)
+       if (pFile != null)
        {
                fclose(pFile);
                pFile = null;
@@ -124,7 +144,8 @@ CATCH:
        return r;
 }
 
-bool _ScannerImpl::HasNextToken(void)
+bool
+_ScannerImpl::HasNextToken(void)
 {
        String token;
        int length = 0;
@@ -135,16 +156,18 @@ bool _ScannerImpl::HasNextToken(void)
        return true;
 }
 
-bool _ScannerImpl::HasNextToken(const RegularExpression& pattern)
+bool
+_ScannerImpl::HasNextToken(const RegularExpression& pattern)
 {
        String patStr(pattern.GetPattern());
        return HasNextToken(patStr);
 }
 
-bool _ScannerImpl::HasNextToken(const String& pattern)
+bool
+_ScannerImpl::HasNextToken(const String& pattern)
 {
        RegularExpression regex;
-       ArrayList matchedStrList;
+       ArrayList matchedStrList(SingleObjectDeleter);
        int length = 0;
        String out;
 
@@ -166,28 +189,31 @@ bool _ScannerImpl::HasNextToken(const String& pattern)
 }
 
 
-result _ScannerImpl::GetNextToken(String& nextStr)
+result
+_ScannerImpl::GetNextToken(String& nextStr)
 {
        int length = 0;
 
        result r = GetNextTokenWithoutPattern(nextStr, length);
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_DATA_NOT_ENOUGH, "Can not get the next token");
 
-       __position =  __position + length;
+       __position = __position + length;
 
        return r;
 }
 
-result _ScannerImpl::GetNextToken(const RegularExpression& pattern, String& nextStr)
+result
+_ScannerImpl::GetNextToken(const RegularExpression& pattern, String& nextStr)
 {
        String patStr(pattern.GetPattern());
        return GetNextToken(patStr, nextStr);
 }
 
-result _ScannerImpl::GetNextToken(const String& pattern, String& nextStr)
+result
+_ScannerImpl::GetNextToken(const String& pattern, String& nextStr)
 {
        RegularExpression regex;
-       ArrayList matchedStrList;
+       ArrayList matchedStrList(SingleObjectDeleter);
        int length = 0;
        String out;
 
@@ -206,16 +232,18 @@ result _ScannerImpl::GetNextToken(const String& pattern, String& nextStr)
        SysTryReturnResult(NID_BASE_UTIL, res, E_DATA_NOT_FOUND, "Match Failed");
 
        nextStr = out;
-       __position =  __position + length;
+       __position = __position + length;
        return E_SUCCESS;
 }
 
-result _ScannerImpl::GetNextSignedChar(signed char& nextSignedChar)
+result
+_ScannerImpl::GetNextSignedChar(signed char& nextSignedChar)
 {
        return GetNextSignedChar(nextSignedChar, __radix);
 }
 
-result _ScannerImpl::GetNextSignedChar(signed char& nextSignedChar, int radix)
+result
+_ScannerImpl::GetNextSignedChar(signed char& nextSignedChar, int radix)
 {
        String out;
        int length = 0;
@@ -228,18 +256,20 @@ result _ScannerImpl::GetNextSignedChar(signed char& nextSignedChar, int radix)
        r = Int8::Parse(out, radix, ch);
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to signed char");
 
-       nextSignedChar = static_cast<signed char>(ch);
-       __position =  __position + length;
+       nextSignedChar = static_cast< signed char >(ch);
+       __position = __position + length;
 
        return r;
 }
 
-bool _ScannerImpl::IsNextTokenConvertibleToSignedChar(void)
+bool
+_ScannerImpl::IsNextTokenConvertibleToSignedChar(void)
 {
        return IsNextTokenConvertibleToSignedChar(__radix);
 }
 
-bool _ScannerImpl::IsNextTokenConvertibleToSignedChar(int radix)
+bool
+_ScannerImpl::IsNextTokenConvertibleToSignedChar(int radix)
 {
        String out;
        int length = 0;
@@ -254,12 +284,14 @@ bool _ScannerImpl::IsNextTokenConvertibleToSignedChar(int radix)
        return true;
 }
 
-result _ScannerImpl::GetNextInt(int& nextInt)
+result
+_ScannerImpl::GetNextInt(int& nextInt)
 {
        return GetNextInt(nextInt, __radix);
 }
 
-result _ScannerImpl::GetNextInt(int& nextInt, int radix)
+result
+_ScannerImpl::GetNextInt(int& nextInt, int radix)
 {
        String out;
        int length = 0;
@@ -272,17 +304,19 @@ result _ScannerImpl::GetNextInt(int& nextInt, int radix)
        r = Integer::Parse(out, radix, nextInt);
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to integer");
 
-       __position =  __position + length;
+       __position = __position + length;
 
        return r;
 }
 
-bool _ScannerImpl::IsNextTokenConvertibleToInt(void)
+bool
+_ScannerImpl::IsNextTokenConvertibleToInt(void)
 {
        return IsNextTokenConvertibleToInt(__radix);
 }
 
-bool _ScannerImpl::IsNextTokenConvertibleToInt(int radix)
+bool
+_ScannerImpl::IsNextTokenConvertibleToInt(int radix)
 {
        String out;
        int val = 0;
@@ -298,12 +332,14 @@ bool _ScannerImpl::IsNextTokenConvertibleToInt(int radix)
        return true;
 }
 
-result _ScannerImpl::GetNextShort(short& nextShort)
+result
+_ScannerImpl::GetNextShort(short& nextShort)
 {
        return GetNextShort(nextShort, __radix);
 }
 
-result _ScannerImpl::GetNextShort(short& nextShort, int radix)
+result
+_ScannerImpl::GetNextShort(short& nextShort, int radix)
 {
        String out;
        int length = 0;
@@ -316,17 +352,19 @@ result _ScannerImpl::GetNextShort(short& nextShort, int radix)
        r = Short::Parse(out, radix, nextShort);
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to short");
 
-       __position =  __position + length;
+       __position = __position + length;
 
        return r;
 }
 
-bool _ScannerImpl::IsNextTokenConvertibleToShort(void)
+bool
+_ScannerImpl::IsNextTokenConvertibleToShort(void)
 {
        return IsNextTokenConvertibleToShort(__radix);
 }
 
-bool _ScannerImpl::IsNextTokenConvertibleToShort(int radix)
+bool
+_ScannerImpl::IsNextTokenConvertibleToShort(int radix)
 {
        String out;
        short val = 0;
@@ -342,12 +380,14 @@ bool _ScannerImpl::IsNextTokenConvertibleToShort(int radix)
        return true;
 }
 
-result _ScannerImpl::GetNextLongLong(long long& nextLongLong)
+result
+_ScannerImpl::GetNextLongLong(long long& nextLongLong)
 {
        return GetNextLongLong(nextLongLong, __radix);
 }
 
-result _ScannerImpl::GetNextLongLong(long long& nextLongLong, int radix)
+result
+_ScannerImpl::GetNextLongLong(long long& nextLongLong, int radix)
 {
        String out;
        int length = 0;
@@ -360,12 +400,13 @@ result _ScannerImpl::GetNextLongLong(long long& nextLongLong, int radix)
        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;
+       __position = __position + length;
 
        return r;
 }
 
-bool _ScannerImpl::IsNextTokenConvertibleToLongLong(void)
+bool
+_ScannerImpl::IsNextTokenConvertibleToLongLong(void)
 {
        String out;
        long long val = 0;
@@ -380,7 +421,8 @@ bool _ScannerImpl::IsNextTokenConvertibleToLongLong(void)
        return true;
 }
 
-result _ScannerImpl::GetNextFloat(float& nextFloat)
+result
+_ScannerImpl::GetNextFloat(float& nextFloat)
 {
        String out;
        int length = 0;
@@ -393,13 +435,14 @@ result _ScannerImpl::GetNextFloat(float& nextFloat)
        r = Float::Parse(out, nextFloat);
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to float");
 
-       __position =  __position + length;
+       __position = __position + length;
 
        return r;
 }
 
 
-bool _ScannerImpl::IsNextTokenConvertibleToFloat(void)
+bool
+_ScannerImpl::IsNextTokenConvertibleToFloat(void)
 {
        String out;
        RegularExpression re;
@@ -416,7 +459,8 @@ bool _ScannerImpl::IsNextTokenConvertibleToFloat(void)
        return true;
 }
 
-result _ScannerImpl::GetNextDouble(double& nextDouble)
+result
+_ScannerImpl::GetNextDouble(double& nextDouble)
 {
        String out;
        int length = 0;
@@ -429,12 +473,13 @@ result _ScannerImpl::GetNextDouble(double& nextDouble)
        r = Double::Parse(out, nextDouble);
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not parse the token to double");
 
-       __position =  __position + length;
+       __position = __position + length;
 
        return r;
 }
 
-bool _ScannerImpl::IsNextTokenConvertibleToDouble(void)
+bool
+_ScannerImpl::IsNextTokenConvertibleToDouble(void)
 {
        String out;
        double val = 0.0f;
@@ -450,7 +495,8 @@ bool _ScannerImpl::IsNextTokenConvertibleToDouble(void)
        return true;
 }
 
-result _ScannerImpl::GetNextBool(bool& nextBool)
+result
+_ScannerImpl::GetNextBool(bool& nextBool)
 {
        String out;
        int length = 0;
@@ -463,25 +509,26 @@ result _ScannerImpl::GetNextBool(bool& nextBool)
        r = out.ToUpper(temp);
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_NUM_FORMAT, "Can not get next bool");
 
-       if(!temp.CompareTo(L"TRUE"))
+       if (!temp.CompareTo(L"TRUE"))
        {
                nextBool = true;
-               __position =  __position + length;
+               __position = __position + length;
        }
-       else if(!temp.CompareTo(L"FALSE"))
+       else if (!temp.CompareTo(L"FALSE"))
        {
                nextBool = false;
-               __position =  __position + length;
+               __position = __position + length;
        }
        else
        {
-               r =  E_NUM_FORMAT;
+               r = E_NUM_FORMAT;
        }
 
        return r;
 }
 
-bool _ScannerImpl::IsNextTokenConvertibleToBool(void)
+bool
+_ScannerImpl::IsNextTokenConvertibleToBool(void)
 {
        String out;
        int length = 0;
@@ -494,11 +541,12 @@ bool _ScannerImpl::IsNextTokenConvertibleToBool(void)
        return ((!temp.CompareTo(L"TRUE")) || (!temp.CompareTo(L"FALSE")));
 }
 
-bool _ScannerImpl::HasNextLine(void)
+bool
+_ScannerImpl::HasNextLine(void)
 {
        String pattern(DEFAULT_LINE_SEPARATOR_PATTERN);
        RegularExpression regex;
-       ArrayList matchedStrList;
+       ArrayList matchedStrList(SingleObjectDeleter);
 
        result r = regex.Construct(pattern, REGEX_UNICODE);
        SysTryReturn(NID_BASE_UTIL, r == E_SUCCESS, false, E_DATA_NOT_ENOUGH, "[%s] Regular expression construction failed", GetErrorMessage(E_DATA_NOT_ENOUGH));
@@ -513,11 +561,12 @@ bool _ScannerImpl::HasNextLine(void)
 }
 
 
-result _ScannerImpl::GetNextLine(String& nextLine)
+result
+_ScannerImpl::GetNextLine(String& nextLine)
 {
        String pattern(COMPLETE_LINE_PATTERN);
        RegularExpression regex;
-       ArrayList matchedStrList;
+       ArrayList matchedStrList(SingleObjectDeleter);
 
        result r = regex.Construct(pattern, REGEX_UNICODE);
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_DATA_NOT_ENOUGH, "Regular expression construction failed");
@@ -529,24 +578,24 @@ result _ScannerImpl::GetNextLine(String& nextLine)
        SysTryReturnResult(NID_BASE_UTIL, res == true, E_DATA_NOT_ENOUGH, "Match Failed");
 
        int matches = matchedStrList.GetCount();
-       SysTryReturnResult(NID_BASE_UTIL,matches > 0, E_DATA_NOT_FOUND, "Match Failed");
-       
-       String temp = *(String *)matchedStrList.GetAt(0);
+       SysTryReturnResult(NID_BASE_UTIL, matches > 0, E_DATA_NOT_FOUND, "Match Failed");
+
+       String temp = *(String*) matchedStrList.GetAt(0);
        __position = __position + temp.GetLength();
 
        RegularExpression re;
        r = re.Construct(DEFAULT_LINE_SEPARATOR_PATTERN, REGEX_UNICODE);
        re.Replace(temp, L"", true);
        nextLine = temp;
-       matchedStrList.RemoveAll();
 
        return E_SUCCESS;
 }
 
-result _ScannerImpl::FindInLine(const String& str, String& MatchedStr)
+result
+_ScannerImpl::FindInLine(const String& str, String& MatchedStr)
 {
        _RegularExpressionImpl regex;
-       ArrayList matchedStrList;
+       ArrayList matchedStrList(SingleObjectDeleter);
 
        result r = regex.Construct(str, REGEX_UNICODE);
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_DATA_NOT_FOUND, "Regular expression construction failed");
@@ -558,30 +607,31 @@ result _ScannerImpl::FindInLine(const String& str, String& MatchedStr)
        SysTryReturnResult(NID_BASE_UTIL, res == true, E_DATA_NOT_FOUND, "Match Failed");
 
        int matches = matchedStrList.GetCount();
-       SysTryReturnResult(NID_BASE_UTIL,matches > 0, E_DATA_NOT_FOUND, "Match Failed");
+       SysTryReturnResult(NID_BASE_UTIL, matches > 0, E_DATA_NOT_FOUND, "Match Failed");
 
-       MatchedStr = *(String *)matchedStrList.GetAt(0);
+       MatchedStr = *(String*) matchedStrList.GetAt(0);
        int matchEnd = regex.GetLastMatchEnd();
        __position = __position + matchEnd;
-       matchedStrList.RemoveAll();
 
        return E_SUCCESS;
 }
 
-result _ScannerImpl::FindInLine(const RegularExpression& pattern, String& MatchedStr)
+result
+_ScannerImpl::FindInLine(const RegularExpression& pattern, String& MatchedStr)
 {
        String patStr(pattern.GetPattern());
        return FindInLine(patStr, MatchedStr);
 }
 
-void _ScannerImpl::Skip(const String& str)
+void
+_ScannerImpl::Skip(const String& str)
 {
        RegularExpression regex;
-       ArrayList matchedStrList;
+       ArrayList matchedStrList(SingleObjectDeleter);
        String inputStr(__pParseStr + __position);
 
        result r = regex.Construct(str, REGEX_UNICODE);
-       SysTryReturnVoidResult(NID_BASE_UTIL, r == E_SUCCESS, r,"Regular expression construction failed");
+       SysTryReturnVoidResult(NID_BASE_UTIL, r == E_SUCCESS, r, "Regular expression construction failed");
 
        r = matchedStrList.Construct();
        SysTryReturnVoidResult(NID_BASE_UTIL, r == E_SUCCESS, r, "ArrayList construction failed");
@@ -590,7 +640,7 @@ void _ScannerImpl::Skip(const String& str)
        SysTryReturnVoidResult(NID_BASE_UTIL, res == true, E_SYSTEM, "Regular expression match failed");
 
        int matches = matchedStrList.GetCount();
-       SysTryReturnVoidResult(NID_BASE_UTIL, matches > 0, E_SYSTEM,"Regular expression construction failed");
+       SysTryReturnVoidResult(NID_BASE_UTIL, matches > 0, E_SYSTEM, "Regular expression construction failed");
 
        String skipToken = *(dynamic_cast< String* >(matchedStrList.GetAt(0)));
        int length = skipToken.GetLength();
@@ -602,7 +652,7 @@ void _ScannerImpl::Skip(const String& str)
        {
                if (*wstr1++ != *wstr2++)
                {
-                       isSame =  false;
+                       isSame = false;
                        break;
                }
        }
@@ -610,77 +660,61 @@ void _ScannerImpl::Skip(const String& str)
        {
                __position = __position + length;
        }
-       matchedStrList.RemoveAll();
-
-       //Skip if there is any delimiters before the next token
-       RegularExpression re;
-       if (__delimiter == DEFAULT_DELIMITER_PATTERN)
-       {
-               r = re.Construct(DEFAULT_DELIMITER_PATTERN_ZERO_OR_MORE, REGEX_UNICODE);
-       }
-       else
-       {
-               r = re.Construct(__delimiter, REGEX_UNICODE);
-       }
-
-       res = re.Match(String(__pParseStr + __position), false, &matchedStrList);
-       matches = matchedStrList.GetCount();
-       if (matches > 0)
-       {
-               String temp = *(dynamic_cast< String* >(matchedStrList.GetAt(0)));
-               int length = temp.GetLength();
-               __position = __position + length;
-               matchedStrList.RemoveAll();
-       }
-
 }
 
-void _ScannerImpl::Skip(const RegularExpression& pattern)
+void
+_ScannerImpl::Skip(const RegularExpression& pattern)
 {
        String patStr(pattern.GetPattern());
        return Skip(patStr);
 }
 
-int _ScannerImpl::GetRadix(void)
+int
+_ScannerImpl::GetRadix(void)
 {
        return __radix;
 }
 
-String _ScannerImpl::GetDelimiter(void)
+String
+_ScannerImpl::GetDelimiter(void)
 {
        return __delimiter;
 }
 
-void _ScannerImpl::SetDelimiter(const String& delimiter)
+void
+_ScannerImpl::SetDelimiter(const String& delimiter)
 {
        __delimiter = delimiter;
 }
 
-void _ScannerImpl::SetDelimiter(const RegularExpression& pattern)
+void
+_ScannerImpl::SetDelimiter(const RegularExpression& pattern)
 {
        __delimiter = pattern.GetPattern();
 }
 
-void _ScannerImpl::SetRadix(int radix)
+void
+_ScannerImpl::SetRadix(int radix)
 {
-       if(((radix == Character::RADIX_BINARY) || (radix == Character::RADIX_OCTAL) ||
-               (radix == Character::RADIX_DECIMAL) || (radix == Character::RADIX_HEXADECIMAL)))
+       if (((radix == Character::RADIX_BINARY) || (radix == Character::RADIX_OCTAL) ||
+                (radix == Character::RADIX_DECIMAL) || (radix == Character::RADIX_HEXADECIMAL)))
        {
                __radix = radix;
        }
 }
 
 
-result _ScannerImpl::GetNextTokenWithoutPattern(String& ret, int& length)
+result
+_ScannerImpl::GetNextTokenWithoutPattern(String& ret, int& length)
 {
        SysTryReturnResult(NID_BASE_UTIL, ((__pParseStr + __position) != null) && ((*(__pParseStr + __position) != 0x0000)),
-                       E_DATA_NOT_ENOUGH, "Input has no remaining tokens.");
+               E_DATA_NOT_ENOUGH, "Input has no remaining tokens.");
 
        RegularExpression regDelim;
        result r = regDelim.Construct(__delimiter, REGEX_UNICODE);
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_DATA_NOT_FOUND, "Regular expression construction failed");
 
-       ArrayList matchedStrList;
+       ArrayList matchedStrList(SingleObjectDeleter);
        r = matchedStrList.Construct();
        SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_DATA_NOT_FOUND, "Arraylist construction failed");
 
@@ -688,6 +722,7 @@ result _ScannerImpl::GetNextTokenWithoutPattern(String& ret, int& length)
        bool res = regDelim.Match(inputStr, false, &matchedStrList);
 
        int matches = matchedStrList.GetCount();
+
        if (matches > 0)
        {
                String delimiter1 = *(dynamic_cast< String* >(matchedStrList.GetAt(0)));
@@ -695,67 +730,58 @@ result _ScannerImpl::GetNextTokenWithoutPattern(String& ret, int& length)
                if (!delimiter1.IsEmpty())      // 1st delimiter is not empty
                {
                        int delimLength1 = delimiter1.GetLength();
-                       int index1 = 0;
-                       inputStr.IndexOf(delimiter1, 0, index1);
+                       int delim1Index = 0;
+                       inputStr.IndexOf(delimiter1, 0, delim1Index);
 
+                       if (delim1Index > 0) // Delimiter1 appears after the token i.e followed by token
+                       {
+                               inputStr.SubString(0, delim1Index, ret);        // Extract the string in between first and second delimiter
+                               length += delim1Index;
+                               return E_SUCCESS;
+                       }
                        // When the delimiter exists in first position, find the 2nd delimiter
-                       if ((index1 == 0) && (__position == 0))
+                       length += delimLength1;
+                       String tmpStr(__pParseStr + __position + length);
+                       SysTryReturnResult(NID_BASE_UTIL, tmpStr != null, E_DATA_NOT_FOUND, "There are no more tokens in input string");
+
+                       matchedStrList.RemoveAll();
+                       res = regDelim.Match(tmpStr, false, &matchedStrList);
+                       matches = matchedStrList.GetCount();
+                       if (matches > 0)
                        {
-                               length += delimLength1;
-                               String tmpStr(__pParseStr + length);
-
-                               matchedStrList.RemoveAll();
-                               res = regDelim.Match(tmpStr, false, &matchedStrList);
-                               matches = matchedStrList.GetCount();
-                               if (matches > 0)
+                               String delimiter2 = *(dynamic_cast< String* >(matchedStrList.GetAt(0)));
+                               // If the 2nd delimiter is empty, the token will be one character followed by 1st delimiter.
+                               if (delimiter2.IsEmpty())
+                               {
+                                       ret.Clear();
+                                       ret.Append(*(__pParseStr + __position + length));
+                                       length += 1;
+                               }
+                               else
                                {
-                                       String delimiter2 = *(dynamic_cast< String* >(matchedStrList.GetAt(0)));
-
-                                       // If the 2nd delimiter is empty, the token will be one character followed by 1st delimiter.
-                                       if (delimiter2.IsEmpty())
-                                       {
-                                               ret.Clear();
-                                               ret.Append(*(__pParseStr + length));
-                                               length += 1;
-                                               // Though 2nd delimiter is empty, if 3rd non-empty delimiter exists right after the token, length to be moved should be added by 3rd delimiter.
-                                               matchedStrList.RemoveAll();
-                                               String tmpStr1(__pParseStr + length);
-                                               res = regDelim.Match(tmpStr1, false, &matchedStrList);
-                                               matches = matchedStrList.GetCount();
-                                               SysTryReturnResult(NID_BASE_UTIL, matches > 0, E_SUCCESS, "It's a last token.");
-
-                                               String delimiter3 = *(dynamic_cast< String* >(matchedStrList.GetAt(0)));
-                                               int index3 = 0;
-                                               tmpStr1.IndexOf(delimiter3, 0, index3);
-                                               if (!delimiter3.IsEmpty() && index3 == 0)
-                                               {
-                                                       length += delimiter3.GetLength();
-                                               }
-                                       }
-                                       else
-                                       {
-                                               int delimLength2 = delimiter2.GetLength();
-                                               int index2 = 0;
-                                               tmpStr.IndexOf(delimiter2, 0, index2);
-                                               tmpStr.SubString(0, index2, ret);       // Extract the string in between first and second delimiter
-                                               length += index2 + delimLength2;
-                                       }
+                                       int index2 = 0;
+                                       tmpStr.IndexOf(delimiter2, 0, index2);
+                                       tmpStr.SubString(0, index2, ret);       // Extract the string in between first and second delimiter
+                                       length += index2;
                                }
                        }
-                       else
+                       else // There are no second delimiters
                        {
-                               inputStr.SubString(0, index1, ret);
-                               length = index1 + delimLength1;
+                               ret.Clear();
+                               ret.Append(__pParseStr + __position + length);
+                               length += ret.GetLength();
+                               SysTryReturnResult(NID_BASE_UTIL, length > 0, E_DATA_NOT_FOUND, "There are no more tokens in input string");
                        }
+
                }
                else    // 1st delimiter is empty
                {
-                       // Find 2nd delimiter from "__pParseStr + __position + 1"
-                       String tmpStr(__pParseStr + __position + 1);
+                       // Find 2nd delimiter from "__pParseStr + __position + length + 1"
+                       String tmpStr(__pParseStr + __position + length + 1);
                        if (tmpStr == null)     // When InputStr is last token, extract the token.
                        {
                                ret.Clear();
-                               ret.Append(__pParseStr + __position);
+                               ret.Append(__pParseStr + __position + length);
                                length = ret.GetLength();
                        }
                        else
@@ -763,23 +789,21 @@ result _ScannerImpl::GetNextTokenWithoutPattern(String& ret, int& length)
                                matchedStrList.RemoveAll();
                                res = regDelim.Match(tmpStr, false, &matchedStrList);
                                matches = matchedStrList.GetCount();
-                               if (matches > 0)
+                               SysTryReturnResult(NID_BASE_UTIL, matches > 0, E_DATA_NOT_FOUND, "There are no more tokens in input string");
+
+                               String delimiter2 = *(dynamic_cast< String* >(matchedStrList.GetAt(0)));
+                               if (delimiter2.IsEmpty())       // If the 2nd delimiter is also empty, the token will be one character followed by 1st delimiter.
+                               {
+                                       ret.Clear();
+                                       ret.Append(*(__pParseStr + __position));
+                                       length = 1;
+                               }
+                               else
                                {
-                                       String delimiter2 = *(dynamic_cast< String* >(matchedStrList.GetAt(0)));
-                                       if (delimiter2.IsEmpty())       // If the 2nd delimiter is also empty, the token will be one character followed by 1st delimiter.
-                                       {
-                                               ret.Clear();
-                                               ret.Append(*(__pParseStr + __position));
-                                               length = 1;
-                                       }
-                                       else
-                                       {
-                                               int delimLength2 = delimiter2.GetLength();
-                                               int index2 = 0;
-                                               inputStr.IndexOf(delimiter2, 0, index2);
-                                               inputStr.SubString(0, index2, ret);
-                                               length = index2 + delimLength2;
-                                       }
+                                       int index2 = 0;
+                                       inputStr.IndexOf(delimiter2, 0, index2);
+                                       inputStr.SubString(0, index2, ret);
+                                       length = index2;
                                }
                        }
                }
@@ -789,78 +813,9 @@ result _ScannerImpl::GetNextTokenWithoutPattern(String& ret, int& length)
                ret.Clear();
                ret.Append(__pParseStr + __position);
                length = ret.GetLength();
-               if (length <= 0)
-               {
-                       return E_DATA_NOT_FOUND;
-               }
-       }
-
-       return r;
-}
-
-result _ScannerImpl::GetNextMatchingString(const String& pattern, String& ret, int& length)
-{
-       result r = E_SUCCESS;
-       RegularExpression regex;
-       ArrayList matchedStrList;
-
-       bool res = false;
-       int matches = 0;
-       String nextToken;
-       String matchToken;
-
-       String strPat(ANY_PATTERN);
-       strPat.Append(DEFAULT_DELIMITER_PATTERN);
-
-       r = regex.Construct(strPat, REGEX_UNICODE);
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_OPERATION_FAILED, "Regular expression construction failed");
-
-       r = matchedStrList.Construct();
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_OPERATION_FAILED, "Arraylist construction failed");
-
-       res = regex.Match(String(__pParseStr + __position), false, &matchedStrList);
-
-       SysTryReturnResult(NID_BASE_UTIL, res == true, E_OPERATION_FAILED, "Match Failed");
-
-       matches = matchedStrList.GetCount();
-       if(matches > 0)
-       {
-               nextToken = *(String *)matchedStrList.GetAt(0);
-               matchedStrList.RemoveAll();
-       }
-
-       strPat = pattern;
-       strPat.Append(DEFAULT_DELIMITER_PATTERN);
-       r = regex.Construct(strPat, REGEX_UNICODE);
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_OPERATION_FAILED, "Regular expression construction failed");
-
-       r = matchedStrList.Construct();
-       SysTryReturnResult(NID_BASE_UTIL, r == E_SUCCESS, E_OPERATION_FAILED, "Arraylist construction failed");
-
-       res = regex.Match(String(__pParseStr + __position), false, &matchedStrList);
-       SysTryReturnResult(NID_BASE_UTIL, res == true, E_OPERATION_FAILED, "Match Failed");
-
-       matches = matchedStrList.GetCount();
-       if(matches > 0)
-       {
-               matchToken = *(String *)matchedStrList.GetAt(0);
-               matchedStrList.RemoveAll();
-
-               if((nextToken == matchToken) == true)
-               {
-                       length = matchToken.GetLength();
-                       RegularExpression re;
-                       r = re.Construct(DEFAULT_DELIMITER_PATTERN, REGEX_UNICODE);
-                       re.Replace(matchToken, L"", true);
-                       ret = matchToken;
-               }
-               else
-               {
-                       r = E_OPERATION_FAILED;
-               }
+               SysTryReturnResult(NID_BASE_UTIL, length > 0, E_DATA_NOT_FOUND, "There are no more tokens in input string");
        }
 
        return r;
 }
-
-}}}   // Osp::Base::Utility
+}}}   // Tizen::Base::Utility
index 1820888..f10ece0 100644 (file)
@@ -18,7 +18,7 @@
  * @file       FBaseUtil_ScannerImpl.h
  * @brief      This is the header file for the _ScannerImpl class.
  *
- * This header file contains declarations and definitions of the _ScannerImpl class. 
+ * This header file contains declarations and definitions of the _ScannerImpl class.
  *
  */
 
@@ -43,9 +43,9 @@ public:
        result Construct(const String& str);
        result Construct(const String& filePath, const String& encodingScheme);
 
-       result FindInLine(const String& str, String& MatchedStr); 
-       result FindInLine(const RegularExpression& pattern, String& MatchedStr); 
-       
+       result FindInLine(const String& str, String& MatchedStr);
+       result FindInLine(const RegularExpression& pattern, String& MatchedStr);
+
        result GetNextSignedChar(signed char& nextSignedChar);
        result GetNextSignedChar(signed char& nextSignedChar, int radix);
        result GetNextInt(int& nextInt);
@@ -68,7 +68,7 @@ public:
        bool HasNextToken(void);
        bool HasNextToken(const String& pattern);
        bool HasNextToken(const RegularExpression& pattern);
-       bool IsNextTokenConvertibleToSignedChar(void); 
+       bool IsNextTokenConvertibleToSignedChar(void);
        bool IsNextTokenConvertibleToSignedChar(int radix);
        bool IsNextTokenConvertibleToInt(void);
        bool IsNextTokenConvertibleToInt(int radix);
@@ -86,10 +86,8 @@ public:
 
        void Skip(const String& str);
        void Skip(const RegularExpression& pattern);
-       result GetNextToken(const String& pattern, String& ret, int& matTokenLen);
-       result GetNextMatchingString(const String& pattern, String& ret, int& length);
 
-private :
+private:
        result GetNextTokenWithoutPattern(String& ret, int& length);
 
 public:
@@ -100,8 +98,8 @@ public:
        int __position;
 
        friend class Scanner;
-}; // _ScannerImpl
+};     // _ScannerImpl
 
-}}}   // Osp::Base::Utility
+}}}    // Tizen::Base::Utility
 
 #endif // _FBASE_UTIL_SCANNER_IMPL_H_