mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-18 19:25:49 +00:00
Merge pull request #34 from younies/tryingdouble_staging
Remove extractUnitInfo from UnitConverter's helpers
This commit is contained in:
commit
0a93866597
2 changed files with 22 additions and 23 deletions
|
@ -138,22 +138,6 @@ double strHasDivideSignToDouble(StringPiece strWithDivide) {
|
|||
return strToDouble(strWithDivide);
|
||||
}
|
||||
|
||||
const ConversionRateInfo &extractConversionInfo(StringPiece source,
|
||||
const ConversionRates &conversionRates,
|
||||
UErrorCode &status) {
|
||||
// TODO(younies): hugovdm added this hacky getInternalList call to resolve
|
||||
// "git merge" issues. This needs to be improved.
|
||||
const MaybeStackVector<ConversionRateInfo> *conversionRateInfoList =
|
||||
conversionRates.getInternalList();
|
||||
for (size_t i = 0, n = conversionRateInfoList->length(); i < n; ++i) {
|
||||
if ((*conversionRateInfoList)[i]->sourceUnit.toStringPiece() == source)
|
||||
return *((*conversionRateInfoList)[i]);
|
||||
}
|
||||
|
||||
status = U_INTERNAL_PROGRAM_ERROR;
|
||||
return ConversionRateInfo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the compound base unit of a compound unit (`source`). For example, if the source unit is
|
||||
* `square-mile-per-hour`, the compound base unit will be `square-meter-per-second`
|
||||
|
@ -291,19 +275,20 @@ Factor extractFactorConversions(StringPiece stringFactor, UErrorCode &status) {
|
|||
|
||||
// Load factor for a single source
|
||||
Factor loadSingleFactor(StringPiece source, const ConversionRates &ratesInfo, UErrorCode &status) {
|
||||
const auto &conversionUnit = extractConversionInfo(source, ratesInfo, status);
|
||||
const auto conversionUnit = ratesInfo.extractConversionInfo(source, status);
|
||||
if (U_FAILURE(status)) return Factor();
|
||||
if(conversionUnit == nullptr) {
|
||||
status = U_INTERNAL_PROGRAM_ERROR;
|
||||
return Factor();
|
||||
}
|
||||
|
||||
auto result = extractFactorConversions(conversionUnit.factor.toStringPiece(), status);
|
||||
result.offset = strHasDivideSignToDouble(conversionUnit.offset.toStringPiece());
|
||||
|
||||
// TODO: `reciprocal` should be added to the `ConversionRateInfo`.
|
||||
// result.reciprocal = conversionUnit.reciprocal
|
||||
Factor result = extractFactorConversions(conversionUnit->factor.toStringPiece(), status);
|
||||
result.offset = strHasDivideSignToDouble(conversionUnit->offset.toStringPiece());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// Load Factor for compound source
|
||||
// Load Factor of a compound source unit.
|
||||
Factor loadCompoundFactor(const MeasureUnit &source, const ConversionRates &ratesInfo,
|
||||
UErrorCode &status) {
|
||||
|
||||
|
@ -315,6 +300,7 @@ Factor loadCompoundFactor(const MeasureUnit &source, const ConversionRates &rate
|
|||
auto singleUnit = *compoundSourceUnit.units[i]; // a TempSingleUnit
|
||||
|
||||
Factor singleFactor = loadSingleFactor(singleUnit.identifier, ratesInfo, status);
|
||||
if(U_FAILURE(status)) return result;
|
||||
|
||||
// Apply SiPrefix before the power, because the power may be will flip the factor.
|
||||
singleFactor.applySiPrefix(singleUnit.siPrefix);
|
||||
|
|
|
@ -15,6 +15,18 @@ U_NAMESPACE_BEGIN
|
|||
|
||||
namespace {
|
||||
|
||||
void trimSpaces(CharString& factor, UErrorCode& status){
|
||||
CharString trimmed;
|
||||
for (int i = 0 ; i < factor.length(); i++) {
|
||||
if (factor[i] == ' ') continue;
|
||||
|
||||
trimmed.append(factor[i], status);
|
||||
}
|
||||
|
||||
factor.clear();
|
||||
factor.append(trimmed, status);
|
||||
}
|
||||
|
||||
/**
|
||||
* A ResourceSink that collects conversion rate information.
|
||||
*
|
||||
|
@ -84,6 +96,7 @@ class ConversionRateDataSink : public ResourceSink {
|
|||
cr->sourceUnit.append(srcUnit, status);
|
||||
cr->baseUnit.appendInvariantChars(baseUnit, status);
|
||||
cr->factor.appendInvariantChars(factor, status);
|
||||
trimSpaces(cr->factor, status);
|
||||
if (!offset.isBogus()) cr->offset.appendInvariantChars(offset, status);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue