Merge "Modify Scanner class" into tizen_2.1
authorDahyeong Kim <dahyeong.kim@tizendev.org>
Wed, 24 Apr 2013 09:05:26 +0000 (18:05 +0900)
committerGerrit Code Review <gerrit2@kim11>
Wed, 24 Apr 2013 09:05:26 +0000 (18:05 +0900)
inc/FBaseUtilScanner.h
src/base/utility/FBaseUtilScanner.cpp
src/base/utility/FBaseUtil_ScannerImpl.cpp
src/base/utility/FBaseUtil_ScannerImpl.h

index 05bfba9..11b25f4 100644 (file)
@@ -52,20 +52,20 @@ namespace Tizen { namespace Base { namespace Utility
  *
  *     ret = scan.IsNextTokenConvertibleToSignedChar();        //ret true
  *     signed char val;
- *  scan.GetNextSignedChar(val);       //val 1
+ *     scan.GetNextSignedChar(val);    //val 1
  *
  *     ret = scan.IsNextTokenConvertibleToShort(10);   //ret true
  *     short shortVal;
- *  scan.GetNextShort(shortVal);       //shortVal 12
+ *     scan.GetNextShort(shortVal);    //shortVal 12
  *
  *     ret = scan.IsNextTokenConvertibleToInt(10);     //ret false
  *     ret = scan.IsNextTokenConvertibleToFloat();     //ret true
  *     float floatVal;
- *  scan.GetNextFloat(floatVal);       //floatVal 34.5
+ *     scan.GetNextFloat(floatVal);    //floatVal 34.5
  *
  *     ret = scan.IsNextTokenConvertibleToInt(16);     //ret true
  *     int intVal;
- *  scan.GetNextInt(intVal, 16);       //intVal 88
+ *     scan.GetNextInt(intVal, 16);    //intVal 88
  *
  *     ret = scan.IsNextTokenConvertibleToBool();      //ret true
  *     scan.GetNextBool(ret);  //ret false
index 900f453..1dcfd5e 100644 (file)
@@ -33,7 +33,7 @@ result Scanner::Construct(const String& inputStr)
 {
        result r = E_SUCCESS;
        SysAssertf(__pScannerImpl == null, "Already constructed! Calling Construct() twice or more on a same instance is not allowed for this class.");
-       SysTryReturnResult(NID_BASE_UTIL, !inputStr.IsEmpty(), E_INVALID_ARG, "[E_INVALID_ARG] The length of the input data is zero.");
+       SysTryReturnResult(NID_BASE_UTIL, !inputStr.IsEmpty(), E_INVALID_ARG, "[%s] The length of the input data is zero.", GetErrorMessage(E_INVALID_ARG));
        __pScannerImpl = new (std::nothrow) _ScannerImpl();
        SysTryReturnResult(NID_BASE_UTIL, __pScannerImpl != null, E_OUT_OF_MEMORY, "Memory allocation failed");
 
@@ -45,11 +45,11 @@ result Scanner::Construct(const String& inputFilePath, const String& encodingSch
 {
        result r = E_SUCCESS;
        SysAssertf(__pScannerImpl == null, "Already constructed! Calling Construct() twice or more on a same instance is not allowed for this class.");
-       SysTryReturn(NID_BASE_UTIL, !inputFilePath.IsEmpty(), r = E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The length of the file name is zero.");
-       SysTryReturn(NID_BASE_UTIL, !encodingScheme.IsEmpty(), r = E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The length of the encoding scheme is zero.");
+       SysTryReturn(NID_BASE_UTIL, !inputFilePath.IsEmpty(), r = E_INVALID_ARG, E_INVALID_ARG, "[%s] The length of the file name is zero.", GetErrorMessage(E_INVALID_ARG));
+       SysTryReturn(NID_BASE_UTIL, !encodingScheme.IsEmpty(), r = E_INVALID_ARG, E_INVALID_ARG, "[%s] The length of the encoding scheme is zero.", GetErrorMessage(E_INVALID_ARG));
 
        __pScannerImpl = new (std::nothrow) _ScannerImpl();
-       SysTryReturnResult(NID_BASE_UTIL, __pScannerImpl != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed");
+       SysTryReturnResult(NID_BASE_UTIL, __pScannerImpl != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed", GetErrorMessage(E_OUT_OF_MEMORY));
 
        r = __pScannerImpl->Construct(inputFilePath, encodingScheme);
        return r;
@@ -102,8 +102,8 @@ result Scanner::GetNextSignedChar(signed char& nextSignedChar, int radix) const
 {
        SysAssertf(__pScannerImpl != null, "Not yet constructed! Construct() should be called before use.");
        SysTryReturnResult(NID_BASE_UTIL, ((radix == Character::RADIX_BINARY) || (radix == Character::RADIX_OCTAL) || (radix == Character::RADIX_DECIMAL) ||
-                               (radix == Character::RADIX_HEXADECIMAL)),E_NUM_FORMAT,
-                               "[E_NUM_FORMAT] The radix(%d) MUST be one of 2, 8, 10 and 16.", radix);
+                               (radix == Character::RADIX_HEXADECIMAL)), E_NUM_FORMAT,
+                               "[%s] The radix(%d) MUST be one of 2, 8, 10 and 16.", GetErrorMessage(E_NUM_FORMAT), radix);
 
        return  __pScannerImpl->GetNextSignedChar(nextSignedChar, radix);
 }
@@ -119,8 +119,8 @@ bool Scanner::IsNextTokenConvertibleToSignedChar(int radix) const
 {
        SysAssertf(__pScannerImpl != null, "Not yet constructed! Construct() should be called before use.");
        SysTryReturnResult(NID_BASE_UTIL, ((radix == Character::RADIX_BINARY) || (radix == Character::RADIX_OCTAL) || (radix == Character::RADIX_DECIMAL) ||
-                               (radix == Character::RADIX_HEXADECIMAL)),E_NUM_FORMAT,
-                               "[E_NUM_FORMAT] The radix(%d) MUST be one of 2, 8, 10 and 16.", radix);
+                               (radix == Character::RADIX_HEXADECIMAL)), E_NUM_FORMAT,
+                               "[%s] The radix(%d) MUST be one of 2, 8, 10 and 16.", GetErrorMessage(E_NUM_FORMAT), radix);
 
        return __pScannerImpl->IsNextTokenConvertibleToSignedChar(radix);
 }
@@ -135,8 +135,8 @@ result Scanner::GetNextInt(int& nextInt, int radix) const
 {
        SysAssertf(__pScannerImpl != null, "Not yet constructed! Construct() should be called before use.");
        SysTryReturnResult(NID_BASE_UTIL, ((radix == Character::RADIX_BINARY) || (radix == Character::RADIX_OCTAL) || (radix == Character::RADIX_DECIMAL) ||
-                               (radix == Character::RADIX_HEXADECIMAL)),E_NUM_FORMAT,
-                               "[E_NUM_FORMAT] The radix(%d) MUST be one of 2, 8, 10 and 16.", radix);
+                               (radix == Character::RADIX_HEXADECIMAL)), E_NUM_FORMAT,
+                               "[%s] The radix(%d) MUST be one of 2, 8, 10 and 16.", GetErrorMessage(E_NUM_FORMAT), radix);
 
        return __pScannerImpl->GetNextInt(nextInt, radix);
 }
@@ -151,8 +151,8 @@ bool Scanner::IsNextTokenConvertibleToInt(int radix) const
 {
        SysAssertf(__pScannerImpl != null, "Not yet constructed! Construct() should be called before use.");
        SysTryReturnResult(NID_BASE_UTIL, ((radix == Character::RADIX_BINARY) || (radix == Character::RADIX_OCTAL) || (radix == Character::RADIX_DECIMAL) ||
-                               (radix == Character::RADIX_HEXADECIMAL)),E_NUM_FORMAT,
-                               "[E_NUM_FORMAT] The radix(%d) MUST be one of 2, 8, 10 and 16.", radix);
+                               (radix == Character::RADIX_HEXADECIMAL)), E_NUM_FORMAT,
+                               "[%s] The radix(%d) MUST be one of 2, 8, 10 and 16.", GetErrorMessage(E_NUM_FORMAT), radix);
 
        return __pScannerImpl->IsNextTokenConvertibleToInt(radix);
 }
@@ -167,8 +167,8 @@ result Scanner::GetNextShort(short& nextShort, int radix) const
 {
        SysAssertf(__pScannerImpl != null, "Not yet constructed! Construct() should be called before use.");
        SysTryReturnResult(NID_BASE_UTIL, ((radix == Character::RADIX_BINARY) || (radix == Character::RADIX_OCTAL) || (radix == Character::RADIX_DECIMAL) ||
-                               (radix == Character::RADIX_HEXADECIMAL)),E_NUM_FORMAT,
-                               "[E_NUM_FORMAT] The radix(%d) MUST be one of 2, 8, 10 and 16.", radix);
+                               (radix == Character::RADIX_HEXADECIMAL)), E_NUM_FORMAT,
+                               "[%s] The radix(%d) MUST be one of 2, 8, 10 and 16.", GetErrorMessage(E_NUM_FORMAT), radix);
 
        return __pScannerImpl->GetNextShort(nextShort, radix);
 }
@@ -183,8 +183,8 @@ bool Scanner::IsNextTokenConvertibleToShort(int radix) const
 {
        SysAssertf(__pScannerImpl != null, "Not yet constructed! Construct() should be called before use.");
        SysTryReturnResult(NID_BASE_UTIL, ((radix == Character::RADIX_BINARY) || (radix == Character::RADIX_OCTAL) || (radix == Character::RADIX_DECIMAL) ||
-                               (radix == Character::RADIX_HEXADECIMAL)),E_NUM_FORMAT,
-                               "[E_NUM_FORMAT] The radix(%d) MUST be one of 2, 8, 10 and 16.", radix);
+                               (radix == Character::RADIX_HEXADECIMAL)), E_NUM_FORMAT,
+                               "[%s] The radix(%d) MUST be one of 2, 8, 10 and 16.", GetErrorMessage(E_NUM_FORMAT), radix);
 
 
        return __pScannerImpl->IsNextTokenConvertibleToShort(radix);
@@ -198,12 +198,12 @@ result Scanner::GetNextLongLong(long long& nextLongLong) const
 
 result Scanner::GetNextLongLong(long long& nextLongLong, int radix) const
 {
-//This always returns nextLongLong in radix 10. This function will be implemented correctly once LongLong::Parse() is implemnted for different radix
        SysAssertf(__pScannerImpl != null, "Not yet constructed! Construct() should be called before use.");
        SysTryReturnResult(NID_BASE_UTIL, ((radix == Character::RADIX_BINARY) || (radix == Character::RADIX_OCTAL) || (radix == Character::RADIX_DECIMAL) ||
-                               (radix == Character::RADIX_HEXADECIMAL)),E_NUM_FORMAT,
-                               "[E_NUM_FORMAT] The radix(%d) MUST be one of 2, 8, 10 and 16.", radix);
-       return __pScannerImpl->GetNextLongLong(nextLongLong);
+                               (radix == Character::RADIX_HEXADECIMAL)), E_NUM_FORMAT,
+                               "[%s] The radix(%d) MUST be one of 2, 8, 10 and 16.", GetErrorMessage(E_NUM_FORMAT), radix);
+
+       return __pScannerImpl->GetNextLongLong(nextLongLong, radix);
 }
 
 bool Scanner::IsNextTokenConvertibleToLongLong(void) const
@@ -266,7 +266,7 @@ result Scanner::GetNextLine(String& nextLine) const
 result Scanner::FindInLine(const String& patternStr, String& matchedStr)
 {
        SysAssertf(__pScannerImpl != null, "Not yet constructed! Construct() should be called before use.");
-       SysTryReturnResult(NID_BASE_UTIL, !patternStr.IsEmpty(), E_INVALID_ARG, "[E_INVALID_ARG] The length of the input data is zero.");
+       SysTryReturnResult(NID_BASE_UTIL, !patternStr.IsEmpty(), E_INVALID_ARG, "[%s] The length of the input data is zero.", GetErrorMessage(E_INVALID_ARG));
        return __pScannerImpl->FindInLine(patternStr, matchedStr);
 }
 
@@ -274,7 +274,7 @@ result Scanner::FindInLine(const RegularExpression& pattern, String& matchedStr)
 {
        SysAssertf(__pScannerImpl != null, "Not yet constructed! Construct() should be called before use.");
        String str(pattern.GetPattern());
-       SysTryReturnResult(NID_BASE_UTIL, !str.IsEmpty(), E_INVALID_ARG, "[E_INVALID_ARG] The length of the input data is zero.");
+       SysTryReturnResult(NID_BASE_UTIL, !str.IsEmpty(), E_INVALID_ARG, "[%s] The length of the input data is zero.", GetErrorMessage(E_INVALID_ARG));
        return __pScannerImpl->FindInLine(pattern, matchedStr);
 }
 
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
index 350cf9d..9fd2741 100644 (file)
@@ -40,7 +40,6 @@ public:
        _ScannerImpl(const _ScannerImpl& scanner);
        _ScannerImpl& operator =(const _ScannerImpl& scanner);
        virtual ~_ScannerImpl(void);
-//     virtual int GetHashCode(void);
 
        result Construct(const String& str);
        result Construct(const String& filePath, const String& encodingScheme);
@@ -55,6 +54,7 @@ public:
        result GetNextShort(short& nextShort);
        result GetNextShort(short& nextShort, int radix);
        result GetNextLongLong(long long& nextLongLong);
+       result GetNextLongLong(long long& nextLongLong, int radix);
        result GetNextFloat(float& nextFloat);
        result GetNextDouble(double& nextDouble);
        result GetNextBool(bool& nextBool);