#include <blitz/array.h>
#include <blitz/numinquire.h> // for huge()

using namespace blitz;

// A simple fixed point arithmetic class which represents a point
// in the interval [0,1].
class FixedPoint @{

public:
	  // The type to use for the mantissa
    typedef unsigned int T_mantissa;

    FixedPoint() @{ @}

    FixedPoint(T_mantissa mantissa)
    @{  
        mantissa_ = mantissa;
    @}

    FixedPoint(double value)
    @{
        assert((value >= 0.0) && (value <= 1.0));
        mantissa_ = static_cast<T_mantissa>(value * huge(T_mantissa()));
    @}
   
    FixedPoint operator+(FixedPoint x)
    @{ return FixedPoint(mantissa_ + x.mantissa_); @}

    double value() const
    @{ return mantissa_ / double(huge(T_mantissa())); @}

private:
    T_mantissa mantissa_;
@};

ostream& operator<<(ostream& os, const FixedPoint& a)
@{
    os << a.value();
    return os;
@}

