// © 2017 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING && !UPRV_INCOMPLETE_CPP11_SUPPORT #ifndef __NUMBER_DECIMFMTPROPS_H__ #define __NUMBER_DECIMFMTPROPS_H__ #include "unicode/unistr.h" #include #include "unicode/plurrule.h" #include "unicode/currpinf.h" #include "unicode/unum.h" #include "unicode/localpointer.h" #include "number_types.h" U_NAMESPACE_BEGIN // Export an explicit template instantiation of the LocalPointer that is used as a // data member of CurrencyPluralInfoWrapper. // (When building DLLs for Windows this is required.) #if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN // Ignore warning 4661 as LocalPointerBase does not use operator== or operator!= #pragma warning(suppress: 4661) template class U_I18N_API LocalPointerBase; template class U_I18N_API LocalPointer; #endif namespace number { namespace impl { // Exported as U_I18N_API because it is a public member field of exported DecimalFormatProperties template struct U_I18N_API CopyableLocalPointer { LocalPointer fPtr; CopyableLocalPointer() = default; CopyableLocalPointer(const CopyableLocalPointer& other) { if (!other.fPtr.isNull()) { fPtr.adoptInstead(new T(*other.fPtr)); } } CopyableLocalPointer& operator=(const CopyableLocalPointer& other) { if (!other.fPtr.isNull()) { fPtr.adoptInstead(new T(*other.fPtr)); } return *this; } }; // Exported as U_I18N_API because it is needed for the unit test PatternStringTest struct U_I18N_API DecimalFormatProperties { public: NullableValue compactStyle; NullableValue currency; CopyableLocalPointer currencyPluralInfo; NullableValue currencyUsage; bool decimalPatternMatchRequired; bool decimalSeparatorAlwaysShown; bool exponentSignAlwaysShown; int32_t formatWidth; int32_t groupingSize; int32_t magnitudeMultiplier; int32_t maximumFractionDigits; int32_t maximumIntegerDigits; int32_t maximumSignificantDigits; int32_t minimumExponentDigits; int32_t minimumFractionDigits; int32_t minimumGroupingDigits; int32_t minimumIntegerDigits; int32_t minimumSignificantDigits; int32_t multiplier; UnicodeString negativePrefix; UnicodeString negativePrefixPattern; UnicodeString negativeSuffix; UnicodeString negativeSuffixPattern; NullableValue padPosition; UnicodeString padString; bool parseCaseSensitive; bool parseIntegerOnly; bool parseLenient; bool parseNoExponent; bool parseToBigDecimal; UNumberFormatAttributeValue parseAllInput; // ICU4C-only //PluralRules pluralRules; UnicodeString positivePrefix; UnicodeString positivePrefixPattern; UnicodeString positiveSuffix; UnicodeString positiveSuffixPattern; double roundingIncrement; NullableValue roundingMode; int32_t secondaryGroupingSize; bool signAlwaysShown; DecimalFormatProperties(); //DecimalFormatProperties(const DecimalFormatProperties &other) = default; DecimalFormatProperties& operator=(const DecimalFormatProperties& other) = default; bool operator==(const DecimalFormatProperties& other) const; void clear(); }; } // namespace impl } // namespace number U_NAMESPACE_END #endif //__NUMBER_DECIMFMTPROPS_H__ #endif /* #if !UCONFIG_NO_FORMATTING */