fmtable.cpp revision c69afcec261fc345fda8daf46f0ea6b4351dc777
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 3c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru* Copyright (C) 1997-2008, International Business Machines Corporation and * 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* others. All Rights Reserved. * 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File FMTABLE.CPP 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History: 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 03/25/97 clhuang Initial Implementation. 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************** 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/fmtable.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/measure.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/curramt.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class Formattable 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUOBJECT_DEFINE_RTTI_IMPLEMENTATION(Formattable) 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// NOTE: As of 3.0, there are limitations to the UObject API. It does 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// not (yet) support cloning, operator=, nor operator==. RTTI is also 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// restricted in that subtype testing is not (yet) implemented. To 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// work around this, I implement some simple inlines here. Later 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// these can be modified or removed. [alan] 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// NOTE: These inlines assume that all fObjects are in fact instances 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// of the Measure class, which is true as of 3.0. [alan] 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Return TRUE if *a == *b. 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic inline UBool objectEquals(const UObject* a, const UObject* b) { 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // LATER: return *a == *b; 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return *((const Measure*) a) == *((const Measure*) b); 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Return a clone of *a. 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic inline UObject* objectClone(const UObject* a) { 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // LATER: return a->clone(); 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const Measure*) a)->clone(); 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Return TRUE if *a is an instance of Measure. 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic inline UBool instanceOfMeasure(const UObject* a) { 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // LATER: return a->instanceof(Measure::getStaticClassID()); 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a->getDynamicClassID() == 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyAmount::getStaticClassID(); 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Creates a new Formattable array and copies the values from the specified 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * original. 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param array the original array 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param count the original array count 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the new Formattable array. 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic inline Formattable* createArrayCopy(const Formattable* array, int32_t count) { 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable *result = new Formattable[count]; 73c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (result != NULL) { 74c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru for (int32_t i=0; i<count; ++i) 75c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru result[i] = array[i]; // Don't memcpy! 76c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return result; 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set 'ec' to 'err' only if 'ec' is not already set to a failing UErrorCode. 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic inline void setError(UErrorCode& ec, UErrorCode err) { 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(ec)) { 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = err; 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// default constructor. 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Creates a formattable object with a long value 0. 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::Formattable() 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fType(kLong) 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fBogus.setToBogus(); 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fInt64 = 0; 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Creates a formattable object with a Date instance. 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::Formattable(UDate date, ISDATE /*isDate*/) 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fType(kDate) 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fBogus.setToBogus(); 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fDate = date; 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Creates a formattable object with a double value. 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::Formattable(double value) 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fType(kDouble) 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fBogus.setToBogus(); 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fDouble = value; 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Creates a formattable object with a long value. 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::Formattable(int32_t value) 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fType(kLong) 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fBogus.setToBogus(); 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fInt64 = value; 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Creates a formattable object with a long value. 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::Formattable(int64_t value) 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fType(kInt64) 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fBogus.setToBogus(); 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fInt64 = value; 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Creates a formattable object with a UnicodeString instance. 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::Formattable(const UnicodeString& stringToCopy) 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fType(kString) 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fBogus.setToBogus(); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fString = new UnicodeString(stringToCopy); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Creates a formattable object with a UnicodeString* value. 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// (adopting symantics) 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::Formattable(UnicodeString* stringToAdopt) 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fType(kString) 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fBogus.setToBogus(); 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fString = stringToAdopt; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::Formattable(UObject* objectToAdopt) 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fType(kObject) 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fBogus.setToBogus(); 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fObject = objectToAdopt; 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::Formattable(const Formattable* arrayToCopy, int32_t count) 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fType(kArray) 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fBogus.setToBogus(); 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fArrayAndCount.fArray = createArrayCopy(arrayToCopy, count); 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fArrayAndCount.fCount = count; 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// copy constructor 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::Formattable(const Formattable &source) 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(source), fType(kLong) 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fBogus.setToBogus(); 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *this = source; 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// assignment operator 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable& 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::operator=(const Formattable& source) 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (this != &source) 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Disposes the current formattable value/setting. 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dispose(); 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Sets the correct data type for this value. 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fType = source.fType; 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (fType) 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kArray: 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Sets each element in the array one by one and records the array count. 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fArrayAndCount.fCount = source.fValue.fArrayAndCount.fCount; 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fArrayAndCount.fArray = createArrayCopy(source.fValue.fArrayAndCount.fArray, 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.fValue.fArrayAndCount.fCount); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kString: 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Sets the string value. 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fString = new UnicodeString(*source.fValue.fString); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kDouble: 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Sets the double value. 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fDouble = source.fValue.fDouble; 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kLong: 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kInt64: 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Sets the long value. 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fInt64 = source.fValue.fInt64; 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kDate: 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Sets the Date value. 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fDate = source.fValue.fDate; 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kObject: 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fObject = objectClone(source.fValue.fObject); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return *this; 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::operator==(const Formattable& that) const 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (this == &that) return TRUE; 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Returns FALSE if the data types are different. 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fType != that.fType) return FALSE; 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Compares the actual data values. 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool equal = TRUE; 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (fType) { 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kDate: 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru equal = (fValue.fDate == that.fValue.fDate); 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kDouble: 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru equal = (fValue.fDouble == that.fValue.fDouble); 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kLong: 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kInt64: 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru equal = (fValue.fInt64 == that.fValue.fInt64); 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kString: 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru equal = (*(fValue.fString) == *(that.fValue.fString)); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kArray: 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fValue.fArrayAndCount.fCount != that.fValue.fArrayAndCount.fCount) { 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru equal = FALSE; 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Checks each element for equality. 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<fValue.fArrayAndCount.fCount; ++i) { 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fValue.fArrayAndCount.fArray[i] != that.fValue.fArrayAndCount.fArray[i]) { 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru equal = FALSE; 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kObject: 278c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (fValue.fObject == NULL || that.fValue.fObject == NULL) { 279c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru equal = FALSE; 280c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } else { 281c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru equal = objectEquals(fValue.fObject, that.fValue.fObject); 282c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return equal; 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::~Formattable() 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dispose(); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid Formattable::dispose() 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Deletes the data value if necessary. 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (fType) { 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kString: 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fValue.fString; 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kArray: 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete[] fValue.fArrayAndCount.fArray; 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kObject: 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fValue.fObject; 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable * 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::clone() const { 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return new Formattable(*this); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Gets the data type of this Formattable object. 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::Type 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::getType() const 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fType; 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::isNumeric() const { 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (fType) { 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kDouble: 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kLong: 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case kInt64: 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//Formattable::getLong(UErrorCode* status) const 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::getLong(UErrorCode& status) const 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (fType) { 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kLong: 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (int32_t)fValue.fInt64; 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kInt64: 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fValue.fInt64 > INT32_MAX) { 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_INVALID_FORMAT_ERROR; 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return INT32_MAX; 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (fValue.fInt64 < INT32_MIN) { 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_INVALID_FORMAT_ERROR; 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return INT32_MIN; 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (int32_t)fValue.fInt64; 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kDouble: 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fValue.fDouble > INT32_MAX) { 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_INVALID_FORMAT_ERROR; 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return INT32_MAX; 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (fValue.fDouble < INT32_MIN) { 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_INVALID_FORMAT_ERROR; 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return INT32_MIN; 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (int32_t)fValue.fDouble; // loses fraction 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kObject: 374c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (fValue.fObject == NULL) { 375c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_MEMORY_ALLOCATION_ERROR; 376c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return 0; 377c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO Later replace this with instanceof call 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (instanceOfMeasure(fValue.fObject)) { 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const Measure*) fValue.fObject)-> 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru getNumber().getLong(status); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_INVALID_FORMAT_ERROR; 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint64_t 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::getInt64(UErrorCode& status) const 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (fType) { 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kLong: 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kInt64: 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fValue.fInt64; 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kDouble: 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fValue.fDouble > U_INT64_MAX) { 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_INVALID_FORMAT_ERROR; 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return U_INT64_MAX; 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (fValue.fDouble < U_INT64_MIN) { 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_INVALID_FORMAT_ERROR; 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return U_INT64_MIN; 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (int64_t)fValue.fDouble; 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kObject: 412c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (fValue.fObject == NULL) { 413c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_MEMORY_ALLOCATION_ERROR; 414c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return 0; 415c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO Later replace this with instanceof call 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (instanceOfMeasure(fValue.fObject)) { 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const Measure*) fValue.fObject)-> 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru getNumber().getInt64(status); 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_INVALID_FORMAT_ERROR; 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querudouble 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::getDouble(UErrorCode& status) const 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (fType) { 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kLong: 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kInt64: // loses precision 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (double)fValue.fInt64; 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kDouble: 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fValue.fDouble; 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kObject: 442c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (fValue.fObject == NULL) { 443c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_MEMORY_ALLOCATION_ERROR; 444c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return 0; 445c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO Later replace this with instanceof call 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (instanceOfMeasure(fValue.fObject)) { 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const Measure*) fValue.fObject)-> 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru getNumber().getDouble(status); 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_INVALID_FORMAT_ERROR; 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst UObject* 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::getObject() const { 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (fType == kObject) ? fValue.fObject : NULL; 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Sets the value to a double value d. 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::setDouble(double d) 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dispose(); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fType = kDouble; 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fDouble = d; 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Sets the value to a long value l. 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::setLong(int32_t l) 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dispose(); 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fType = kLong; 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fInt64 = l; 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Sets the value to an int64 value ll. 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::setInt64(int64_t ll) 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dispose(); 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fType = kInt64; 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fInt64 = ll; 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Sets the value to a Date instance d. 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::setDate(UDate d) 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dispose(); 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fType = kDate; 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fDate = d; 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Sets the value to a string value stringToCopy. 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::setString(const UnicodeString& stringToCopy) 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dispose(); 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fType = kString; 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fString = new UnicodeString(stringToCopy); 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Sets the value to an array of Formattable objects. 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::setArray(const Formattable* array, int32_t count) 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dispose(); 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fType = kArray; 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fArrayAndCount.fArray = createArrayCopy(array, count); 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fArrayAndCount.fCount = count; 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Adopts the stringToAdopt value. 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::adoptString(UnicodeString* stringToAdopt) 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dispose(); 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fType = kString; 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fString = stringToAdopt; 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Adopts the array value and its count. 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::adoptArray(Formattable* array, int32_t count) 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dispose(); 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fType = kArray; 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fArrayAndCount.fArray = array; 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fArrayAndCount.fCount = count; 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::adoptObject(UObject* objectToAdopt) { 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dispose(); 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fType = kObject; 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fValue.fObject = objectToAdopt; 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::getString(UnicodeString& result, UErrorCode& status) const 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fType != kString) { 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setError(status, U_INVALID_FORMAT_ERROR); 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.setToBogus(); 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 567c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (fValue.fString == NULL) { 568c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru setError(status, U_MEMORY_ALLOCATION_ERROR); 569c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } else { 570c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru result = *fValue.fString; 571c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return result; 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst UnicodeString& 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::getString(UErrorCode& status) const 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fType != kString) { 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setError(status, U_INVALID_FORMAT_ERROR); 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return *getBogus(); 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 584c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (fValue.fString == NULL) { 585c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru setError(status, U_MEMORY_ALLOCATION_ERROR); 586c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return *getBogus(); 587c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return *fValue.fString; 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::getString(UErrorCode& status) 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fType != kString) { 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setError(status, U_INVALID_FORMAT_ERROR); 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return *getBogus(); 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 599c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (fValue.fString == NULL) { 600c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru setError(status, U_MEMORY_ALLOCATION_ERROR); 601c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return *getBogus(); 602c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return *fValue.fString; 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst Formattable* 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::getArray(int32_t& count, UErrorCode& status) const 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fType != kArray) { 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setError(status, U_INVALID_FORMAT_ERROR); 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = fValue.fArrayAndCount.fCount; 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fValue.fArrayAndCount.fArray; 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Gets the bogus string, ensures mondo bogosity. 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString* 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattable::getBogus() const 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UnicodeString*)&fBogus; /* cast away const :-( */ 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if 0 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------- 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// console I/O 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------- 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef _DEBUG 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if U_IOSTREAM_SOURCE >= 199711 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <iostream> 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruusing namespace std; 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif U_IOSTREAM_SOURCE >= 198506 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <iostream.h> 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/datefmt.h" 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unistrm.h" 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass FormattableStreamer /* not : public UObject because all methods are static */ { 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static void streamOut(ostream& stream, const Formattable& obj); 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FormattableStreamer() {} // private - forbid instantiation 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This is for debugging purposes only. This will send a displayable 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// form of the Formattable object to the output stream. 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruFormattableStreamer::streamOut(ostream& stream, const Formattable& obj) 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static DateFormat *defDateFormat = 0; 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString buffer; 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(obj.getType()) { 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kDate : 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Creates a DateFormat instance for formatting the 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Date instance. 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (defDateFormat == 0) { 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru defDateFormat = DateFormat::createInstance(); 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru defDateFormat->format(obj.getDate(), buffer); 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stream << buffer; 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kDouble : 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Output the double as is. 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stream << obj.getDouble() << 'D'; 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kLong : 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Output the double as is. 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stream << obj.getLong() << 'L'; 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kString: 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Output the double as is. Please see UnicodeString console 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // I/O routine for more details. 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stream << '"' << obj.getString(buffer) << '"'; 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kArray: 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i, count; 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Formattable* array; 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru array = obj.getArray(count); 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stream << '['; 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Recursively calling the console I/O routine for each element in the array. 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<count; ++i) { 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FormattableStreamer::streamOut(stream, array[i]); 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stream << ( (i==(count-1)) ? "" : ", " ); 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stream << ']'; 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Not a recognizable Formattable object. 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stream << "INVALID_Formattable"; 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stream.flush(); 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof 711