Skip to content
Snippets Groups Projects
Commit 150fb80f authored by Philip Trettner's avatar Philip Trettner
Browse files

assignment ops now work out-of-the-box for all tg types

parent 85e3ff5d
No related branches found
No related tags found
No related merge requests found
#pragma once
#include "operators/common.hh"
#include "operators/ops_pos.hh"
#include "operators/ops_vec.hh"
#include "operators/ops_size.hh"
......
#pragma once
namespace tg
{
template <class A, class B>
constexpr auto operator+=(A& lhs, B const& rhs) -> decltype(lhs = A(lhs + rhs), lhs)
{
lhs = A(lhs + rhs);
return lhs;
}
template <class A, class B>
constexpr auto operator-=(A& lhs, B const& rhs) -> decltype(lhs = A(lhs - rhs), lhs)
{
lhs = A(lhs - rhs);
return lhs;
}
template <class A, class B>
constexpr auto operator*=(A& lhs, B const& rhs) -> decltype(lhs = A(lhs * rhs), lhs)
{
lhs = A(lhs * rhs);
return lhs;
}
template <class A, class B>
constexpr auto operator/=(A& lhs, B const& rhs) -> decltype(lhs = A(lhs / rhs), lhs)
{
lhs = A(lhs / rhs);
return lhs;
}
template <class A, class B>
constexpr auto operator%=(A& lhs, B const& rhs) -> decltype(lhs = A(lhs % rhs), lhs)
{
lhs = A(lhs % rhs);
return lhs;
}
} // namespace tg
......@@ -29,10 +29,4 @@ TG_IMPL_DEFINE_BINARY_OP_SCALAR(pos, +);
TG_IMPL_DEFINE_BINARY_OP_SCALAR(pos, *);
TG_IMPL_DEFINE_BINARY_OP_SCALAR_DIV(pos);
// assignment ops
TG_IMPL_DEFINE_ASSIGNMENT_OP(pos, +);
TG_IMPL_DEFINE_ASSIGNMENT_OP(pos, -);
TG_IMPL_DEFINE_ASSIGNMENT_OP(pos, *);
TG_IMPL_DEFINE_ASSIGNMENT_OP(pos, /);
} // namespace tg
......@@ -23,10 +23,4 @@ TG_IMPL_DEFINE_BINARY_OP_SCALAR(size, -);
TG_IMPL_DEFINE_BINARY_OP_SCALAR(size, +);
TG_IMPL_DEFINE_BINARY_OP_SCALAR(size, *);
TG_IMPL_DEFINE_BINARY_OP_SCALAR_DIV(size);
// assignment ops
TG_IMPL_DEFINE_ASSIGNMENT_OP(size, +);
TG_IMPL_DEFINE_ASSIGNMENT_OP(size, -);
TG_IMPL_DEFINE_ASSIGNMENT_OP(size, *);
TG_IMPL_DEFINE_ASSIGNMENT_OP(size, /);
} // namespace tg
......@@ -90,11 +90,4 @@ constexpr triangle<D, ScalarT> operator/(triangle<D, ScalarT> const& a, size<D,
r.v2 = a.v2 * inv_b;
return r;
}
// assignment ops
TG_IMPL_DEFINE_ASSIGNMENT_OP(triangle, +);
TG_IMPL_DEFINE_ASSIGNMENT_OP(triangle, -);
TG_IMPL_DEFINE_ASSIGNMENT_OP(triangle, *);
TG_IMPL_DEFINE_ASSIGNMENT_OP(triangle, /);
} // namespace tg
......@@ -23,10 +23,4 @@ TG_IMPL_DEFINE_BINARY_OP_SCALAR(vec, -);
TG_IMPL_DEFINE_BINARY_OP_SCALAR(vec, +);
TG_IMPL_DEFINE_BINARY_OP_SCALAR(vec, *);
TG_IMPL_DEFINE_BINARY_OP_SCALAR_DIV(vec);
// assignment ops
TG_IMPL_DEFINE_ASSIGNMENT_OP(vec, +);
TG_IMPL_DEFINE_ASSIGNMENT_OP(vec, -);
TG_IMPL_DEFINE_ASSIGNMENT_OP(vec, *);
TG_IMPL_DEFINE_ASSIGNMENT_OP(vec, /);
} // namespace tg
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment