#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]*"
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;
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");
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));
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"");
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"");
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;
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"");
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"");
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;
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;
}
}
-
return r;
}
+
}}} // Osp::Base::Utility