aare/include/aare/Cluster.hpp
AliceMazzoleni99 57bb6c71ae
Some checks failed
Build the package using cmake then documentation / build (ubuntu-latest, 3.12) (push) Failing after 51s
Build the package using cmake then documentation / deploy (push) Has been skipped
ClusterSize should be larger than 1
2025-03-28 14:49:55 +01:00

40 lines
1.2 KiB
C++

/************************************************
* @file Cluster.hpp
* @short definition of cluster, where CoordType (x,y) give
* the cluster center coordinates and data the actual cluster data
* cluster size is given as template parameters
***********************************************/
#pragma once
#include <cstdint>
#include <type_traits>
namespace aare {
// requires clause c++20 maybe update
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
typename CoordType = int16_t,
typename Enable = std::enable_if_t<
std::is_arithmetic_v<T> && std::is_integral_v<CoordType> &&
(ClusterSizeX > 1) && (ClusterSizeY > 1)>>
struct Cluster {
CoordType x;
CoordType y;
T data[ClusterSizeX * ClusterSizeY];
};
// Type Traits for is_cluster_type
template <typename T>
struct is_cluster : std::false_type {}; // Default case: Not a Cluster
// TODO: Do i need the require clause here as well?
template <typename T, uint8_t X, uint8_t Y, typename CoordType>
struct is_cluster<Cluster<T, X, Y, CoordType>> : std::true_type {}; // Cluster
// helper
template <typename T> constexpr bool is_cluster_v = is_cluster<T>::value;
} // namespace aare