X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/46f4442e9a5a4f3b98b7c1083586332f6a8a99a4..HEAD:/icuSources/i18n/format.cpp diff --git a/icuSources/i18n/format.cpp b/icuSources/i18n/format.cpp index 883a41d5..e5abbe9e 100644 --- a/icuSources/i18n/format.cpp +++ b/icuSources/i18n/format.cpp @@ -1,6 +1,8 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 1997-2007, International Business Machines Corporation and * +* Copyright (C) 1997-2012, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -18,9 +20,15 @@ // ***************************************************************************** // This file was generated from the java source file Format.java // ***************************************************************************** - + +#include "utypeinfo.h" // for 'typeid' to work + #include "unicode/utypes.h" +#ifndef U_I18N_IMPLEMENTATION +#error U_I18N_IMPLEMENTATION not set - must be set for all ICU source files in i18n/ - see http://userguide.icu-project.org/howtouseicu +#endif + /* * Dummy code: * If all modules in the I18N library are switched off, then there are no @@ -88,18 +96,20 @@ Format::Format(const Format &that) Format& Format::operator=(const Format& that) { - uprv_strcpy(validLocale, that.validLocale); - uprv_strcpy(actualLocale, that.actualLocale); + if (this != &that) { + uprv_strcpy(validLocale, that.validLocale); + uprv_strcpy(actualLocale, that.actualLocale); + } return *this; } // ------------------------------------- // Formats the obj and append the result in the buffer, toAppendTo. // This calls the actual implementation in the concrete subclasses. - + UnicodeString& -Format::format(const Formattable& obj, - UnicodeString& toAppendTo, +Format::format(const Formattable& obj, + UnicodeString& toAppendTo, UErrorCode& status) const { if (U_FAILURE(status)) return toAppendTo; @@ -108,14 +118,30 @@ Format::format(const Formattable& obj, return format(obj, toAppendTo, pos, status); } - + // ------------------------------------- -// Parses the source string and create the corresponding +// Default implementation sets unsupported error; subclasses should +// override. + +UnicodeString& +Format::format(const Formattable& /* unused obj */, + UnicodeString& toAppendTo, + FieldPositionIterator* /* unused posIter */, + UErrorCode& status) const +{ + if (!U_FAILURE(status)) { + status = U_UNSUPPORTED_ERROR; + } + return toAppendTo; +} + +// ------------------------------------- +// Parses the source string and create the corresponding // result object. Checks the parse position for errors. - + void -Format::parseObject(const UnicodeString& source, - Formattable& result, +Format::parseObject(const UnicodeString& source, + Formattable& result, UErrorCode& status) const { if (U_FAILURE(status)) return; @@ -126,14 +152,14 @@ Format::parseObject(const UnicodeString& source, status = U_INVALID_FORMAT_ERROR; } } - + // ------------------------------------- UBool Format::operator==(const Format& that) const { // Subclasses: Call this method and then add more specific checks. - return getDynamicClassID() == that.getDynamicClassID(); + return typeid(*this) == typeid(that); } //--------------------------------------- @@ -150,7 +176,7 @@ void Format::syntaxError(const UnicodeString& pattern, UParseError& parseError) { parseError.offset = pos; parseError.line=0; // we are not using line number - + // for pre-context int32_t start = (pos < U_PARSE_CONTEXT_LEN)? 0 : (pos - (U_PARSE_CONTEXT_LEN-1 /* subtract 1 so that we have room for null*/)); @@ -158,17 +184,17 @@ void Format::syntaxError(const UnicodeString& pattern, pattern.extract(start,stop-start,parseError.preContext,0); //null terminate the buffer parseError.preContext[stop-start] = 0; - + //for post-context start = pos+1; - stop = ((pos+U_PARSE_CONTEXT_LEN)<=pattern.length()) ? (pos+(U_PARSE_CONTEXT_LEN-1)) : + stop = ((pos+U_PARSE_CONTEXT_LEN)<=pattern.length()) ? (pos+(U_PARSE_CONTEXT_LEN-1)) : pattern.length(); pattern.extract(start,stop-start,parseError.postContext,0); //null terminate the buffer parseError.postContext[stop-start]= 0; } -Locale +Locale Format::getLocale(ULocDataLocaleType type, UErrorCode& status) const { U_LOCALE_BASED(locBased, *this); return locBased.getLocale(type, status);