ICU 76.1 76.1
Loading...
Searching...
No Matches
fmtable.h
Go to the documentation of this file.
1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3/*
4********************************************************************************
5* Copyright (C) 1997-2014, International Business Machines
6* Corporation and others. All Rights Reserved.
7********************************************************************************
8*
9* File FMTABLE.H
10*
11* Modification History:
12*
13* Date Name Description
14* 02/29/97 aliu Creation.
15********************************************************************************
16*/
17#ifndef FMTABLE_H
18#define FMTABLE_H
19
20#include "unicode/utypes.h"
21
22#if U_SHOW_CPLUSPLUS_API
23
29#if !UCONFIG_NO_FORMATTING
30
31#include "unicode/unistr.h"
32#include "unicode/stringpiece.h"
34
35U_NAMESPACE_BEGIN
36
37class CharString;
38
39namespace number::impl {
40class DecimalQuantity;
41}
42
64public:
74 enum ISDATE { kIsDate };
75
80 Formattable(); // Type kLong, value 0
81
89
95 Formattable(double d);
96
103
110
111#if !UCONFIG_NO_CONVERSION
118 Formattable(const char* strToCopy);
119#endif
120
135
142
149
157
164
170
177
184 bool operator==(const Formattable &other) const;
185
192 bool operator!=(const Formattable& other) const
193 { return !operator==(other); }
194
199 virtual ~Formattable();
200
213
220 enum Type {
227
234
241
248
255
262
268 kObject
269 };
270
276 Type getType() const;
277
285
292 double getDouble() const { return fValue.fDouble; }
293
307
314 int32_t getLong() const { return static_cast<int32_t>(fValue.fInt64); }
315
333
340 int64_t getInt64() const { return fValue.fInt64; }
341
358
365 UDate getDate() const { return fValue.fDate; }
366
375 UDate getDate(UErrorCode& status) const;
376
385 { result=*fValue.fString; return result; }
386
397
405 inline const UnicodeString& getString() const;
406
416
423 inline UnicodeString& getString();
424
434
442 const Formattable* getArray(int32_t& count) const
443 { count=fValue.fArrayAndCount.fCount; return fValue.fArrayAndCount.fArray; }
444
455
464 Formattable& operator[](int32_t index) { return fValue.fArrayAndCount.fArray[index]; }
465
472 const UObject* getObject() const;
473
493
500 void setDouble(double d);
501
509
517
525
533
541 void setArray(const Formattable* array, int32_t count);
542
550
556 void adoptArray(Formattable* array, int32_t count);
557
566
583
589 virtual UClassID getDynamicClassID() const override;
590
597
605 static inline Formattable *fromUFormattable(UFormattable *fmt);
606
614 static inline const Formattable *fromUFormattable(const UFormattable *fmt);
615
622 inline UFormattable *toUFormattable();
623
630 inline const UFormattable *toUFormattable() const;
631
632#ifndef U_HIDE_DEPRECATED_API
639 inline int32_t getLong(UErrorCode* status) const;
640#endif /* U_HIDE_DEPRECATED_API */
641
642#ifndef U_HIDE_INTERNAL_API
651 number::impl::DecimalQuantity *getDecimalQuantity() const { return fDecimalQuantity;}
652
657 void populateDecimalQuantity(number::impl::DecimalQuantity& output, UErrorCode& status) const;
658
665 void adoptDecimalQuantity(number::impl::DecimalQuantity *dq);
666
674
675#endif /* U_HIDE_INTERNAL_API */
676
677private:
682 void dispose();
683
687 void init();
688
689 UnicodeString* getBogus() const;
690
691 union {
692 UObject* fObject;
693 UnicodeString* fString;
694 double fDouble;
695 int64_t fInt64;
696 UDate fDate;
697 struct {
698 Formattable* fArray;
699 int32_t fCount;
700 } fArrayAndCount;
701 } fValue;
702
703 CharString *fDecimalStr;
704
705 number::impl::DecimalQuantity *fDecimalQuantity;
706
707 Type fType;
708 UnicodeString fBogus; // Bogus string when it's needed.
709};
710
711inline UDate Formattable::getDate(UErrorCode& status) const {
712 if (fType != kDate) {
713 if (U_SUCCESS(status)) {
715 }
716 return 0;
717 }
718 return fValue.fDate;
719}
720
721inline const UnicodeString& Formattable::getString() const {
722 return *fValue.fString;
723}
724
725inline UnicodeString& Formattable::getString() {
726 return *fValue.fString;
727}
728
729#ifndef U_HIDE_DEPRECATED_API
730inline int32_t Formattable::getLong(UErrorCode* status) const {
731 return getLong(*status);
732}
733#endif /* U_HIDE_DEPRECATED_API */
734
735inline UFormattable* Formattable::toUFormattable() {
736 return reinterpret_cast<UFormattable*>(this);
737}
738
739inline const UFormattable* Formattable::toUFormattable() const {
740 return reinterpret_cast<const UFormattable*>(this);
741}
742
743inline Formattable* Formattable::fromUFormattable(UFormattable *fmt) {
744 return reinterpret_cast<Formattable *>(fmt);
745}
746
747inline const Formattable* Formattable::fromUFormattable(const UFormattable *fmt) {
748 return reinterpret_cast<const Formattable *>(fmt);
749}
750
752
753#endif /* #if !UCONFIG_NO_FORMATTING */
754
755#endif /* U_SHOW_CPLUSPLUS_API */
756
757#endif //_FMTABLE
758//eof
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition fmtable.h:63
void setDecimalNumber(StringPiece numberString, UErrorCode &status)
Sets the the numeric value from a decimal number string, and changes the type to to a numeric type ap...
Formattable(StringPiece number, UErrorCode &status)
Creates a Formattable object of an appropriate numeric type from a a decimal number in string form.
Formattable(UnicodeString *strToAdopt)
Creates a Formattable object with a UnicodeString object to adopt from.
Type getType() const
Gets the data type of this Formattable object.
static UClassID getStaticClassID()
ICU "poor man's RTTI", returns a UClassID for this class.
void setArray(const Formattable *array, int32_t count)
Sets the array value and count of this object and changes the type to kArray.
void setString(const UnicodeString &stringToCopy)
Sets the string value of this object and changes the type to kString.
UBool isNumeric() const
Returns true if the data type of this Formattable object is kDouble, kLong, or kInt64.
void adoptString(UnicodeString *stringToAdopt)
Sets and adopts the string value and count of this object and changes the type to kArray.
Formattable(UObject *objectToAdopt)
Creates a Formattable object that adopts the given UObject.
void setInt64(int64_t ll)
Sets the int64 value of this object and changes the type to kInt64.
Formattable(double d)
Creates a Formattable object with a double number.
Formattable()
Default constructor.
void setDouble(double d)
Sets the double value of this object and changes the type to kDouble.
int32_t getLong() const
Gets the long value of this object.
Definition fmtable.h:314
Formattable(const UnicodeString &strToCopy)
Creates a Formattable object with a UnicodeString object to copy from.
void adoptDecimalQuantity(number::impl::DecimalQuantity *dq)
Adopt, and set value from, a DecimalQuantity Internal Function, do not use.
void setLong(int32_t l)
Sets the long value of this object and changes the type to kLong.
Formattable & operator=(const Formattable &rhs)
Assignment operator.
const UObject * getObject() const
Returns a pointer to the UObject contained within this formattable, or nullptr if this object does no...
Type
Selector for flavor of data type contained within a Formattable object.
Definition fmtable.h:220
@ kDouble
Selector indicating a double value.
Definition fmtable.h:233
@ kArray
Selector indicating an array of Formattables.
Definition fmtable.h:254
@ kLong
Selector indicating a 32-bit integer value.
Definition fmtable.h:240
@ kInt64
Selector indicating a 64-bit integer value.
Definition fmtable.h:261
@ kString
Selector indicating a UnicodeString value.
Definition fmtable.h:247
@ kDate
Selector indicating a UDate value.
Definition fmtable.h:226
void setDate(UDate d)
Sets the Date value of this object and changes the type to kDate.
double getDouble(UErrorCode &status) const
Gets the double value of this object.
Formattable(const char *strToCopy)
Creates a Formattable object with a char string pointer.
Formattable(UDate d, ISDATE flag)
Creates a Formattable object with a UDate instance.
void adoptArray(Formattable *array, int32_t count)
Sets and adopts the array value and count of this object and changes the type to kArray.
void adoptObject(UObject *objectToAdopt)
Sets and adopts the UObject value of this object and changes the type to kObject.
UnicodeString & getString(UnicodeString &result) const
Gets the string value of this object.
Definition fmtable.h:384
bool operator==(const Formattable &other) const
Equality comparison.
Formattable & operator[](int32_t index)
Accesses the specified element in the array value of this Formattable object.
Definition fmtable.h:464
double getDouble() const
Gets the double value of this object.
Definition fmtable.h:292
Formattable * clone() const
Clone this object.
number::impl::DecimalQuantity * getDecimalQuantity() const
Internal function, do not use.
Definition fmtable.h:651
UnicodeString & getString(UErrorCode &status)
Gets a reference to the string value of this object.
Formattable(const Formattable *arrayToCopy, int32_t count)
Creates a Formattable object with an array of Formattable objects.
int64_t getInt64() const
Gets the int64 value of this object.
Definition fmtable.h:340
Formattable(const Formattable &)
Copy constructor.
Formattable(int32_t l)
Creates a Formattable object with a long number.
StringPiece getDecimalNumber(UErrorCode &status)
Returns a numeric string representation of the number contained within this formattable,...
const Formattable * getArray(int32_t &count, UErrorCode &status) const
Gets the array value and count of this object.
virtual ~Formattable()
Destructor.
ISDATE
This enum is only used to let callers distinguish between the Formattable(UDate) constructor and the ...
Definition fmtable.h:74
bool operator!=(const Formattable &other) const
Equality operator.
Definition fmtable.h:192
CharString * internalGetCharString(UErrorCode &status)
Internal function to return the CharString pointer.
const Formattable * getArray(int32_t &count) const
Gets the array value and count of this object.
Definition fmtable.h:442
void populateDecimalQuantity(number::impl::DecimalQuantity &output, UErrorCode &status) const
Export the value of this Formattable to a DecimalQuantity.
UDate getDate() const
Gets the Date value of this object.
Definition fmtable.h:365
int32_t getLong(UErrorCode &status) const
Gets the long value of this object.
Formattable(int64_t ll)
Creates a Formattable object with an int64_t number.
const UnicodeString & getString(UErrorCode &status) const
Gets a const reference to the string value of this object.
int64_t getInt64(UErrorCode &status) const
Gets the int64 value of this object.
UnicodeString & getString(UnicodeString &result, UErrorCode &status) const
Gets the string value of this object.
virtual UClassID getDynamicClassID() const override
ICU "poor man's RTTI", returns a UClassID for the actual class.
"Smart pointer" base class; do not use directly: use LocalPointer etc.
A string-like object that points to a sized piece of memory.
Definition stringpiece.h:61
UObject is the common ICU "boilerplate" class.
Definition uobject.h:223
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition unistr.h:296
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
C++ API: StringPiece: Read-only byte string wrapper class.
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...
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition umachine.h:247
C++ API: Unicode String.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition uobject.h:96
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition utypes.h:430
@ U_INVALID_FORMAT_ERROR
Data format is not what is expected.
Definition utypes.h:469
#define U_SUCCESS(x)
Does the error code indicate success?
Definition utypes.h:742
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition utypes.h:316
double UDate
Date and Time data type.
Definition utypes.h:218