ICU 57.1  57.1
fmtable.h
Go to the documentation of this file.
1 /*
2 ********************************************************************************
3 * Copyright (C) 1997-2014, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 ********************************************************************************
6 *
7 * File FMTABLE.H
8 *
9 * Modification History:
10 *
11 * Date Name Description
12 * 02/29/97 aliu Creation.
13 ********************************************************************************
14 */
15 #ifndef FMTABLE_H
16 #define FMTABLE_H
17 
18 #include "unicode/utypes.h"
19 
25 #if !UCONFIG_NO_FORMATTING
26 
27 #include "unicode/unistr.h"
28 #include "unicode/stringpiece.h"
29 #include "unicode/uformattable.h"
30 
32 
33 class CharString;
34 class DigitList;
35 
40 #if U_PLATFORM == U_PF_OS400
41 #define UNUM_INTERNAL_STACKARRAY_SIZE 144
42 #else
43 #define UNUM_INTERNAL_STACKARRAY_SIZE 128
44 #endif
45 
66 class U_I18N_API Formattable : public UObject {
67 public:
77  enum ISDATE { kIsDate };
78 
83  Formattable(); // Type kLong, value 0
84 
92 
98  Formattable(double d);
99 
105  Formattable(int32_t l);
106 
112  Formattable(int64_t ll);
113 
114 #if !UCONFIG_NO_CONVERSION
121  Formattable(const char* strToCopy);
122 #endif
123 
137  Formattable(const StringPiece &number, UErrorCode &status);
138 
144  Formattable(const UnicodeString& strToCopy);
145 
152 
159  Formattable(const Formattable* arrayToCopy, int32_t count);
160 
166  Formattable(UObject* objectToAdopt);
167 
173 
180 
187  UBool operator==(const Formattable &other) const;
188 
195  UBool operator!=(const Formattable& other) const
196  { return !operator==(other); }
197 
202  virtual ~Formattable();
203 
215  Formattable *clone() const;
216 
223  enum Type {
230 
237 
244 
251 
258 
265 
271  kObject
272  };
273 
279  Type getType(void) const;
280 
287  UBool isNumeric() const;
288 
295  double getDouble(void) const { return fValue.fDouble; }
296 
309  double getDouble(UErrorCode& status) const;
310 
317  int32_t getLong(void) const { return (int32_t)fValue.fInt64; }
318 
335  int32_t getLong(UErrorCode& status) const;
336 
343  int64_t getInt64(void) const { return fValue.fInt64; }
344 
360  int64_t getInt64(UErrorCode& status) const;
361 
368  UDate getDate() const { return fValue.fDate; }
369 
378  UDate getDate(UErrorCode& status) const;
379 
388  { result=*fValue.fString; return result; }
389 
400 
408  inline const UnicodeString& getString(void) const;
409 
418  const UnicodeString& getString(UErrorCode& status) const;
419 
426  inline UnicodeString& getString(void);
427 
437 
445  const Formattable* getArray(int32_t& count) const
446  { count=fValue.fArrayAndCount.fCount; return fValue.fArrayAndCount.fArray; }
447 
457  const Formattable* getArray(int32_t& count, UErrorCode& status) const;
458 
467  Formattable& operator[](int32_t index) { return fValue.fArrayAndCount.fArray[index]; }
468 
475  const UObject* getObject() const;
476 
496 
503  void setDouble(double d);
504 
511  void setLong(int32_t l);
512 
519  void setInt64(int64_t ll);
520 
527  void setDate(UDate d);
528 
535  void setString(const UnicodeString& stringToCopy);
536 
544  void setArray(const Formattable* array, int32_t count);
545 
552  void adoptString(UnicodeString* stringToAdopt);
553 
559  void adoptArray(Formattable* array, int32_t count);
560 
568  void adoptObject(UObject* objectToAdopt);
569 
584  void setDecimalNumber(const StringPiece &numberString,
585  UErrorCode &status);
586 
592  virtual UClassID getDynamicClassID() const;
593 
599  static UClassID U_EXPORT2 getStaticClassID();
600 
608  static inline Formattable *fromUFormattable(UFormattable *fmt);
609 
617  static inline const Formattable *fromUFormattable(const UFormattable *fmt);
618 
625  inline UFormattable *toUFormattable();
626 
633  inline const UFormattable *toUFormattable() const;
634 
635 #ifndef U_HIDE_DEPRECATED_API
642  inline int32_t getLong(UErrorCode* status) const;
643 #endif /* U_HIDE_DEPRECATED_API */
644 
645 #ifndef U_HIDE_INTERNAL_API
654  DigitList *getDigitList() const { return fDecimalNum;}
655 
659  DigitList *getInternalDigitList();
660 
667  void adoptDigitList(DigitList *dl);
668 
675  CharString *internalGetCharString(UErrorCode &status);
676 
677 #endif /* U_HIDE_INTERNAL_API */
678 
679 private:
684  void dispose(void);
685 
689  void init();
690 
691  UnicodeString* getBogus() const;
692 
693  union {
694  UObject* fObject;
695  UnicodeString* fString;
696  double fDouble;
697  int64_t fInt64;
698  UDate fDate;
699  struct {
700  Formattable* fArray;
701  int32_t fCount;
702  } fArrayAndCount;
703  } fValue;
704 
705  CharString *fDecimalStr;
706 
707  DigitList *fDecimalNum;
708 
709  char fStackData[UNUM_INTERNAL_STACKARRAY_SIZE]; // must be big enough for DigitList
710 
711  Type fType;
712  UnicodeString fBogus; // Bogus string when it's needed.
713 };
714 
715 inline UDate Formattable::getDate(UErrorCode& status) const {
716  if (fType != kDate) {
717  if (U_SUCCESS(status)) {
718  status = U_INVALID_FORMAT_ERROR;
719  }
720  return 0;
721  }
722  return fValue.fDate;
723 }
724 
725 inline const UnicodeString& Formattable::getString(void) const {
726  return *fValue.fString;
727 }
728 
730  return *fValue.fString;
731 }
732 
733 #ifndef U_HIDE_DEPRECATED_API
734 inline int32_t Formattable::getLong(UErrorCode* status) const {
735  return getLong(*status);
736 }
737 #endif /* U_HIDE_DEPRECATED_API */
738 
740  return reinterpret_cast<UFormattable*>(this);
741 }
742 
744  return reinterpret_cast<const UFormattable*>(this);
745 }
746 
748  return reinterpret_cast<Formattable *>(fmt);
749 }
750 
752  return reinterpret_cast<const Formattable *>(fmt);
753 }
754 
756 
757 #endif /* #if !UCONFIG_NO_FORMATTING */
758 
759 #endif //_FMTABLE
760 //eof
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:66
const UObject * getObject() const
Returns a pointer to the UObject contained within this formattable, or NULL if this object does not c...
ISDATE
This enum is only used to let callers distinguish between the Formattable(UDate) constructor and the ...
Definition: fmtable.h:77
UFormattable * toUFormattable()
Convert this object pointer to a UFormattable.
Definition: fmtable.h:739
Formattable(const char *strToCopy)
Creates a Formattable object with a char string pointer.
Formattable(int64_t ll)
Creates a Formattable object with an int64_t number.
UBool operator==(const Formattable &other) const
Equality comparison.
void adoptString(UnicodeString *stringToAdopt)
Sets and adopts the string value and count of this object and changes the type to kArray.
Formattable(UnicodeString *strToAdopt)
Creates a Formattable object with a UnicodeString object to adopt from.
UnicodeString & getString(UnicodeString &result, UErrorCode &status) const
Gets the string value of this object.
UDate getDate() const
Gets the Date value of this object.
Definition: fmtable.h:368
CharString * internalGetCharString(UErrorCode &status)
Internal function to return the CharString pointer.
Formattable()
Default constructor.
Formattable * clone() const
Clone this object.
Formattable(UObject *objectToAdopt)
Creates a Formattable object that adopts the given UObject.
const UnicodeString & getString(UErrorCode &status) const
Gets a const reference to the string value of this object.
const Formattable * getArray(int32_t &count, UErrorCode &status) const
Gets the array value and count of this object.
int64_t getInt64(UErrorCode &status) const
Gets the int64 value of this object.
Formattable(const StringPiece &number, UErrorCode &status)
Creates a Formattable object of an appropriate numeric type from a a decimal number in string form.
int32_t getLong(void) const
Gets the long value of this object.
Definition: fmtable.h:317
void setArray(const Formattable *array, int32_t count)
Sets the array value and count of this object and changes the type to kArray.
Formattable(const UnicodeString &strToCopy)
Creates a Formattable object with a UnicodeString object to copy from.
UnicodeString & getString(UErrorCode &status)
Gets a reference to the string value of this object.
Formattable(const Formattable &)
Copy constructor.
void adoptArray(Formattable *array, int32_t count)
Sets and adopts the array value and count of this object and changes the type to kArray.
Formattable & operator=(const Formattable &rhs)
Assignment operator.
StringPiece getDecimalNumber(UErrorCode &status)
Returns a numeric string representation of the number contained within this formattable,...
Formattable(double d)
Creates a Formattable object with a double number.
void setString(const UnicodeString &stringToCopy)
Sets the string value of this object and changes the type to kString.
Type getType(void) const
Gets the data type of this Formattable object.
Type
Selector for flavor of data type contained within a Formattable object.
Definition: fmtable.h:223
@ kString
Selector indicating a UnicodeString value.
Definition: fmtable.h:250
@ kDouble
Selector indicating a double value.
Definition: fmtable.h:236
@ kDate
Selector indicating a UDate value.
Definition: fmtable.h:229
@ kArray
Selector indicating an array of Formattables.
Definition: fmtable.h:257
@ kLong
Selector indicating a 32-bit integer value.
Definition: fmtable.h:243
@ kInt64
Selector indicating a 64-bit integer value.
Definition: fmtable.h:264
const Formattable * getArray(int32_t &count) const
Gets the array value and count of this object.
Definition: fmtable.h:445
static UClassID getStaticClassID()
ICU "poor man's RTTI", returns a UClassID for this class.
Formattable(UDate d, ISDATE flag)
Creates a Formattable object with a UDate instance.
void setDecimalNumber(const StringPiece &numberString, UErrorCode &status)
Sets the the numeric value from a decimal number string, and changes the type to to a numeric type ap...
int32_t getLong(UErrorCode &status) const
Gets the long value of this object.
void setInt64(int64_t ll)
Sets the int64 value of this object and changes the type to kInt64.
Formattable(const Formattable *arrayToCopy, int32_t count)
Creates a Formattable object with an array of Formattable objects.
Formattable & operator[](int32_t index)
Accesses the specified element in the array value of this Formattable object.
Definition: fmtable.h:467
void setDate(UDate d)
Sets the Date value of this object and changes the type to kDate.
void adoptObject(UObject *objectToAdopt)
Sets and adopts the UObject value of this object and changes the type to kObject.
Formattable(int32_t l)
Creates a Formattable object with a long number.
DigitList * getInternalDigitList()
UBool operator!=(const Formattable &other) const
Equality operator.
Definition: fmtable.h:195
static Formattable * fromUFormattable(UFormattable *fmt)
Convert the UFormattable to a Formattable.
Definition: fmtable.h:747
void adoptDigitList(DigitList *dl)
Adopt, and set value from, a DigitList Internal Function, do not use.
void setLong(int32_t l)
Sets the long value of this object and changes the type to kLong.
DigitList * getDigitList() const
Internal function, do not use.
Definition: fmtable.h:654
virtual UClassID getDynamicClassID() const
ICU "poor man's RTTI", returns a UClassID for the actual class.
int64_t getInt64(void) const
Gets the int64 value of this object.
Definition: fmtable.h:343
void setDouble(double d)
Sets the double value of this object and changes the type to kDouble.
UBool isNumeric() const
Returns TRUE if the data type of this Formattable object is kDouble, kLong, or kInt64.
double getDouble(void) const
Gets the double value of this object.
Definition: fmtable.h:295
double getDouble(UErrorCode &status) const
Gets the double value of this object.
const UnicodeString & getString(void) const
Gets a const reference to the string value of this object.
Definition: fmtable.h:725
UnicodeString & getString(UnicodeString &result) const
Gets the string value of this object.
Definition: fmtable.h:387
virtual ~Formattable()
Destructor.
A string-like object that points to a sized piece of memory.
Definition: stringpiece.h:52
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:221
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:294
#define UNUM_INTERNAL_STACKARRAY_SIZE
Definition: fmtable.h:41
C++ API: StringPiece: Read-only byte string wrapper class.
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
C API: UFormattable is a thin wrapper for primitive types used for formatting and parsing.
void * UFormattable
Opaque type representing various types of data which may be used for formatting and parsing operation...
Definition: uformattable.h:62
int8_t UBool
The ICU boolean type.
Definition: umachine.h:234
C++ API: Unicode String.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:91
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers,...
Definition: utypes.h:476
@ U_INVALID_FORMAT_ERROR
Data format is not what is expected.
Definition: utypes.h:509
#define U_SUCCESS(x)
Does the error code indicate success?
Definition: utypes.h:709
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition: utypes.h:358
double UDate
Date and Time data type.
Definition: utypes.h:201
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:129