#ifndef COMPLEXOBJECT_H
#define COMPLEXOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif

/* Complex number structure */

typedef struct {
   double real;
   double imag;
} complex;

/* Operations on complex numbers from complexmodule.c */

extern complex c_sum();
extern complex c_diff();
extern complex c_neg();
extern complex c_prod();
extern complex c_quot();
extern complex c_pow();


/* Complex object interface */

/*
PyComplexObject represents a complex number with double-precision
real and imaginary parts.
*/

typedef struct {
	PyObject_HEAD
	complex cval;
} PyComplexObject;     

extern DL_IMPORT(PyTypeObject) PyComplex_Type;

#define PyComplex_Check(op) ((op)->ob_type == &PyComplex_Type)

extern PyObject *PyComplex_FromCComplex Py_PROTO((complex));
extern PyObject *PyComplex_FromDoubles Py_PROTO((double real, double imag));

extern double PyComplex_RealAsDouble Py_PROTO((PyObject *op));
extern double PyComplex_ImagAsDouble Py_PROTO((PyObject *op));
extern complex PyComplex_AsCComplex Py_PROTO((PyObject *op));

#ifdef __cplusplus
}
#endif
#endif /* !COMPLEXOBJECT_H */
