CurrencyAmount* NumberFormat::parseCurrency(const UnicodeString& text, ParsePosition& pos) const { // Default implementation only -- subclasses should override Formattable parseResult; int32_t start = pos.getIndex(); parse(text, parseResult, pos); if (pos.getIndex() != start) { UChar curr[4]; UErrorCode ec = U_ZERO_ERROR; getEffectiveCurrency(curr, ec); if (U_SUCCESS(ec)) { LocalPointer<CurrencyAmount> currAmt(new CurrencyAmount(parseResult, curr, ec)); if (U_FAILURE(ec)) { pos.setIndex(start); // indicate failure } else { return currAmt.orphan(); } } } return NULL; }
Formattable& NumberFormat::parseCurrency(const UnicodeString& text, Formattable& result, ParsePosition& pos) const { // Default implementation only -- subclasses should override int32_t start = pos.getIndex(); parse(text, result, pos); if (pos.getIndex() != start) { UChar curr[4]; UErrorCode ec = U_ZERO_ERROR; getEffectiveCurrency(curr, ec); if (U_SUCCESS(ec)) { Formattable n(result); CurrencyAmount *tempCurAmnt = new CurrencyAmount(n, curr, ec); // Use for null testing. if (U_FAILURE(ec) || tempCurAmnt == NULL) { pos.setIndex(start); // indicate failure } else { result.adoptObject(tempCurAmnt); } } } return result; }