The following standard data types are defined in AccuBEM library:
vec3 class represents the vector with 3 components, i.e. the point in $\mathbb{R}^3$.
// the class that implements the vector holding the 3 components class vec3 { public: vec3(); vec3( const vec3& other ); vec3( double _x, double _y, double _z ); vec3& operator = ( const vec3& other ); vec3& operator += ( const vec3& other ); vec3& operator -= ( const vec3& other ); vec3& operator *= ( double c ); vec3& operator /= ( double c ); double mag() const; // magnitude of the vector public: double x; double y; double z; }; // operators for vec3 vec3 operator + ( const vec3& a, const vec3& b ); vec3 operator - ( const vec3& a, const vec3& b ); vec3 operator * ( const vec3& a, double c ); vec3 operator * ( double c, const vec3& a ); vec3 operator / ( const vec3& a, double c ); double dot( const vec3& a, const vec3& b ); // dot product vec3 cross( const vec3& a, const vec3& b ); // cross product vec3 norm( const vec3& a ); // normalize vector
The dcomplex class holds two double type elements that represent real and imaginary components of the complex number. It defines stanard operators over complex number such as +,-,*,/ and the complex conjugate operator ~.
// the class implements the complex number which has both // real and imaginary part defined in IEEE double format class dcomplex { public: dcomplex(); dcomplex( double real, double imaginary ); dcomplex( double real ); dcomplex( const dcomplex& o ); dcomplex& operator = ( const dcomplex& other ); dcomplex& operator = ( double other ); dcomplex& operator += ( const dcomplex& other ); dcomplex& operator -= ( const dcomplex& other ); dcomplex& operator *= ( const dcomplex& other ); dcomplex& operator /= ( const dcomplex& other ); double mag() const; public: double re; double im; }; // operators for dcomplex dcomplex operator ~ ( const dcomplex& o ); // complex conjugate operator dcomplex operator + ( const dcomplex& a, const dcomplex& b ); dcomplex operator - ( const dcomplex& a, const dcomplex& b ); dcomplex operator * ( const dcomplex& a, const dcomplex& b ); dcomplex operator / ( const dcomplex& a, const dcomplex& b );