--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/proto2/Vector.hh Tue Nov 18 22:58:50 2008 +0000
@@ -0,0 +1,76 @@
+#ifndef COOR_H
+#define COOR_H
+
+#include <iostream>
+
+/**
+ * 2D Vector class. Implements standard vector operations.
+ */
+template <typename T>
+class _Vector {
+public:
+ T x;
+ T y;
+
+ _Vector() : x(0), y(0){}
+ /**
+ * @param x Initial x-coordinate.
+ * @param y Initial y-coordinate.
+ */
+ _Vector(T x, T y) : x(x), y(y) {}
+ /**
+ * @param v Other vector to be copied.
+ */
+ _Vector(const _Vector &v) : x(v.x), y(v.y) {}
+
+ void operator=(const _Vector &v) {
+ this->x = v.x;
+ this->y = v.y;
+ }
+ _Vector operator+(const _Vector &v) const {
+ return _Vector(this->x+v.x, this->y+v.y);
+ }
+ _Vector operator-(const _Vector &v) const {
+ return _Vector(this->x-v.x, this->y-v.y);
+ }
+ _Vector operator*(const T &d) const {
+ return _Vector(this->x*d, this->y*d);
+ }
+ _Vector operator/(const T &d) const {
+ return _Vector(this->x/d, this->y/d);
+ }
+ void operator+=(const _Vector &v) {
+ this->x += v.x;
+ this->y += v.y;
+ }
+ void operator-=(const _Vector &v) {
+ this->x -= v.x;
+ this->y -= v.y;
+ }
+ void operator*=(const T &f) {
+ this->x *= f;
+ this->y *= f;
+ }
+ void operator/=(const T &d) {
+ this->x /= d;
+ this->y /= d;
+ }
+};
+
+template<typename T>
+bool operator==(const _Vector<T> &v1, const _Vector<T> &v2) {
+ return ((v1.x == v2.x) && (v1.y == v2.y));
+}
+template<typename T>
+bool operator!=(const _Vector<T> &v1, const _Vector<T> &v2) {
+ return !(v1 == v2);
+}
+
+template<typename T>
+std::ostream& operator<<(std::ostream &s, const _Vector<T> &v) {
+ return s<<"("<<v.x<<", "<<v.y<<")";
+}
+
+typedef _Vector<float> Vector;
+
+#endif