00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00019
00020 #ifndef KET_H
00021 #define KET_H
00022
00023 #ifdef WIN32
00024 #define EXPORTED_FUNCTION __declspec(dllexport)
00025 #else
00026 #define EXPORTED_FUNCTION
00027 #endif
00028
00029 #include <iostream>
00030 #include <cassert>
00031 #include <complex>
00032 using namespace std;
00033
00034 class Bra;
00035 class QOperator;
00036
00038
00039 class EXPORTED_FUNCTION Ket {
00040 private:
00041 int dim;
00042 complex<double> * Vtab;
00043 public:
00044 Ket(int dim_i = 1);
00045 Ket(int dim_i,complex<double> *Vtab_i);
00046 Ket(const Ket & v);
00047 ~Ket();
00048
00049
00050 int getdim() const { return dim; }
00051 void redim(int ndim);
00052
00053
00054 Bra getbra() const;
00055 complex<double> getscalarproduct(Ket right) const;
00056 double getnorme() const;
00057 void print() const;
00058
00060 complex<double> & operator() (int i) {
00061 assert(i >= 1 && i <= dim);
00062 return Vtab[i-1];
00063 }
00064
00066 complex<double> operator() (int i) const {
00067 assert(i >= 1 && i <= dim);
00068 return Vtab[i-1];
00069 }
00070
00071
00072 const Ket & operator= (const Ket & v);
00073 Ket operator+ (const Ket & v) const;
00074 Ket operator- (const Ket & v) const;
00075 void operator+=(const Ket & v);
00076 friend EXPORTED_FUNCTION Ket operator* (complex<double> a, const Ket & v);
00077 friend EXPORTED_FUNCTION Ket operator* (double a, const Ket & v);
00078 friend EXPORTED_FUNCTION Ket operator* (const Ket & v,complex<double> a);
00079 friend EXPORTED_FUNCTION Ket operator* (const Ket & v, double a);
00080 friend EXPORTED_FUNCTION Ket operator/ (const Ket & v, complex<double> a);
00081 friend EXPORTED_FUNCTION Ket operator/ (const Ket & v, double a);
00082 friend EXPORTED_FUNCTION complex<double> operator*(const Bra & bra, const Ket & ket);
00083 friend EXPORTED_FUNCTION QOperator operator*(const Ket & ket, const Bra & bra);
00084 friend EXPORTED_FUNCTION std::ostream & operator<< (std::ostream & out, const Ket & v);
00085 };
00086
00087 #endif