summaryrefslogtreecommitdiffstats
path: root/include/qpdf/QIntC.hh
diff options
context:
space:
mode:
Diffstat (limited to 'include/qpdf/QIntC.hh')
-rw-r--r--include/qpdf/QIntC.hh140
1 files changed, 71 insertions, 69 deletions
diff --git a/include/qpdf/QIntC.hh b/include/qpdf/QIntC.hh
index 484bae1a..ce2f47e9 100644
--- a/include/qpdf/QIntC.hh
+++ b/include/qpdf/QIntC.hh
@@ -24,12 +24,12 @@
#include <qpdf/DLL.h>
#include <qpdf/Types.h>
-#include <stdexcept>
+#include <cassert>
#include <iostream>
#include <limits>
-#include <sstream>
-#include <cassert>
#include <locale>
+#include <sstream>
+#include <stdexcept>
#include <type_traits>
// This namespace provides safe integer conversion that detects
@@ -51,9 +51,11 @@ namespace QIntC // QIntC = qpdf Integer Conversion
// throws a range_error otherwise. This class is specialized for
// each permutation of signed/unsigned for the From and To
// classes.
- template <typename From, typename To,
- bool From_signed = std::numeric_limits<From>::is_signed,
- bool To_signed = std::numeric_limits<To>::is_signed>
+ template <
+ typename From,
+ typename To,
+ bool From_signed = std::numeric_limits<From>::is_signed,
+ bool To_signed = std::numeric_limits<To>::is_signed>
class IntConverter
{
};
@@ -62,17 +64,16 @@ namespace QIntC // QIntC = qpdf Integer Conversion
class IntConverter<From, To, false, false>
{
public:
- static To convert(From const& i)
+ static To
+ convert(From const& i)
{
// From and To are both unsigned.
- if (i > std::numeric_limits<To>::max())
- {
+ if (i > std::numeric_limits<To>::max()) {
std::ostringstream msg;
msg.imbue(std::locale::classic());
- msg << "integer out of range converting " << i
- << " from a "
- << sizeof(From) << "-byte unsigned type to a "
- << sizeof(To) << "-byte unsigned type";
+ msg << "integer out of range converting " << i << " from a "
+ << sizeof(From) << "-byte unsigned type to a " << sizeof(To)
+ << "-byte unsigned type";
throw std::range_error(msg.str());
}
return static_cast<To>(i);
@@ -83,18 +84,17 @@ namespace QIntC // QIntC = qpdf Integer Conversion
class IntConverter<From, To, true, true>
{
public:
- static To convert(From const& i)
+ static To
+ convert(From const& i)
{
// From and To are both signed.
if ((i < std::numeric_limits<To>::min()) ||
- (i > std::numeric_limits<To>::max()))
- {
+ (i > std::numeric_limits<To>::max())) {
std::ostringstream msg;
msg.imbue(std::locale::classic());
- msg << "integer out of range converting " << i
- << " from a "
- << sizeof(From) << "-byte signed type to a "
- << sizeof(To) << "-byte signed type";
+ msg << "integer out of range converting " << i << " from a "
+ << sizeof(From) << "-byte signed type to a " << sizeof(To)
+ << "-byte signed type";
throw std::range_error(msg.str());
}
return static_cast<To>(i);
@@ -105,20 +105,19 @@ namespace QIntC // QIntC = qpdf Integer Conversion
class IntConverter<From, To, true, false>
{
public:
- static To convert(From const& i)
+ static To
+ convert(From const& i)
{
// From is signed, and To is unsigned. If i > 0, it's safe to
// convert it to the corresponding unsigned type and to
// compare with To's max.
auto ii = static_cast<typename to_u<From>::type>(i);
- if ((i < 0) || (ii > std::numeric_limits<To>::max()))
- {
+ if ((i < 0) || (ii > std::numeric_limits<To>::max())) {
std::ostringstream msg;
msg.imbue(std::locale::classic());
- msg << "integer out of range converting " << i
- << " from a "
- << sizeof(From) << "-byte signed type to a "
- << sizeof(To) << "-byte unsigned type";
+ msg << "integer out of range converting " << i << " from a "
+ << sizeof(From) << "-byte signed type to a " << sizeof(To)
+ << "-byte unsigned type";
throw std::range_error(msg.str());
}
return static_cast<To>(i);
@@ -129,20 +128,19 @@ namespace QIntC // QIntC = qpdf Integer Conversion
class IntConverter<From, To, false, true>
{
public:
- static To convert(From const& i)
+ static To
+ convert(From const& i)
{
// From is unsigned, and to is signed. Convert To's max to the
// unsigned version of To and compare i against that.
auto maxval = static_cast<typename to_u<To>::type>(
std::numeric_limits<To>::max());
- if (i > maxval)
- {
+ if (i > maxval) {
std::ostringstream msg;
msg.imbue(std::locale::classic());
- msg << "integer out of range converting " << i
- << " from a "
- << sizeof(From) << "-byte unsigned type to a "
- << sizeof(To) << "-byte signed type";
+ msg << "integer out of range converting " << i << " from a "
+ << sizeof(From) << "-byte unsigned type to a " << sizeof(To)
+ << "-byte signed type";
throw std::range_error(msg.str());
}
return static_cast<To>(i);
@@ -152,97 +150,105 @@ namespace QIntC // QIntC = qpdf Integer Conversion
// Specific converters. The return type of each function must match
// the second template parameter to IntConverter.
template <typename T>
- char to_char(T const& i)
+ char
+ to_char(T const& i)
{
return IntConverter<T, char>::convert(i);
}
template <typename T>
- unsigned char to_uchar(T const& i)
+ unsigned char
+ to_uchar(T const& i)
{
return IntConverter<T, unsigned char>::convert(i);
}
template <typename T>
- short to_short(T const& i)
+ short
+ to_short(T const& i)
{
return IntConverter<T, short>::convert(i);
}
template <typename T>
- unsigned short to_ushort(T const& i)
+ unsigned short
+ to_ushort(T const& i)
{
return IntConverter<T, unsigned short>::convert(i);
}
template <typename T>
- int to_int(T const& i)
+ int
+ to_int(T const& i)
{
return IntConverter<T, int>::convert(i);
}
template <typename T>
- unsigned int to_uint(T const& i)
+ unsigned int
+ to_uint(T const& i)
{
return IntConverter<T, unsigned int>::convert(i);
}
template <typename T>
- size_t to_size(T const& i)
+ size_t
+ to_size(T const& i)
{
return IntConverter<T, size_t>::convert(i);
}
template <typename T>
- qpdf_offset_t to_offset(T const& i)
+ qpdf_offset_t
+ to_offset(T const& i)
{
return IntConverter<T, qpdf_offset_t>::convert(i);
}
template <typename T>
- long to_long(T const& i)
+ long
+ to_long(T const& i)
{
- return IntConverter<T, long >::convert(i);
+ return IntConverter<T, long>::convert(i);
}
template <typename T>
- unsigned long to_ulong(T const& i)
+ unsigned long
+ to_ulong(T const& i)
{
- return IntConverter<T, unsigned long >::convert(i);
+ return IntConverter<T, unsigned long>::convert(i);
}
template <typename T>
- long long to_longlong(T const& i)
+ long long
+ to_longlong(T const& i)
{
return IntConverter<T, long long>::convert(i);
}
template <typename T>
- unsigned long long to_ulonglong(T const& i)
+ unsigned long long
+ to_ulonglong(T const& i)
{
return IntConverter<T, unsigned long long>::convert(i);
}
template <typename T>
- void range_check(T const& cur, T const& delta)
+ void
+ range_check(T const& cur, T const& delta)
{
- if ((delta > 0) != (cur > 0))
- {
+ if ((delta > 0) != (cur > 0)) {
return;
}
- if ((delta > 0) &&
- ((std::numeric_limits<T>::max() - cur) < delta))
- {
+ if ((delta > 0) && ((std::numeric_limits<T>::max() - cur) < delta)) {
std::ostringstream msg;
msg.imbue(std::locale::classic());
msg << "adding " << delta << " to " << cur
<< " would cause an integer overflow";
throw std::range_error(msg.str());
- }
- else if ((delta < 0) &&
- ((std::numeric_limits<T>::min() - cur) > delta))
- {
+ } else if (
+ (delta < 0) && ((std::numeric_limits<T>::min() - cur) > delta)) {
std::ostringstream msg;
msg.imbue(std::locale::classic());
msg << "adding " << delta << " to " << cur
@@ -252,25 +258,21 @@ namespace QIntC // QIntC = qpdf Integer Conversion
}
template <typename T>
- void range_check_substract(T const& cur, T const& delta)
+ void
+ range_check_substract(T const& cur, T const& delta)
{
- if ((delta >= 0) == (cur >= 0))
- {
+ if ((delta >= 0) == (cur >= 0)) {
return;
}
- if ((delta > 0) &&
- ((std::numeric_limits<T>::min() + delta) > cur))
- {
+ if ((delta > 0) && ((std::numeric_limits<T>::min() + delta) > cur)) {
std::ostringstream msg;
msg.imbue(std::locale::classic());
msg << "subtracting " << delta << " from " << cur
<< " would cause an integer underflow";
throw std::range_error(msg.str());
- }
- else if ((delta < 0) &&
- ((std::numeric_limits<T>::max() + delta) < cur))
- {
+ } else if (
+ (delta < 0) && ((std::numeric_limits<T>::max() + delta) < cur)) {
std::ostringstream msg;
msg.imbue(std::locale::classic());
msg << "subtracting " << delta << " from " << cur
@@ -278,6 +280,6 @@ namespace QIntC // QIntC = qpdf Integer Conversion
throw std::range_error(msg.str());
}
}
-};
+}; // namespace QIntC
#endif // QINTC_HH