Create coordinate mapping information for container.
282{
283 if (!container) {
284 error<std::invalid_argument>(Journal::Component::Kakshya, Journal::Context::Runtime, std::source_location::current(),
285 "Container is null");
286 }
287
288 std::unordered_map<std::string, std::any> mapping_info;
289 const auto dimensions = container->get_dimensions();
290
291 std::vector<std::unordered_map<std::string, std::any>> dim_mappings;
292 dim_mappings.reserve(dimensions.size());
293
294 for (size_t i = 0; i < dimensions.size(); ++i) {
295 std::unordered_map<std::string, std::any> dim_map;
296 dim_map["index"] = i;
297 dim_map["name"] = dimensions[i].name;
298 dim_map["size"] = dimensions[i].size;
299 dim_map["stride"] = dimensions[i].stride;
300 dim_map["role"] = static_cast<int>(dimensions[i].role);
301
302 uint64_t offset = (i == 0) ? 0ULL :
std::accumulate(dimensions.begin(), dimensions.begin() + i, 1ULL, [](uint64_t acc, const auto& d) {
return acc * d.size; });
303 dim_map["offset"] = offset;
304
305 dim_mappings.push_back(std::move(dim_map));
306 }
307
308 mapping_info["dimensions"] = std::move(dim_mappings);
309 mapping_info["total_elements"] = container->get_total_elements();
310 mapping_info["memory_layout"] = static_cast<int>(container->get_memory_layout());
311
313 mapping_info["calculated_strides"] = strides;
314
315 return mapping_info;
316}
std::vector< uint64_t > calculate_strides(const std::vector< DataDimension > &dimensions)
Calculate memory strides for each dimension (row-major order).