diff options
Diffstat (limited to 'src/math')
| -rw-r--r-- | src/math/vector2f.cc | 78 | ||||
| -rw-r--r-- | src/math/vector2f.h | 74 | 
2 files changed, 152 insertions, 0 deletions
diff --git a/src/math/vector2f.cc b/src/math/vector2f.cc new file mode 100644 index 0000000..c6f1504 --- /dev/null +++ b/src/math/vector2f.cc @@ -0,0 +1,78 @@ +/* +   math/vector2f.cc +   This file is part of the Osirion project and is distributed under +   the terms of the GNU General Public License version 2 +*/ + +#include <cstring> + +#include "math/vector2f.h" + +namespace math { + +Vector2f::Vector2f() : x(coord[0]), y(coord[1]) +{ +	clear(); +} + +Vector2f::Vector2f(Vector2f const &other) : x(coord[0]), y(coord[1]) +{ +	assign(other); +} + +Vector2f::Vector2f(float const x, float const y) : x(coord[0]), y(coord[1]) +{ +	assign(x, y); +} + +void Vector2f::clear() +{ +	memset(coord, 0, sizeof(coord)); +} + +void Vector2f::assign(Vector2f const &other) +{ +	memcpy(coord, other.coord, sizeof(coord)); +} + +void Vector2f::assign(float const x, float const y) +{ +	coord[0] = x; +	coord[1] = y; +} + +Vector2f &Vector2f::operator=(Vector2f const &other) +{ +	assign(other); +	return (*this); +} + +Vector2f &Vector2f::operator+=(Vector2f const &other) +{ +	coord[0] += other.coord[0]; +	coord[1] += other.coord[1]; +	return (*this); +} + +Vector2f &Vector2f::operator-=(Vector2f const &other) +{ +	coord[0] -= other.coord[0]; +	coord[1] -= other.coord[1]; +	return (*this); +} + +Vector2f Vector2f::operator-(Vector2f const &other) const +{ +	Vector2f v(*this); +	v -= other; +	return v; +} + +Vector2f Vector2f::operator+(Vector2f const &other) const +{ +	Vector2f v(*this); +	v += other; +	return v; +} + +} diff --git a/src/math/vector2f.h b/src/math/vector2f.h new file mode 100644 index 0000000..87f61a8 --- /dev/null +++ b/src/math/vector2f.h @@ -0,0 +1,74 @@ +/* +   math/vector2f.h +   This file is part of the Osirion project and is distributed under +   the terms of the GNU General Public License version 2 +*/ + +#ifndef __INCLUDED_MATH_VECTOR2F_H__ +#define __INCLUDED_MATH_VECTOR2F_H__ + +#include <iostream> + +namespace math { + +/// a point or vector in 2D space +class Vector2f { + +public: +	/// default constructor +	Vector2f(); +	/// assignment constructor +	Vector2f(float const x, float const y); +	/// copy constructor +	Vector2f(Vector2f const &other); + +	/// assign (0,0) +	void clear(); + +	/// assignment operator +	void assign(float const x, float const y); +	/// assignment operator +	void assign(Vector2f const &other); + +	/// assignment operator +	Vector2f & operator=(Vector2f const &other); + +	/// vector subtraction +	Vector2f & operator-=(Vector2f const &other); + +	/// vector sum +	Vector2f & operator+=(Vector2f const &other); + +	/// vector subtraction +	Vector2f operator-(Vector2f const &other) const; + +	/// vector sum +	Vector2f operator+(Vector2f const &other) const; + + +	/// array operator +	inline float& operator[](const size_t index) { +		return coord[index]; +	} + +	/// array operator +	inline float operator[](const size_t index) const { +		return coord[index]; +	} + +	/// a pointer to the internal data +	inline float *ptr() const { return (float *) coord; } + +	/// x coordinate +	float &x; + +	/// y coordinate +	float &y; + +private: +	float coord[2]; +}; + +} +#endif // __INCLUDED_MATH_VECTOR2F_H__ +  | 
