add essential functionality to DecNum
authorYounies <younies.mahmoud@gmail.com>
Tue, 4 Feb 2020 12:46:53 +0000 (13:46 +0100)
committerYounies <younies.mahmoud@gmail.com>
Tue, 4 Feb 2020 12:46:53 +0000 (13:46 +0100)
icu4c/source/i18n/number_decnum.h
icu4c/source/i18n/number_utils.cpp

index 0c7399dbddd43b539b0183e0245f5f2953d8d629..b1a3245caeb36a31a93899d174a47e9eaf868a71 100644 (file)
@@ -51,10 +51,20 @@ class U_I18N_API DecNum : public UMemory {
 
     void divideBy(const DecNum& rhs, UErrorCode& status);
 
+    void add(const DecNum& rhs, UErrorCode& status);
+
+    void subtract(const DecNum& rhs, UErrorCode& status);
+
     bool isNegative() const;
 
     bool isZero() const;
 
+    bool lessThan(const DecNum& rhs, UErrorCode& status) const;
+
+    bool greaterThan(const DecNum& rhs, UErrorCode& status) const;
+
+    bool equalTo(const DecNum& rhs, UErrorCode& status) const;
+
     void toString(ByteSink& output, UErrorCode& status) const;
 
     inline const decNumber* getRawDecNumber() const {
index 91d7f335cd82d3daa91b4abddffdd115e486b7fc..1c3ba5da9cbbcd08fc039d787eb6ee424ee94b08 100644 (file)
@@ -244,6 +244,20 @@ void DecNum::divideBy(const DecNum& rhs, UErrorCode& status) {
     }
 }
 
+void DecNum::add(const DecNum& rhs, UErrorCode& status) {
+    uprv_decNumberAdd_66(fData, fData, rhs.fData, &fContext);
+    if (fContext.status != 0) {
+        status = U_INTERNAL_PROGRAM_ERROR;
+    }
+}
+
+void DecNum::subtract(const DecNum& rhs, UErrorCode& status) {
+    uprv_decNumberSubtract_66(fData, fData, rhs.fData, &fContext);
+    if (fContext.status != 0) {
+        status = U_INTERNAL_PROGRAM_ERROR;
+    }
+}
+
 bool DecNum::isNegative() const {
     return decNumberIsNegative(fData.getAlias());
 }
@@ -252,6 +266,24 @@ bool DecNum::isZero() const {
     return decNumberIsZero(fData.getAlias());
 }
 
+bool DecNum::lessThan(const DecNum& rhs, UErrorCode& status) const {
+   // return uprv_decNumberCompare_66(fData, fData, rhs.fData, fContext);
+   return false; // TODO(younies): implement this function
+}
+
+bool DecNum::greaterThan(const DecNum& rhs, UErrorCode& status) const {
+   // return uprv_decNumberCompare_66(fData, fData, rhs.fData, fContext);
+   return false; // TODO(younies): implement this function
+}
+
+bool DecNum::equalTo(const DecNum& rhs, UErrorCode& status) const {
+   // return uprv_decNumberCompare_66(fData, fData, rhs.fData, fContext);
+   return false; // TODO(younies): implement this function
+}
+
 void DecNum::toString(ByteSink& output, UErrorCode& status) const {
     if (U_FAILURE(status)) {
         return;