/usr/include/dune/common/gmpfield.hh is in libdune-common-dev 2.2.1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | #ifndef DUNE_GMPFIELD_HH
#define DUNE_GMPFIELD_HH
/** \file
* \brief Wrapper for the GNU multiprecision (GMP) library
*/
#include <iostream>
#if HAVE_GMP
#include <gmpxx.h>
namespace Dune
{
template< unsigned int precision >
class GMPField
: public mpf_class
{
typedef mpf_class Base;
public:
GMPField ()
: Base(0,precision)
{}
template< class T >
GMPField ( const T &v )
: Base( v,precision )
{}
/*
GMPField &operator=(const GMPField &other)
{
Base(*this) = Base(other);
return *this;
}
*/
// type conversion operators
operator double () const
{
return this->get_d();
}
operator float () const
{
return this->get_d();
}
operator mpf_class () const
{
return static_cast<const mpf_class&>(*this);
}
};
template< unsigned int precision >
inline GMPField< precision >
operator+ ( const GMPField< precision > &a, const GMPField< precision > &b )
{
typedef mpf_class F;
return ((const F &)a + (const F &)b);
}
template< unsigned int precision >
inline GMPField< precision >
operator- ( const GMPField< precision > &a, const GMPField< precision > &b )
{
typedef mpf_class F;
return ((const F &)a - (const F &)b);
}
template< unsigned int precision >
inline GMPField< precision >
operator- ( const GMPField< precision > &a )
{
typedef mpf_class F;
return -((const F &)a);
}
template< unsigned int precision >
inline GMPField< precision >
operator* ( const GMPField< precision > &a, const GMPField< precision > &b )
{
typedef mpf_class F;
return ((const F &)a * (const F &)b);
}
template< unsigned int precision >
inline GMPField< precision >
operator/ ( const GMPField< precision > &a, const GMPField< precision > &b )
{
typedef mpf_class F;
return ((const F &)a / (const F &)b);
}
template< unsigned int precision >
inline std::ostream &
operator<< ( std::ostream &out, const GMPField< precision > &value )
{
return out << static_cast<const mpf_class&>(value);
}
}
namespace std
{
template< unsigned int precision >
inline Dune::GMPField< precision >
sqrt ( const Dune::GMPField< precision > &a )
{
return Dune::GMPField< precision >(sqrt(static_cast<const mpf_class&>(a)));
}
template< unsigned int precision >
inline Dune::GMPField< precision >
abs ( const Dune::GMPField< precision > &a )
{
return Dune::GMPField< precision >( abs( static_cast< const mpf_class & >( a ) ) );
}
}
#endif // HAVE_GMP
#endif // #ifndef DUNE_GMPFIELD_HH
|