 #include <vector>
 
 #include "../include/ecuda/vector.hpp"
+#include "../include/ecuda/matrix.hpp"
 #include "../include/ecuda/cube.hpp"
 
 struct Coordinate {

	ecuda::cube<Coordinate> deviceCube( 5, 2, 20 );
	deviceCube.assign( hostVector.begin(), hostVector.end() );

	ecuda::vector<Coordinate> deviceVector( 200 );
	linearize<<<1,1>>>( deviceCube, deviceVector );
	CUDA_CHECK_ERRORS();
	CUDA_CALL( cudaDeviceSynchronize() );

	std::vector<Coordinate> hostVector2( 200 );
	deviceVector >> hostVector2;

	for( std::size_t i = 0; i < hostVector2.size(); ++i ) {
		std::cout << "LINEAR " << hostVector2[i] << std::endl;
	}



		return out;
	}
};

__global__ void linearize( const ecuda::matrix<Coordinate> matrix, ecuda::vector<Coordinate> vector ) {
	std::size_t index = 0;
	for( ecuda::matrix<Coordinate>::const_iterator iter = matrix.begin(); iter != matrix.end(); ++iter, ++index ) vector[index] = *iter;
}

__global__ void linearize( const ecuda::cube<Coordinate> cube, ecuda::vector<Coordinate> vector ) {
	std::size_t index = 0;
