From 4c5bc46ad9be4e20d8cefd9707282281e1e23694 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Mon, 16 Apr 2018 15:54:51 +1000 Subject: [PATCH] rational: add ostream operator required for upcoming TAP changes --- rational.cpp | 20 ++++++++++++++++---- rational.hpp | 6 ++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/rational.cpp b/rational.cpp index 433ff432..2da4eeaa 100644 --- a/rational.cpp +++ b/rational.cpp @@ -162,8 +162,20 @@ rational::operator/ (const T rhs) const } -//----------------------------------------------------------------------------- -template struct util::rational; -template struct util::rational< int32_t>; +/////////////////////////////////////////////////////////////////////////////// +template +std::ostream& +util::operator<< (std::ostream &os, util::rational val) +{ + return os << val.n << "/" << val.d; +} -template util::rational util::operator/ (uint32_t, util::rational); + +/////////////////////////////////////////////////////////////////////////////// +#define INSTANTIATE(TYPE) \ +template struct util::rational; \ +template util::rational util::operator/ (TYPE, util::rational); \ +template std::ostream& util::operator<< (std::ostream&, util::rational); + +INSTANTIATE(uint32_t) +INSTANTIATE(int32_t) diff --git a/rational.hpp b/rational.hpp index 04758506..4acfa288 100644 --- a/rational.hpp +++ b/rational.hpp @@ -18,6 +18,7 @@ #define __UTIL_RATIONAL_HPP #include +#include namespace util { template @@ -68,6 +69,11 @@ namespace util { { return rhs * lhs; } + + + /////////////////////////////////////////////////////////////////////////// + template + std::ostream& operator<< (std::ostream&, rational); };