Merge pull request #34 from younies/tryingdouble_staging

Remove extractUnitInfo from UnitConverter's helpers
This commit is contained in:
Younies Mahmoud 2020-05-04 15:07:05 +02:00 committed by GitHub
commit 0a93866597
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 23 deletions

View file

@ -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);

View file

@ -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);
}
}