#ifndef SYCL_NEIGHBOR_COVERAGE_SYCL_HPP
#define SYCL_NEIGHBOR_COVERAGE_SYCL_HPP

#include <cstddef>
#include <iostream>

#include <sycl/sycl.hpp>


// Create an exception handler for asynchronous SYCL exceptions
static auto exception_handler = [](sycl::exception_list e_list) {
	for (std::exception_ptr const& e : e_list) {
		try {
			std::rethrow_exception(e);
		}
		catch (std::exception const& e) {
#if _DEBUG
			std::cout << "Failure" << std::endl;
#endif
			std::terminate();
		}
	}
};


template <typename F = double>
class SyclImplementation
{
private:

public:
	/**
	 * Constructor gets the number of points to allocate any supporting data structures of appropriate size.
	 */
	SyclImplementation(std::size_t count)
	{

		// any additional allocation of supporting data structures can be done here
	}

	/**
	 * Computes the coverage of the points by their neighbors closer than given radius.
	 * The results are stored in the coverage vector, which is already sized to the number of points
	 * (and set to zeros).
	 */
	void operator()(const Grid<F, 2> &points, F radius, std::vector<std::size_t> &coverage)
	{

	}
};


#endif