#ifndef CVEC_H
#define CVEC_H
#include<complex>
typedef std::complex<double> Creal;
// test
class Cvec {
public: 
	int size = 0;
	Creal *vec = NULL;
	double& dx;
public:

	//Cvec();
	Cvec(double& dx_in);
	Cvec(const int n, double& dx_in);
	Cvec(const Cvec& in);
	Cvec(double& start, double& dx_in, double& end);
	Cvec(int& start, double& dx_in, int& end);
	~Cvec();

	void init(int n);
	void print();

	Creal scalar(Cvec& rhs);
	double norm();
	//Kurzbeschreibung
	void normalize();
	

	Cvec& operator=(const double& in);
	Cvec& operator=(const Creal& in);
	Cvec& operator=(const Cvec& in);

	Cvec operator+(const Cvec& in);
	Cvec operator+(const double& in);
	Cvec operator+(const Creal& in);

	Cvec operator-(const Cvec& in);
	Cvec operator-(const double& in);
	Cvec operator-(const Creal& in);

	Cvec operator/(const Cvec& in);
	Cvec operator/(const Creal& in);
	Cvec operator/(const double& in);

	Cvec operator*(const Cvec& in);
	Cvec operator*(const Creal& in);
	Cvec operator*(const double& in);

	friend Cvec operator+(const double& d, const Cvec& vin) {
		Cvec out(vin.size,vin.dx);
		for (int i = 0; i < vin.size; i++) out.vec[i] = vin.vec[i] + d;
		return out;
	};

	Creal& operator[](int i);
	Creal& operator[](int i) const;

	void save(std::string filename);
};


#endif