rational: add initial stub class

This commit is contained in:
Danny Robson 2014-07-02 15:49:27 +10:00
parent 676c5270b7
commit 763cb667af
3 changed files with 100 additions and 0 deletions

View File

@ -124,6 +124,8 @@ UTIL_FILES = \
random.ipp \
range.cpp \
range.hpp \
rational.cpp \
rational.hpp \
region.cpp \
region.hpp \
si.cpp \

59
rational.cpp Normal file
View File

@ -0,0 +1,59 @@
/*
* This file is part of libgim.
*
* libgim is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* libgim is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with libgim. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2014 Danny Robson <danny@nerdcruft.net>
*/
#include "rational.hpp"
#include <cstdint>
using util::rational;
//-----------------------------------------------------------------------------
template <typename T>
rational<T>::rational (T _n, T _d):
n (_n),
d (_d)
{ ; }
//-----------------------------------------------------------------------------
template <typename T>
bool
rational<T>::operator== (const rational<T> &rhs) {
return rhs.n == n && rhs.d == d;
}
//-----------------------------------------------------------------------------
template <typename T>
rational<T>::operator float (void) const {
return static_cast<float> (n) / d;
}
//-----------------------------------------------------------------------------
template <typename T>
rational<T>::operator double (void) const {
return static_cast<double> (n) / d;
}
//-----------------------------------------------------------------------------
template struct rational<uint32_t>;
template struct rational<int32_t>;

39
rational.hpp Normal file
View File

@ -0,0 +1,39 @@
/*
* This file is part of libgim.
*
* libgim is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* libgim is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with libgim. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2014 Danny Robson <danny@nerdcruft.net>
*/
#ifndef __UTIL_RATIONAL_HPP
#define __UTIL_RATIONAL_HPP
namespace util {
template <typename T>
struct rational {
rational (T _n, T _d);
rational& operator= (const rational&) = default;
bool operator== (const rational&);
explicit operator float (void) const;
explicit operator double (void) const;
T n;
T d;
};
}
#endif