namespace dk { namespace implem { ///--------------------------------------------------------------------- ///Only enabled if Device::MapDimensions is defined and is the same ///as D. The function's name is set to give a hint to the user as to ///why the error has occurred (they are trying to construct a ///TileMapData with a set dimension that is different from the one ///hardcoded in the device being passed in). The actual name could be ///something like get_device_dimensions(). ///--------------------------------------------------------------------- template typename std::enable_if::type err_mismatching_dimension (const Device*) noexcept { return Device::MapDimensions; } ///--------------------------------------------------------------------- ///Only enabled if Device::MapDimensions is not defined. The function's ///name is set to give a hint to the user as to why the error has ///occurred (they are trying to construct a TileMapData with a set ///dimension that is different from the one hardcoded in the device ///being passed in). The actual name could be something like ///get_device_dimensions(). ///--------------------------------------------------------------------- template typename std::enable_if::result == false, std::size_t>::type err_mismatching_dimension (const Device*) noexcept { return 0; } ///--------------------------------------------------------------------- ///--------------------------------------------------------------------- template typename std::enable_if>::type retrieve_map_size_from_device (Device* parDevice) { return parDevice->mapSize(); } ///--------------------------------------------------------------------- ///--------------------------------------------------------------------- template typename std::enable_if::result == false, Vector>::type retrieve_map_size_from_device (Device* parDevice) { return get_map_size_from_device(parDevice); } } //namespace implem ///------------------------------------------------------------------------- ///------------------------------------------------------------------------- template template TileMapData::TileMapData (Device& parDevice) : m_stream(&parDevice), m_mapSize(implem::retrieve_map_size_from_device(&parDevice)), m_deviceHasDim(D == implem::err_mismatching_dimension(&parDevice)) { } ///------------------------------------------------------------------------- ///------------------------------------------------------------------------- template void TileMapData::fetch (std::vector& parOut, const coords& parFrom, const coords& parTo) { //TODO: implement std::cout << "Would fetch data from " << parFrom << " to " << parTo << "\n"; const auto count = implem::area(parTo - parFrom); std::fill_n(std::back_inserter(parOut), count, T()); } ///------------------------------------------------------------------------- ///------------------------------------------------------------------------- template const typename TileMapData::coords& TileMapData::mapSize() const { return m_mapSize; } } //namespace dk