00001
00002
00003
00004 #ifndef __FORMATTEDNUMBER_H__
00005 #define __FORMATTEDNUMBER_H__
00006
00007 #include "unicode/utypes.h"
00008
00009 #if U_SHOW_CPLUSPLUS_API
00010
00011 #if !UCONFIG_NO_FORMATTING
00012
00013 #include "unicode/uobject.h"
00014 #include "unicode/formattedvalue.h"
00015 #include "unicode/measunit.h"
00016 #include "unicode/udisplayoptions.h"
00017
00025 U_NAMESPACE_BEGIN
00026
00027 class FieldPositionIteratorHandler;
00028
00029 namespace number {
00030
00031 namespace impl {
00032 class DecimalQuantity;
00033 class UFormattedNumberData;
00034 struct UFormattedNumberImpl;
00035 }
00036
00037
00038
00047 class U_I18N_API FormattedNumber : public UMemory, public FormattedValue {
00048 public:
00049
00054 FormattedNumber()
00055 : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {}
00056
00061 FormattedNumber(FormattedNumber&& src) noexcept;
00062
00067 virtual ~FormattedNumber() override;
00068
00070 FormattedNumber(const FormattedNumber&) = delete;
00071
00073 FormattedNumber& operator=(const FormattedNumber&) = delete;
00074
00079 FormattedNumber& operator=(FormattedNumber&& src) noexcept;
00080
00081
00089 UnicodeString toString(UErrorCode& status) const override;
00090
00091
00093 UnicodeString toTempString(UErrorCode& status) const override;
00094
00095
00103 Appendable &appendTo(Appendable& appendable, UErrorCode& status) const override;
00104
00105
00107 UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const override;
00108
00127 template<typename StringClass>
00128 inline StringClass toDecimalNumber(UErrorCode& status) const;
00129
00141 MeasureUnit getOutputUnit(UErrorCode& status) const;
00142
00143 #ifndef U_HIDE_DRAFT_API
00144
00152 UDisplayOptionsNounClass getNounClass(UErrorCode &status) const;
00153
00154 #endif // U_HIDE_DRAFT_API
00155
00156 #ifndef U_HIDE_INTERNAL_API
00157
00162 void getDecimalQuantity(impl::DecimalQuantity& output, UErrorCode& status) const;
00163
00168 void getAllFieldPositionsImpl(FieldPositionIteratorHandler& fpih, UErrorCode& status) const;
00169
00170 #endif
00171
00172 private:
00173
00174 impl::UFormattedNumberData *fData;
00175
00176
00177 UErrorCode fErrorCode;
00178
00183 explicit FormattedNumber(impl::UFormattedNumberData *results)
00184 : fData(results), fErrorCode(U_ZERO_ERROR) {}
00185
00186 explicit FormattedNumber(UErrorCode errorCode)
00187 : fData(nullptr), fErrorCode(errorCode) {}
00188
00189 void toDecimalNumber(ByteSink& sink, UErrorCode& status) const;
00190
00191
00192 friend class LocalizedNumberFormatter;
00193 friend class SimpleNumberFormatter;
00194
00195
00196 friend struct impl::UFormattedNumberImpl;
00197 };
00198
00199 template<typename StringClass>
00200 StringClass FormattedNumber::toDecimalNumber(UErrorCode& status) const {
00201 StringClass result;
00202 StringByteSink<StringClass> sink(&result);
00203 toDecimalNumber(sink, status);
00204 return result;
00205 }
00206
00207 }
00208 U_NAMESPACE_END
00209
00210 #endif
00211
00212 #endif
00213
00214 #endif // __FORMATTEDNUMBER_H__
00215