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

		return out;
	}
};

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

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

	ecuda::matrix<Coordinate> deviceMatrix( 10, 20 );
	deviceMatrix.assign( hostVector.begin(), hostVector.end() );

	ecuda::vector<Coordinate> deviceVector1( 200 );
	linearize<<<1,1>>>( deviceMatrix, deviceVector1 );
	CUDA_CHECK_ERRORS();
	CUDA_CALL( cudaDeviceSynchronize() );
	std::vector<Coordinate> hostVector2( 200 );
	deviceVector1 >> hostVector2;
	for( std::size_t i = 0; i < hostVector2.size(); ++i ) {
		std::cout << "LINEAR MATRIX " << hostVector2[i] << std::endl;
	}

	ecuda::vector<Coordinate> deviceVector2( 200 );
	linearize<<<1,1>>>( deviceCube, deviceVector2 );
	CUDA_CHECK_ERRORS();
	CUDA_CALL( cudaDeviceSynchronize() );
	std::vector<Coordinate> hostVector3( 200 );
	deviceVector2 >> hostVector3;
	for( std::size_t i = 0; i < hostVector3.size(); ++i ) {
		std::cout << "LINEAR CUBE " << hostVector3[i] << std::endl;
	}


