Skip to content
Snippets Groups Projects

algo: Add skeleton for cbmreco app.

Merged Felix Weiglhofer requested to merge fweig/cbmroot:algo-binary into master
All threads resolved!
Files
17
+ 88
0
/* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
SPDX-License-Identifier: GPL-3.0-only
Authors: Felix Weiglhofer [committer] */
#ifndef CBM_ALGO_BASE_CONFIG_BASETYPES_H
#define CBM_ALGO_BASE_CONFIG_BASETYPES_H
#include <string>
#include <tuple>
#include <vector>
#include "Prelude.h"
namespace cbm::algo::config
{
using BaseTypes = std::tuple<bool, u8, i8, u16, i16, u32, i32, u64, i64, f32, f64, std::string>;
template<typename T, typename Tuple>
struct has_type;
template<typename T, typename... Us>
struct has_type<T, std::tuple<Us...>> : std::disjunction<std::is_same<T, Us>...> {
};
template<typename T>
constexpr bool IsBaseType = has_type<T, BaseTypes>::value;
template<typename T>
constexpr bool IsEnum = std::is_enum_v<T>;
template<typename T, typename = std::enable_if_t<IsBaseType<T>>>
constexpr std::string_view BaseTypeToStr()
{
if constexpr (std::is_same_v<bool, T>) { return "bool"; }
else if constexpr (std::is_same_v<u8, T>) {
return "u8";
}
else if constexpr (std::is_same_v<i8, T>) {
return "i8";
}
else if constexpr (std::is_same_v<u16, T>) {
return "u16";
}
else if constexpr (std::is_same_v<i16, T>) {
return "i16";
}
else if constexpr (std::is_same_v<u32, T>) {
return "u32";
}
else if constexpr (std::is_same_v<i32, T>) {
return "i32";
}
else if constexpr (std::is_same_v<float, T>) {
return "float";
}
else if constexpr (std::is_same_v<std::string, T>) {
return "string";
}
else {
return "unknown";
}
}
template<typename>
struct is_std_vector : std::false_type {
};
template<typename T, typename A>
struct is_std_vector<std::vector<T, A>> : std::true_type {
};
template<typename T>
constexpr bool IsVector = is_std_vector<T>::value;
template<typename>
struct is_std_array : std::false_type {
};
template<typename T, std::size_t N>
struct is_std_array<std::array<T, N>> : std::true_type {
};
template<typename T>
constexpr bool IsArray = is_std_array<T>::value;
} // namespace cbm::algo::config
#endif // CBM_ALGO_BASE_CONFIG_BASETYPES_H
Loading