lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] valyuta/002 594bd68 07/14: Allow floating currency::


From: Greg Chicares
Subject: [lmi-commits] [lmi] valyuta/002 594bd68 07/14: Allow floating currency::data_type
Date: Thu, 17 Sep 2020 16:27:15 -0400 (EDT)

branch: valyuta/002
commit 594bd68831bdee3ca54f076a6cab33e1a687d4b1
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Allow floating currency::data_type
    
    A macro toggle (as opposed to std::is_integral(), say) is justified
    because it is desirable to inhibit warnings (with #pragma) as narrowly
    as possible.
---
 currency.hpp | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/currency.hpp b/currency.hpp
index 8c0825a..4321525 100644
--- a/currency.hpp
+++ b/currency.hpp
@@ -32,9 +32,14 @@
 #include <iostream>                     // ostream
 #include <vector>
 
-#if defined __GNUC__
-#   pragma GCC diagnostic ignored "-Wuseless-cast"
-#endif // defined __GNUC__
+#define CURRENCY_HAS_INTEGER_DATATYPE
+
+#if !defined CURRENCY_HAS_INTEGER_DATATYPE
+#   if defined __GNUC__
+#       pragma GCC diagnostic push
+#       pragma GCC diagnostic ignored "-Wuseless-cast"
+#   endif // defined __GNUC__
+#endif // !CURRENCY_HAS_INTEGER_DATATYPE
 
 class currency
 {
@@ -42,9 +47,12 @@ class currency
     friend class currency_test;
 
   public:
-//  using data_type = double;
-//  using data_type = long double;
+#if defined CURRENCY_HAS_INTEGER_DATATYPE
     using data_type = std::int64_t;
+#else  // !defined CURRENCY_HAS_INTEGER_DATATYPE
+//  using data_type = long double;
+    using data_type = double;
+#endif // !defined CURRENCY_HAS_INTEGER_DATATYPE
 
     static constexpr int cents_digits = 2;
     static constexpr int cents_per_dollar = 100; // 10 ^ cents_digits
@@ -233,4 +241,10 @@ inline std::vector<double> doubleize(std::vector<currency> 
const& z)
     return r;
 }
 
+#if !defined CURRENCY_HAS_INTEGER_DATATYPE
+#   if defined __GNUC__
+#       pragma GCC diagnostic pop
+#   endif // defined __GNUC__
+#endif // !CURRENCY_HAS_INTEGER_DATATYPE
+
 #endif // currency_hpp



reply via email to

[Prev in Thread] Current Thread [Next in Thread]