6#ifndef INCLUDE_VULKANENGINE_UTILITIES_H_
7#define INCLUDE_VULKANENGINE_UTILITIES_H_
9#include <VulkanEngine/Constants.h>
22 return val * Constants::pi<T>() /
static_cast<T
>(180);
31 *seed ^= std::hash<T>()(v) + 0x9e3779b9 + (*seed << 6) + (*seed >> 2);
36template <std::size_t i = 0,
class C,
class... Types>
37typename std::enable_if<i >=
sizeof...(Types), C>::type tupleForEach(
38 const std::tuple<Types...>& t,
45template <
size_t i = 0,
class C,
class... Types>
46 typename std::enable_if <
47 i<
sizeof...(Types), C>::type
49 const std::tuple<Types...>& t,
52 return tupleForEach<i + 1, C, Types...>(t, op);
60template <
typename _Scalar,
int _Rows,
int _Cols,
int _Options,
int _MaxRows,
63 Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>> {
64 typedef Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> T;
65 size_t operator()(T
const& matrix)
const {
67 for (
int i = 0; i < matrix.size(); ++i) {
68 auto elem = *(matrix.data() + i);
69 VulkanEngine::Utilities::hashCombine<typename T::Scalar>(&seed, elem);
77template <
class... TupleArgs>
78struct std::hash<std::tuple<TupleArgs...>> {
79 size_t operator()(
const std::tuple<TupleArgs...>& tuple_value)
const {
81 auto visitor = [&seed](
const auto& element) {
84 VulkanEngine::Utilities::tupleForEach(tuple_value, visitor);
T toRadians(const T &val)
Convert degrees to radian.
Definition: Utilities.h:21
void hashCombine(size_t *seed, const T &v)
Definition: Utilities.h:30
TODO development of this class is in progress.
Definition: Attribute.h:13