Skip to content

Commit

Permalink
Remove rational
Browse files Browse the repository at this point in the history
  • Loading branch information
wlevine committed Jul 7, 2015
1 parent a8ac3e4 commit 09a0733
Show file tree
Hide file tree
Showing 29 changed files with 280 additions and 1,182 deletions.
55 changes: 0 additions & 55 deletions ext/nmatrix/data/complex.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@
namespace nm {

class RubyObject;
template <typename IntType> class Rational;
template <typename Type> class Complex;

typedef Complex<float32_t> Complex64;
Expand Down Expand Up @@ -84,9 +83,6 @@ class Complex {
template <typename ComplexType>
inline Complex(const Complex<ComplexType>& other) : r(other.r), i(other.i) {}

template <typename IntType, typename = typename std::enable_if<std::is_integral<IntType>::value>::type>
inline Complex(const Rational<IntType>& other) : r(Type(other.n) / Type(other.d)), i(0) {}

Complex(const RubyObject& other);

/*
Expand Down Expand Up @@ -212,40 +208,6 @@ class Complex {
return Complex<OtherType>((OtherType)this->r, (OtherType)this->i);
}

/////////////////////////////////
// Complex-Rational Operations //
/////////////////////////////////

template <typename RationalType>
inline Complex<Type> operator+(const Rational<RationalType>& other) const {
return *this + Complex<Type>(other);
}

template <typename RationalType>
inline Complex<Type> operator-(const Rational<RationalType>& other) const {
return *this - Complex<Type>(other);
}

template <typename RationalType>
inline Complex<Type> operator*(const Rational<RationalType>& other) const {
return *this * Complex<Type>(other);
}

template <typename RationalType>
inline Complex<Type> operator/(const Rational<RationalType>& other) const {
return *this / Complex<Type>(other);
}

template <typename RationalType, typename = typename std::enable_if<std::is_integral<RationalType>::value>::type>
inline bool operator!=(const Rational<RationalType>& other) const {
return *this != Complex<Type>(other);
}

template <typename RationalType, typename = typename std::enable_if<std::is_integral<RationalType>::value>::type>
inline bool operator==(const Rational<RationalType>& other) const {
return *this == Complex<Type>(other);
}

///////////////////////////////
// Complex-Native Operations //
///////////////////////////////
Expand Down Expand Up @@ -306,23 +268,6 @@ class Complex {
}
};


/////////////////////////////////
// Rational-Complex Operations //
/////////////////////////////////


template <typename IntType, typename ComplexType, typename = typename std::enable_if<std::is_integral<IntType>::value>::type>
inline bool operator==(const Rational<IntType>& left, const Complex<ComplexType>& right) {
return Complex<ComplexType>(left) == right;
}

template <typename IntType, typename ComplexType, typename = typename std::enable_if<std::is_integral<IntType>::value>::type>
inline bool operator!=(const Rational<IntType>& left, const Complex<ComplexType>& right) {
return Complex<ComplexType>(left) != right;
}


///////////////////////////////
// Native-Complex Operations //
///////////////////////////////
Expand Down
53 changes: 10 additions & 43 deletions ext/nmatrix/data/data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,6 @@ const char* const DTYPE_NAMES[nm::NUM_DTYPES] = {
"float64",
"complex64",
"complex128",
"rational32",
"rational64",
"rational128",
"object"
};

Expand All @@ -122,27 +119,21 @@ const size_t DTYPE_SIZES[nm::NUM_DTYPES] = {
sizeof(float64_t),
sizeof(nm::Complex64),
sizeof(nm::Complex128),
sizeof(nm::Rational32),
sizeof(nm::Rational64),
sizeof(nm::Rational128),
sizeof(nm::RubyObject)
};


const nm::dtype_t Upcast[nm::NUM_DTYPES][nm::NUM_DTYPES] = {
{ nm::BYTE, nm::INT16, nm::INT16, nm::INT32, nm::INT64, nm::FLOAT32, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RATIONAL32, nm::RATIONAL64, nm::RATIONAL128, nm::RUBYOBJ},
{ nm::INT16, nm::INT8, nm::INT16, nm::INT32, nm::INT64, nm::FLOAT32, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RATIONAL32, nm::RATIONAL64, nm::RATIONAL128, nm::RUBYOBJ},
{ nm::INT16, nm::INT16, nm::INT16, nm::INT32, nm::INT64, nm::FLOAT32, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RATIONAL32, nm::RATIONAL64, nm::RATIONAL128, nm::RUBYOBJ},
{ nm::INT32, nm::INT32, nm::INT32, nm::INT32, nm::INT64, nm::FLOAT32, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RATIONAL32, nm::RATIONAL64, nm::RATIONAL128, nm::RUBYOBJ},
{ nm::INT64, nm::INT64, nm::INT64, nm::INT64, nm::INT64, nm::FLOAT32, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RATIONAL32, nm::RATIONAL64, nm::RATIONAL128, nm::RUBYOBJ},
{ nm::FLOAT32, nm::FLOAT32, nm::FLOAT32, nm::FLOAT32, nm::FLOAT32, nm::FLOAT32, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::FLOAT64, nm::FLOAT64, nm::FLOAT64, nm::RUBYOBJ},
{ nm::FLOAT64, nm::FLOAT64, nm::FLOAT64, nm::FLOAT64, nm::FLOAT64, nm::FLOAT64, nm::FLOAT64, nm::COMPLEX128, nm::COMPLEX128, nm::FLOAT64, nm::FLOAT64, nm::FLOAT64, nm::RUBYOBJ},
{ nm::COMPLEX64, nm::COMPLEX64, nm::COMPLEX64, nm::COMPLEX64, nm::COMPLEX64, nm::COMPLEX64, nm::COMPLEX128, nm::COMPLEX64, nm::COMPLEX128, nm::COMPLEX64, nm::COMPLEX64, nm::COMPLEX64, nm::RUBYOBJ},
{ nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::RUBYOBJ},
{ nm::RATIONAL32, nm::RATIONAL32, nm::RATIONAL32, nm::RATIONAL32, nm::RATIONAL32, nm::FLOAT64, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RATIONAL32, nm::RATIONAL64, nm::RATIONAL128, nm::RUBYOBJ},
{ nm::RATIONAL64, nm::RATIONAL64, nm::RATIONAL64, nm::RATIONAL64, nm::RATIONAL64, nm::FLOAT64, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RATIONAL64, nm::RATIONAL64, nm::RATIONAL128, nm::RUBYOBJ},
{ nm::RATIONAL128, nm::RATIONAL128, nm::RATIONAL128, nm::RATIONAL128, nm::RATIONAL128, nm::FLOAT64, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RATIONAL128, nm::RATIONAL128, nm::RATIONAL128, nm::RUBYOBJ},
{ nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ}
{ nm::BYTE, nm::INT16, nm::INT16, nm::INT32, nm::INT64, nm::FLOAT32, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RUBYOBJ},
{ nm::INT16, nm::INT8, nm::INT16, nm::INT32, nm::INT64, nm::FLOAT32, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RUBYOBJ},
{ nm::INT16, nm::INT16, nm::INT16, nm::INT32, nm::INT64, nm::FLOAT32, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RUBYOBJ},
{ nm::INT32, nm::INT32, nm::INT32, nm::INT32, nm::INT64, nm::FLOAT32, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RUBYOBJ},
{ nm::INT64, nm::INT64, nm::INT64, nm::INT64, nm::INT64, nm::FLOAT32, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RUBYOBJ},
{ nm::FLOAT32, nm::FLOAT32, nm::FLOAT32, nm::FLOAT32, nm::FLOAT32, nm::FLOAT32, nm::FLOAT64, nm::COMPLEX64, nm::COMPLEX128, nm::RUBYOBJ},
{ nm::FLOAT64, nm::FLOAT64, nm::FLOAT64, nm::FLOAT64, nm::FLOAT64, nm::FLOAT64, nm::FLOAT64, nm::COMPLEX128, nm::COMPLEX128, nm::RUBYOBJ},
{ nm::COMPLEX64, nm::COMPLEX64, nm::COMPLEX64, nm::COMPLEX64, nm::COMPLEX64, nm::COMPLEX64, nm::COMPLEX128, nm::COMPLEX64, nm::COMPLEX128, nm::RUBYOBJ},
{ nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::COMPLEX128, nm::RUBYOBJ},
{ nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ, nm::RUBYOBJ}
};


Expand Down Expand Up @@ -196,18 +187,6 @@ void rubyval_to_cval(VALUE val, nm::dtype_t dtype, void* loc) {
*reinterpret_cast<Complex128*>(loc) = RubyObject(val).to<Complex128>();
break;

case RATIONAL32:
*reinterpret_cast<Rational32*>(loc) = RubyObject(val).to<Rational32>();
break;

case RATIONAL64:
*reinterpret_cast<Rational64*>(loc) = RubyObject(val).to<Rational64>();
break;

case RATIONAL128:
*reinterpret_cast<Rational128*>(loc) = RubyObject(val).to<Rational128>();
break;

case RUBYOBJ:
*reinterpret_cast<VALUE*>(loc) = val;
//rb_raise(rb_eTypeError, "Attempting a bad conversion from a Ruby value.");
Expand Down Expand Up @@ -253,15 +232,6 @@ nm::RubyObject rubyobj_from_cval(void* val, nm::dtype_t dtype) {
case COMPLEX128:
return RubyObject(*reinterpret_cast<Complex128*>(val));

case RATIONAL32:
return RubyObject(*reinterpret_cast<Rational32*>(val));

case RATIONAL64:
return RubyObject(*reinterpret_cast<Rational64*>(val));

case RATIONAL128:
return RubyObject(*reinterpret_cast<Rational128*>(val));

default:
try {
throw std::logic_error("Cannot create ruby object");
Expand Down Expand Up @@ -295,9 +265,6 @@ void* rubyobj_to_cval(VALUE val, nm::dtype_t dtype) {
void nm_init_data() {
volatile VALUE t = INT2FIX(1);
volatile nm::RubyObject obj(t);
volatile nm::Rational32 x(const_cast<nm::RubyObject&>(obj));
volatile nm::Rational64 y(const_cast<nm::RubyObject&>(obj));
volatile nm::Rational128 z(const_cast<nm::RubyObject&>(obj));
volatile nm::Complex64 a(const_cast<nm::RubyObject&>(obj));
volatile nm::Complex128 b(const_cast<nm::RubyObject&>(obj));
}
Expand Down
Loading

0 comments on commit 09a0733

Please sign in to comment.