Browse Source
common: Extract point into a common struct
common: Extract point into a common struct
This is generic enough that it can be moved into the Common class for reuse.nce_cpp
3 changed files with 65 additions and 29 deletions
@ -0,0 +1,57 @@ |
|||||
|
// Copyright 2021 yuzu Emulator Project |
||||
|
// Licensed under GPLv2 or any later version |
||||
|
// Refer to the license.txt file included. |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <type_traits> |
||||
|
|
||||
|
namespace Common { |
||||
|
|
||||
|
// Represents a point within a 2D space. |
||||
|
template <typename T> |
||||
|
struct Point { |
||||
|
static_assert(std::is_arithmetic_v<T>, "T must be an arithmetic type!"); |
||||
|
|
||||
|
T x{}; |
||||
|
T y{}; |
||||
|
|
||||
|
#define ARITHMETIC_OP(op, compound_op) \ |
||||
|
friend constexpr Point operator op(const Point& lhs, const Point& rhs) noexcept { \ |
||||
|
return { \ |
||||
|
.x = static_cast<T>(lhs.x op rhs.x), \ |
||||
|
.y = static_cast<T>(lhs.y op rhs.y), \ |
||||
|
}; \ |
||||
|
} \ |
||||
|
friend constexpr Point operator op(const Point& lhs, T value) noexcept { \ |
||||
|
return { \ |
||||
|
.x = static_cast<T>(lhs.x op value), \ |
||||
|
.y = static_cast<T>(lhs.y op value), \ |
||||
|
}; \ |
||||
|
} \ |
||||
|
friend constexpr Point operator op(T value, const Point& rhs) noexcept { \ |
||||
|
return { \ |
||||
|
.x = static_cast<T>(value op rhs.x), \ |
||||
|
.y = static_cast<T>(value op rhs.y), \ |
||||
|
}; \ |
||||
|
} \ |
||||
|
friend constexpr Point& operator compound_op(Point& lhs, const Point& rhs) noexcept { \ |
||||
|
lhs.x = static_cast<T>(lhs.x op rhs.x); \ |
||||
|
lhs.y = static_cast<T>(lhs.y op rhs.y); \ |
||||
|
return lhs; \ |
||||
|
} \ |
||||
|
friend constexpr Point& operator compound_op(Point& lhs, T value) noexcept { \ |
||||
|
lhs.x = static_cast<T>(lhs.x op value); \ |
||||
|
lhs.y = static_cast<T>(lhs.y op value); \ |
||||
|
return lhs; \ |
||||
|
} |
||||
|
ARITHMETIC_OP(+, +=) |
||||
|
ARITHMETIC_OP(-, -=) |
||||
|
ARITHMETIC_OP(*, *=) |
||||
|
ARITHMETIC_OP(/, /=) |
||||
|
#undef ARITHMETIC_OP |
||||
|
|
||||
|
friend constexpr bool operator==(const Point&, const Point&) = default; |
||||
|
}; |
||||
|
|
||||
|
} // namespace Common |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue