gslpp_vector_complex.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 HEPfit Collaboration
3  * All rights reserved.
4  *
5  * For the licensing terms see doc/COPYING.
6  */
7 
8 #ifndef GSLPP_VECTOR_COMPLEX_H
9 #define GSLPP_VECTOR_COMPLEX_H
10 #include <iostream>
11 #ifndef __GSL_VECTOR_COMPLEX_DOUBLE_H__
12 #include <gsl/gsl_vector_complex_double.h>
13 #endif
14 #ifndef GSLPP_COMPLEX_H
15 #include "gslpp_complex.h"
16 #endif
17 #ifndef GSLPP_VECTOR_BASE_H
18 #include "gslpp_vector_base.h"
19 #endif
20 
21 namespace gslpp
22 {
32  template <>
33  class vector<complex>
34  {
35  gsl_vector_complex *_vector;
36 
37  public:
39  vector(const size_t& size, const complex& z);
40  vector(const size_t& size, const double& a);
42  vector(const vector<complex>& v);
43  vector(const vector<double>& v);
44  vector(const gsl_vector_complex& v);
45  vector(const gsl_vector_complex* v);
47  ~vector();
49  const complex operator()(const size_t& i) const;
51 // complex& operator()(const size_t& i);
53  vector<complex>& operator=(const vector<complex>& v);
54  vector<complex>& operator=(double a);
56  void assign(const size_t& i, const complex& z);
57  void assign(const size_t& i, const double& a);
59  size_t size() const;
61  double mod() const;
63  vector<complex> conjugate() const;
65  vector<double> real() const;
67  vector<double> imag() const;
69  gsl_vector_complex* as_gsl_type_ptr() const;
70  gsl_vector_complex& as_gsl_type();
71  const gsl_vector_complex& as_gsl_type() const;
73  vector<complex> operator-() const;
81 // vector<complex> operator^(const vector<complex>& v);
83  vector<complex>& operator+=(const vector<complex>& v);
85  vector<complex>& operator-=(const vector<complex>& v);
95  vector<complex>& operator+=(const complex& z);
97  vector<complex>& operator-=(const complex& z);
99  vector<complex>& operator*=(const complex& z);
101  vector<complex>& operator/=(const complex& z);
103  vector<complex> operator+(const double& a);
105  vector<complex> operator-(const double& a);
107  vector<complex> operator*(const double& a);
109  vector<complex> operator/(const double& a);
111  vector<complex>& operator+=(const double& a);
113  vector<complex>& operator-=(const double& a);
115  vector<complex>& operator*=(const double& a);
117  vector<complex>& operator/=(const double& a);
118 
120  friend std::ostream& operator<<(std::ostream& output, const vector<complex>& v);
121 
131  friend vector<complex> operator+(const complex& z, vector<complex> v);
132 
139  friend vector<complex> operator-(const complex& z, vector<complex> v);
140 
147  friend vector<complex> operator*(const complex& z, vector<complex> v);
148 
155  friend vector<complex> operator+(const double& a, vector<complex> v);
156 
163  friend vector<complex> operator-(const double& a, vector<complex> v);
164 
171  friend vector<complex> operator*(const double& a, vector<complex> v);
174  };
175 }
176 #endif
complex operator*(const double &x1, const complex &z2)
gsl_vector_complex * _vector
A class for constructing and defining operations on complex vectors.
complex operator/(const double &x1, const complex &z2)
A class for constructing and defining operations on real vectors.
A base class for defining operations on vectors, both real and complex.
complex operator+(const double &x1, const complex &z2)
A class for defining operations on and functions of complex numbers.
Definition: gslpp_complex.h:35
complex operator-(const double &x1, const complex &z2)
Complex number, vector and matrix manipulation using GSL.