// © 2020 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html #ifndef __MEASUNIT_IMPL_H__ #define __MEASUNIT_IMPL_H__ #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING #include "unicode/measunit.h" #include "cmemory.h" #include "charstr.h" U_NAMESPACE_BEGIN namespace number { namespace impl { class LongNameHandler; } } // namespace number static const char16_t kDefaultCurrency[] = …; static const char kDefaultCurrency8[] = …; /** * Looks up the "unitQuantity" (aka "type" or "category") of a base unit * identifier. The category is returned via `result`, which must initially be * empty. * * This only supports base units: other units must be resolved to base units * before passing to this function, otherwise U_UNSUPPORTED_ERROR status may be * returned. * * Categories are found in `unitQuantities` in the `units` resource (see * `units.txt`). */ // TODO: make this function accepts any `MeasureUnit` as Java and move it to the `UnitsData` class. CharString U_I18N_API getUnitQuantity(const MeasureUnitImpl &baseMeasureUnitImpl, UErrorCode &status); /** * A struct representing a single unit (optional SI or binary prefix, and dimensionality). */ struct U_I18N_API SingleUnitImpl : public UMemory { … }; // Forward declaration struct MeasureUnitImplWithIndex; // Export explicit template instantiations of MaybeStackArray, MemoryPool and // MaybeStackVector. This is required when building DLLs for Windows. (See // datefmt.h, collationiterator.h, erarules.h and others for similar examples.) #if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN template class U_I18N_API MaybeStackArray<SingleUnitImpl *, 8>; template class U_I18N_API MemoryPool<SingleUnitImpl, 8>; template class U_I18N_API MaybeStackVector<SingleUnitImpl, 8>; #endif /** * Internal representation of measurement units. Capable of representing all complexities of units, * including mixed and compound units. */ class U_I18N_API MeasureUnitImpl : public UMemory { … }; struct U_I18N_API MeasureUnitImplWithIndex : public UMemory { … }; // Export explicit template instantiations of MaybeStackArray, MemoryPool and // MaybeStackVector. This is required when building DLLs for Windows. (See // datefmt.h, collationiterator.h, erarules.h and others for similar examples.) #if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN template class U_I18N_API MaybeStackArray<MeasureUnitImplWithIndex *, 8>; template class U_I18N_API MemoryPool<MeasureUnitImplWithIndex, 8>; template class U_I18N_API MaybeStackVector<MeasureUnitImplWithIndex, 8>; // Export an explicit template instantiation of the LocalPointer that is used as a // data member of MeasureUnitImpl. // (When building DLLs for Windows this is required.) #if defined(_MSC_VER) // Ignore warning 4661 as LocalPointerBase does not use operator== or operator!= #pragma warning(push) #pragma warning(disable : 4661) #endif template class U_I18N_API LocalPointerBase<MeasureUnitImpl>; template class U_I18N_API LocalPointer<MeasureUnitImpl>; #if defined(_MSC_VER) #pragma warning(pop) #endif #endif U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ #endif //__MEASUNIT_IMPL_H__