37 lines
886 B
C++
37 lines
886 B
C++
#pragma once
|
|||
|
|
|
||
|
|
#include <cstddef>
|
||
|
|
#include <string>
|
||
|
|
#include <type_traits>
|
||
|
|
#include <vector>
|
||
|
|
|
||
|
|
namespace cpp17 {
|
||
|
|
|
||
|
|
template <typename T>
|
||
|
|
[[nodiscard]] constexpr auto type_name() -> const char* {
|
||
|
|
if constexpr (std::is_integral_v<T>) {
|
||
|
|
return "integral";
|
||
|
|
} else if constexpr (std::is_floating_point_v<T>) {
|
||
|
|
return "floating";
|
||
|
|
} else {
|
||
|
|
return "other";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
template <typename Container>
|
||
|
|
[[nodiscard]] auto element_count(const Container& container) -> std::size_t {
|
||
|
|
if constexpr (std::is_member_function_pointer_v<decltype(&Container::size)>) {
|
||
|
|
return container.size();
|
||
|
|
} else {
|
||
|
|
std::size_t count = 0;
|
||
|
|
for ([[maybe_unused]] const auto& item : container) {
|
||
|
|
++count;
|
||
|
|
}
|
||
|
|
return count;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
[[nodiscard]] auto stringify_ints(const std::vector<int>& data) -> std::string;
|
||
|
|
|
||
|
|
} // namespace cpp17
|