class Vector2D<T>
{
public:
	float x, y;
  	///----------------------------------------------------
	/// Constructors 
	///----------------------------------------------------
	
	Vector2D();
	Vector2D([IN] Vector2D<T> other);
	Vector2D([IN] T coords[2]);
	Vector2D(T x, T y);
 

 	///----------------------------------------------------
	/// Vector2D Methods
	///----------------------------------------------------
    
	///Get the dot product of this vector with another. 
	T 	dotProduct ([IN] Vector2D<T> other)
 		
	/// normalize vector
	void normalize(); 
 
    /// get vector length
	T length(); 
	
	/// get start point as array of floats .. []={x,y}
	T[] toArray(); 
 
   	///----------------------------------------------------
	/// the following methods become:
	/// - Operators in C++ .
	///	- Normal methods in Java
	///----------------------------------------------------
 	Vector2D<T> add     ([IN] Vector2D<T> other);
	Vector2D<T> subtract([IN] Vector2D<T> other);
	Vector2D<T> muliply ([IN] float scalar);
	
	///Return : (x * other.x, y * other.y)
	Vector2D<T> multiply([IN] Vector2D<T> other);
 
	Vector2D add_chain     ([IN] Vector2D<T> other); // +=
	Vector2D subtract_chain([IN] Vector2D<T> other); // -=
 
	boolean equals   ([IN] Vector2D rhs);
	/// you can ignore it in java version .. 
	/// in c++ version it will become != .
	boolean notequal([IN] Vector2D rhs);
	
};