annotate DEPENDENCIES/generic/include/boost/polygon/gmp_override.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 /*
Chris@16 2 Copyright 2008 Intel Corporation
Chris@16 3
Chris@16 4 Use, modification and distribution are subject to the Boost Software License,
Chris@16 5 Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 6 http://www.boost.org/LICENSE_1_0.txt).
Chris@16 7 */
Chris@16 8 #ifndef BOOST_POLYGON_GMP_OVERRIDE_HPP
Chris@16 9 #define BOOST_POLYGON_GMP_OVERRIDE_HPP
Chris@16 10 #include <gmpxx.h>
Chris@16 11 namespace boost { namespace polygon {
Chris@16 12
Chris@16 13 class gmp_int {
Chris@16 14 private:
Chris@16 15 inline gmp_int(const mpq_class& input) : v_(input) {}
Chris@16 16 public:
Chris@16 17 inline gmp_int() {}
Chris@16 18 explicit inline gmp_int(long input) : v_(input) {}
Chris@16 19 inline gmp_int(const gmp_int& input) : v_(input.v_) {}
Chris@16 20 inline gmp_int& operator=(const gmp_int& that) {
Chris@16 21 v_ = that.v_;
Chris@16 22 return (*this);
Chris@16 23 }
Chris@16 24 inline gmp_int& operator=(long that) {
Chris@16 25 v_ = that;
Chris@16 26 return (*this);
Chris@16 27 }
Chris@16 28 inline operator int() const {
Chris@16 29 std::cout << "cast\n";
Chris@16 30 mpz_class num = v_.get_num();
Chris@16 31 mpz_class den = v_.get_den();
Chris@16 32 num /= den;
Chris@16 33 return num.get_si();
Chris@16 34 }
Chris@16 35 inline double get_d() const {
Chris@16 36 return v_.get_d();
Chris@16 37 }
Chris@16 38 inline int get_num() const {
Chris@16 39 return v_.get_num().get_si();
Chris@16 40 }
Chris@16 41 inline int get_den() const {
Chris@16 42 return v_.get_den().get_si();
Chris@16 43 }
Chris@16 44 inline bool operator==(const gmp_int& that) const {
Chris@16 45 return v_ == that.v_;
Chris@16 46 }
Chris@16 47 inline bool operator!=(const gmp_int& that) const {
Chris@16 48 return v_ != that.v_;
Chris@16 49 }
Chris@16 50 inline bool operator<(const gmp_int& that) const {
Chris@16 51 bool retval = v_ < that.v_;
Chris@16 52 return retval;
Chris@16 53 }
Chris@16 54 inline bool operator<=(const gmp_int& that) const {
Chris@16 55 return v_ <= that.v_;
Chris@16 56 }
Chris@16 57 inline bool operator>(const gmp_int& that) const {
Chris@16 58 return v_ > that.v_;
Chris@16 59 }
Chris@16 60 inline bool operator>=(const gmp_int& that) const {
Chris@16 61 return v_ >= that.v_;
Chris@16 62 }
Chris@16 63 inline gmp_int operator+(const gmp_int& b) {
Chris@16 64 return gmp_int((*this).v_ + b.v_);
Chris@16 65 }
Chris@16 66 inline gmp_int operator-(const gmp_int& b) {
Chris@16 67 return gmp_int((*this).v_ - b.v_);
Chris@16 68 }
Chris@16 69 inline gmp_int operator*(const gmp_int& b) {
Chris@16 70 return gmp_int((*this).v_ * b.v_);
Chris@16 71 }
Chris@16 72 inline gmp_int operator/(const gmp_int& b) {
Chris@16 73 return gmp_int((*this).v_ / b.v_);
Chris@16 74 }
Chris@16 75 inline gmp_int& operator+=(const gmp_int& b) {
Chris@16 76 (*this).v_ += b.v_;
Chris@16 77 return (*this);
Chris@16 78 }
Chris@16 79 inline gmp_int& operator-=(const gmp_int& b) {
Chris@16 80 (*this).v_ -= b.v_;
Chris@16 81 return (*this);
Chris@16 82 }
Chris@16 83 inline gmp_int& operator*=(const gmp_int& b) {
Chris@16 84 (*this).v_ *= b.v_;
Chris@16 85 return (*this);
Chris@16 86 }
Chris@16 87 inline gmp_int& operator/=(const gmp_int& b) {
Chris@16 88 (*this).v_ /= b.v_;
Chris@16 89 return (*this);
Chris@16 90 }
Chris@16 91 inline gmp_int& operator++() {
Chris@16 92 ++v_;
Chris@16 93 return (*this);
Chris@16 94 }
Chris@16 95 inline gmp_int& operator--() {
Chris@16 96 --v_;
Chris@16 97 return (*this);
Chris@16 98 }
Chris@16 99 inline gmp_int operator++(int) {
Chris@16 100 gmp_int retval(*this);
Chris@16 101 ++(*this);
Chris@16 102 return retval;
Chris@16 103 }
Chris@16 104 inline gmp_int operator--(int) {
Chris@16 105 gmp_int retval(*this);
Chris@16 106 --(*this);
Chris@16 107 return retval;
Chris@16 108 }
Chris@16 109 private:
Chris@16 110 mpq_class v_;
Chris@16 111 };
Chris@16 112
Chris@16 113 template <>
Chris@16 114 struct high_precision_type<int> {
Chris@16 115 typedef mpq_class type;
Chris@16 116 };
Chris@16 117
Chris@16 118 template <>
Chris@16 119 int convert_high_precision_type<int>(const mpq_class& v) {
Chris@16 120 mpz_class num = v.get_num();
Chris@16 121 mpz_class den = v.get_den();
Chris@16 122 num /= den;
Chris@16 123 return num.get_si();
Chris@16 124 };
Chris@16 125
Chris@16 126 }
Chris@16 127 }
Chris@16 128 #endif