UnicodeString& SimplePatternFormatter::format( const UnicodeString * const *placeholderValues, int32_t placeholderValueCount, UnicodeString &appendTo, int32_t *offsetArray, int32_t offsetArrayLength, UErrorCode &status) const { if (U_FAILURE(status)) { return appendTo; } if (placeholderValueCount < placeholderCount) { status = U_ILLEGAL_ARGUMENT_ERROR; return appendTo; } for (int32_t i = 0; i < offsetArrayLength; ++i) { offsetArray[i] = -1; } if (placeholderSize == 0) { appendTo.append(noPlaceholders); return appendTo; } appendRange( noPlaceholders, 0, placeholdersByOffset[0], appendTo); updatePlaceholderOffset( placeholdersByOffset[1], appendTo.length(), offsetArray, offsetArrayLength); appendTo.append(*placeholderValues[placeholdersByOffset[1]]); for (int32_t i = 1; i < placeholderSize; ++i) { appendRange( noPlaceholders, placeholdersByOffset[2 * i - 2], placeholdersByOffset[2 * i], appendTo); updatePlaceholderOffset( placeholdersByOffset[2 * i + 1], appendTo.length(), offsetArray, offsetArrayLength); appendTo.append(*placeholderValues[placeholdersByOffset[2 * i + 1]]); } appendRange( noPlaceholders, placeholdersByOffset[2 * placeholderSize - 2], noPlaceholders.length(), appendTo); return appendTo; }
UnicodeString& SimplePatternFormatter::formatAndAppend( const SimplePatternFormatterPlaceholderValues &values, UnicodeString &appendTo, int32_t *offsetArray, int32_t offsetArrayLength) const { for (int32_t i = 0; i < offsetArrayLength; ++i) { offsetArray[i] = -1; } if (placeholderSize == 0) { appendTo.append(noPlaceholders); return appendTo; } appendRange( noPlaceholders, 0, placeholders[0].offset, appendTo); updatePlaceholderOffset( placeholders[0].id, appendTo.length(), offsetArray, offsetArrayLength); const UnicodeString *placeholderValue = &values.get(placeholders[0].id); if (placeholderValue != &appendTo) { appendTo.append(*placeholderValue); } for (int32_t i = 1; i < placeholderSize; ++i) { appendRange( noPlaceholders, placeholders[i - 1].offset, placeholders[i].offset, appendTo); updatePlaceholderOffset( placeholders[i].id, appendTo.length(), offsetArray, offsetArrayLength); placeholderValue = &values.get(placeholders[i].id); if (placeholderValue != &appendTo) { appendTo.append(*placeholderValue); } } appendRange( noPlaceholders, placeholders[placeholderSize - 1].offset, noPlaceholders.length(), appendTo); return appendTo; }