+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
-* Copyright (C) 1997-2003, 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
#if !UCONFIG_NO_FORMATTING
#include "unicode/format.h"
+#include "unicode/ures.h"
+#include "cstring.h"
+#include "locbased.h"
// *****************************************************************************
// class Format
U_NAMESPACE_BEGIN
-const char FieldPosition::fgClassID=0;
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(FieldPosition)
+
+FieldPosition::~FieldPosition() {}
+
+FieldPosition *
+FieldPosition::clone() const {
+ return new FieldPosition(*this);
+}
// -------------------------------------
// default constructor
Format::Format()
: UObject()
{
+ *validLocale = *actualLocale = 0;
}
// -------------------------------------
Format::Format(const Format &that)
: UObject(that)
{
+ *this = that;
}
// -------------------------------------
// assignment operator
Format&
-Format::operator=(const Format& /*that*/)
+Format::operator=(const Format& that)
{
+ 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;
- // {sfb} should really be FieldPosition::DONT_CARE, not 0
- // leave at 0 for now, to keep in sync with Java
- FieldPosition pos(0);
+ FieldPosition pos(FieldPosition::DONT_CARE);
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;
status = U_INVALID_FORMAT_ERROR;
}
}
-
+
// -------------------------------------
UBool
-Format::operator==(const Format& /*that*/) const
+Format::operator==(const Format& that) const
{
- // Add this implementation to make linker happy.
- return TRUE;
+ // Subclasses: Call this method and then add more specific checks.
+ return typeid(*this) == typeid(that);
}
//---------------------------------------
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
+Format::getLocale(ULocDataLocaleType type, UErrorCode& status) const {
+ U_LOCALE_BASED(locBased, *this);
+ return locBased.getLocale(type, status);
+}
+
+const char *
+Format::getLocaleID(ULocDataLocaleType type, UErrorCode& status) const {
+ U_LOCALE_BASED(locBased, *this);
+ return locBased.getLocaleID(type, status);
+}
+
+void
+Format::setLocaleIDs(const char* valid, const char* actual) {
+ U_LOCALE_BASED(locBased, *this);
+ locBased.setLocaleIDs(valid, actual);
+}
+
U_NAMESPACE_END
#endif /* #if !UCONFIG_NO_FORMATTING */