#ifndef VECTORSAMPLET_HPP
#define VECTORSAMPLET_HPP

#include <iostream>

template <class T> class vectorsample {
	public:
	T v[2];

	vectorsample() {
	}

	T& operator()(int s) {
		return v[s];
	}

	friend vectorsample operator+(const vectorsample& x, const vectorsample& y) {
		vectorsample r;
		int i;

		for (i=0; i<2; i++) {
			r.v[i] = x.v[i] + y.v[i];
		}

		return r;
	}

	friend vectorsample& operator+=(vectorsample& x, const vectorsample& y) {
		x = x + y;
		return x;
	}

	friend vectorsample operator-(const vectorsample& x, const vectorsample& y) {
		vectorsample r;
		int i;

		for (i=0; i<2; i++) {
			r.v[i] = x.v[i] - y.v[i];
		}

		return r;
	}

	friend vectorsample& operator-=(vectorsample& x, const vectorsample& y) {
		x = x - y;
		return x;
	}

	friend vectorsample operator-(const vectorsample& x) {
		vectorsample r;
		int i;

		for (i=0; i<2; i++) {
			r.v[i] = - x.v[i];
		}

		return r;
	}

	template <class C> friend vectorsample operator*(const vectorsample& x, const C& y) {
		vectorsample r;
		int i;

		for (i=0; i<2; i++) {
			r.v[i] = x.v[i] * y;
		}

		return r;
	}

	template <class C> friend vectorsample operator*(const C& x, const vectorsample& y) {
		vectorsample r;
		int i;

		for (i=0; i<2; i++) {
			r.v[i] = x * y.v[i];
		}

		return r;
	}

	template <class C> friend vectorsample& operator*=(vectorsample& x, const C& y) {
		x = x * y;
		return x;
	}

	friend std::ostream& operator<<(std::ostream& s, const vectorsample& x) {
		s << '(' << x.v[0] << ',' << x.v[1] << ')';
		return s;
	}
};

#endif // VECTORSAMPLET_HPP
