]> granicus.if.org Git - icu/commitdiff
add more functionality to Factor
authorYounies <younies.mahmoud@gmail.com>
Thu, 6 Feb 2020 12:24:35 +0000 (13:24 +0100)
committerYounies <younies.mahmoud@gmail.com>
Thu, 6 Feb 2020 12:24:35 +0000 (13:24 +0100)
icu4c/source/i18n/unitconverter.cpp
icu4c/source/i18n/unitconverter.h

index 43070902006e00cb996b6b35115e4fae93b01edb..d24ec328fcf496c7828cfa75d60c3f436db04ce1 100644 (file)
@@ -20,15 +20,11 @@ namespace {
 
 using number::impl::DecNum;
 
-//////////////////////////
-/// BEGIN DATA LOADING ///
-//////////////////////////
-
 /* Represents a conversion factor */
 struct Factor {
-    DecNum factorNum;
-    DecNum factorDen;
-    DecNum offset;
+    number::impl::DecNum factorNum;
+    number::impl::DecNum factorDen;
+    number::impl::DecNum offset;
 
     int8_t constants[CONSTANTS_COUNT] = {};
 
@@ -37,8 +33,27 @@ struct Factor {
         factorDen.setTo(1.0, status);
         offset.setTo(0.0, status);
     }
+
+    void multiplyBy(const Factor &rhs, UErrorCode &status) {
+        factorNum.multiplyBy(rhs.factorNum, status);
+        factorDen.multiplyBy(rhs.factorDen, status);
+        for (int i = 0; i < CONSTANTS_COUNT; i++)
+            constants[i] += rhs.constants[i];
+        offset.add(rhs.offset, status); // TODO(younies): fix this.
+    }
+
+    void divideBy(const Factor &rhs, UErrorCode &status) {
+        factorNum.divideBy(rhs.factorNum, status);
+        factorDen.divideBy(rhs.factorDen, status);
+        for (int i = 0; i < CONSTANTS_COUNT; i++)
+            constants[i] -= rhs.constants[i]; // TODO(younies): fix this
+    }
 };
 
+//////////////////////////
+/// BEGIN DATA LOADING ///
+//////////////////////////
+
 class UnitConversionRatesSink : public ResourceSink {
   public:
     explicit UnitConversionRatesSink(Factor *conversionFactor) : conversionFactor(conversionFactor) {}
index 9170ce401c0fb19cae328f8bdab1df3d4640b431..83fca54a4bf369688cb5f39fe2e0aa1cd4d14d33 100644 (file)
@@ -139,6 +139,7 @@ struct entry {
 } // namespace temporarily
 
 // Data Skeleton.
+
 enum Constants {
     CONSTANT_FT2M, // ft2m stands for foot to meter.
     CONSTANT_PI,