]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/format.cpp
ICU-511.32.tar.gz
[apple/icu.git] / icuSources / i18n / format.cpp
index e93642c6ade9913560ae21487872f55036e34b14..e369e4021a77931f2ef00ffa5a6037ebfb6d181c 100644 (file)
@@ -1,6 +1,6 @@
 /*
 *******************************************************************************
-* Copyright (C) 1997-2004, International Business Machines Corporation and    *
+* Copyright (C) 1997-2012, International Business Machines Corporation and    *
 * others. All Rights Reserved.                                                *
 *******************************************************************************
 *
 // *****************************************************************************
 // 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 +94,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 +116,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 +150,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,25 +174,25 @@ 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
+    int32_t start = (pos < U_PARSE_CONTEXT_LEN)? 0 : (pos - (U_PARSE_CONTEXT_LEN-1
                                                              /* subtract 1 so that we have room for null*/));
     int32_t stop  = pos;
     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);