HOPS
HOPS class reference
hops_complex.h
Go to the documentation of this file.
1 #ifndef HOPS_COMPLEX_WRAPPER__
2 #define HOPS_COMPLEX_WRAPPER__
3 
4 #ifndef HOPS3_USE_CXX
5  #define USE_C_COMPLEX
6  #ifdef __cplusplus
7  #define USE_CXX_DUMMY
8  #endif
9 #endif
10 
11 #ifdef USE_CXX_DUMMY
12 extern "C"
13 {
14 #endif
15 
16 typedef struct hops_complex_tag /* needed in type_230 */
17 {
18  double real;
19  double imag;
20 }
22 
23 #ifdef USE_C_COMPLEX
24  //using c definition of complex
25  #ifndef USE_CXX_DUMMY //pure c case
26  #include <complex.h>
27  #if defined(_Complex_I) && defined(complex) && defined(I)
28  typedef double _Complex hops_complex_impl;
29  extern const hops_complex_impl cmplx_unit_I;
30  #endif
31  #else //c++ lib is linking against this c-library
32  typedef union hops_complex_impl
33  {
34  struct hops_complex_tag named;
35  double array[2];
36  }
37  hops_complex_impl;
38  extern const hops_complex_impl cmplx_unit_I;
39  #endif
40 #else
41  //using c++ definition of complex
42  #include <complex>
43  typedef std::complex<double> hops_complex_impl;
44  extern const std::complex<double> cmplx_unit_I;
45 #endif
46 
47 //alias to the implementation
48 #define hops_complex hops_complex_impl
49 
50 extern void zero_complex(hops_complex* val);
51 extern void set_complex(hops_complex* val, double real, double imag);
52 extern double abs_complex(hops_complex val);
53 extern double arg_complex(hops_complex val);
54 extern double real_comp(hops_complex val);
55 extern double imag_comp(hops_complex val);
58 
59 #ifdef USE_CXX_DUMMY
60 }
61 #endif
62 
63 
64 #endif /* end of include guard: HOPS_COMPLEX_WRAPPER */
const std::complex< double > cmplx_unit_I
Definition: hops_complex.c:7
hops_complex exp_complex(hops_complex val)
Definition: hops_complex.c:49
hops_complex conjugate(hops_complex val)
Definition: hops_complex.c:78
double imag
Definition: hops_complex.h:19
double real
Definition: hops_complex.h:18
void zero_complex(hops_complex *val)
Definition: hops_complex.c:10
void set_complex(hops_complex *val, double real, double imag)
Definition: hops_complex.c:20
double imag_comp(hops_complex val)
Definition: hops_complex.c:68
double arg_complex(hops_complex val)
Definition: hops_complex.c:39
double real_comp(hops_complex val)
Definition: hops_complex.c:59
double abs_complex(hops_complex val)
Definition: hops_complex.c:29
struct hops_complex_tag hops_scomplex
#define hops_complex
Definition: hops_complex.h:48
Definition: hops_complex.h:17