#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
#include "charstr.h"
#include "cmemory.h"
#include "double-conversion-string-to-double.h"
#include "measunit_impl.h"
#include "putilimp.h"
#include "uassert.h"
#include "unicode/errorcode.h"
#include "unicode/localpointer.h"
#include "unicode/stringpiece.h"
#include "units_converter.h"
#include <algorithm>
#include <cmath>
#include <stdlib.h>
#include <utility>
U_NAMESPACE_BEGIN
namespace units {
void U_I18N_API Factor::multiplyBy(const Factor &rhs) { … }
void U_I18N_API Factor::divideBy(const Factor &rhs) { … }
void U_I18N_API Factor::power(int32_t power) { … }
void U_I18N_API Factor::applyPrefix(UMeasurePrefix unitPrefix) { … }
void U_I18N_API Factor::substituteConstants() { … }
namespace {
StringToDoubleConverter;
double strToDouble(StringPiece strNum, UErrorCode &status) { … }
double strHasDivideSignToDouble(StringPiece strWithDivide, UErrorCode &status) { … }
void addFactorElement(Factor &factor, StringPiece elementStr, Signum signum, UErrorCode &status) { … }
Factor extractFactorConversions(StringPiece stringFactor, UErrorCode &status) { … }
Factor loadSingleFactor(StringPiece source, const ConversionRates &ratesInfo, UErrorCode &status) { … }
Factor loadCompoundFactor(const MeasureUnitImpl &source, const ConversionRates &ratesInfo,
UErrorCode &status) { … }
UBool checkSimpleUnit(const MeasureUnitImpl &unit, UErrorCode &status) { … }
void loadConversionRate(ConversionRate &conversionRate, const MeasureUnitImpl &source,
const MeasureUnitImpl &target, Convertibility unitsState,
const ConversionRates &ratesInfo, UErrorCode &status) { … }
struct UnitIndexAndDimension : UMemory { … };
void mergeSingleUnitWithDimension(MaybeStackVector<UnitIndexAndDimension> &unitIndicesWithDimension,
const SingleUnitImpl &shouldBeMerged, int32_t multiplier) { … }
void mergeUnitsAndDimensions(MaybeStackVector<UnitIndexAndDimension> &unitIndicesWithDimension,
const MeasureUnitImpl &shouldBeMerged, int32_t multiplier) { … }
UBool checkAllDimensionsAreZeros(const MaybeStackVector<UnitIndexAndDimension> &dimensionVector) { … }
}
void U_I18N_API addSingleFactorConstant(StringPiece baseStr, int32_t power, Signum signum,
Factor &factor, UErrorCode &status) { … }
MeasureUnitImpl U_I18N_API extractCompoundBaseUnit(const MeasureUnitImpl &source,
const ConversionRates &conversionRates,
UErrorCode &status) { … }
Convertibility U_I18N_API extractConvertibility(const MeasureUnitImpl &source,
const MeasureUnitImpl &target,
const ConversionRates &conversionRates,
UErrorCode &status) { … }
UnitsConverter::UnitsConverter(const MeasureUnitImpl &source, const MeasureUnitImpl &target,
const ConversionRates &ratesInfo, UErrorCode &status)
: … { … }
UnitsConverter::UnitsConverter(StringPiece sourceIdentifier, StringPiece targetIdentifier,
UErrorCode &status)
: … { … }
void UnitsConverter::init(const ConversionRates &ratesInfo, UErrorCode &status) { … }
int32_t UnitsConverter::compareTwoUnits(const MeasureUnitImpl &firstUnit,
const MeasureUnitImpl &secondUnit,
const ConversionRates &ratesInfo, UErrorCode &status) { … }
double UnitsConverter::convert(double inputValue) const { … }
double UnitsConverter::convertInverse(double inputValue) const { … }
ConversionInfo UnitsConverter::getConversionInfo() const { … }
}
U_NAMESPACE_END
#endif