summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Gayot <og@satcom1.com>2017-11-18 17:21:59 +0100
committerOlivier Gayot <og@satcom1.com>2017-11-19 16:15:32 +0100
commit615b8a00aedb3363b4749f706d6df51846b743ac (patch)
treef4b92d89e803a1021204d9bd8a5de49ea39b6d9e
parent0916e5446434acd1a3a8384a3e9b1d935f654140 (diff)
Allow conversion of number to 32 bits integer
The method to_uint32() converts a number to a 32-bits-wide integer. The function throws if number cannot be represented using only a single 32-bits-wide integer. Signed-off-by: Olivier Gayot <og@satcom1.com>
-rw-r--r--number.cpp10
-rw-r--r--number.h8
2 files changed, 18 insertions, 0 deletions
diff --git a/number.cpp b/number.cpp
index fcc6dc0..ae4b167 100644
--- a/number.cpp
+++ b/number.cpp
@@ -51,6 +51,16 @@ number::to_dec_string() const
return ss.str();
}
+std::uint32_t
+number::to_uint32() const
+{
+ if (*this > UINT32_MAX) {
+ throw std::out_of_range("> UINT32_MAX");
+ }
+
+ return (*this == 0) ? 0 : _operands.front();
+}
+
/* }}} */
/* Operations {{{ */
diff --git a/number.h b/number.h
index 189011d..d93ed70 100644
--- a/number.h
+++ b/number.h
@@ -26,6 +26,14 @@ public:
std::string to_dec_string() const;
/**
+ * \brief Return a 32-bits-wide integer that corresponds to this number.
+ *
+ * \throws std::out_of_range The number cannot be represented by a single
+ * 32-bits-wide integer.
+ */
+ std::uint32_t to_uint32() const;
+
+ /**
* \brief Return the result of the addition of a number and this number.
*
* \param n The number to add to this number.