Skip to content

Commit 07408b1

Browse files
committed
Define subtraction via addition and division via multiplication
1 parent 3c1a021 commit 07408b1

File tree

1 file changed

+3
-23
lines changed

1 file changed

+3
-23
lines changed

src/r4/vector.hpp

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -435,23 +435,7 @@ template <class T, size_t S> class vector : public std::array<T, S>{
435435
* @return Reference to this vector object.
436436
*/
437437
template <size_t SS> vector& operator-=(const vector<T, SS>& vec)noexcept{
438-
if constexpr (SS >= S){
439-
for(size_t i = 0; i != S; ++i){
440-
this->operator[](i) -= vec[i];
441-
}
442-
}else if constexpr (S < 4 || SS >= 4){
443-
static_assert(SS < S, "");
444-
for(size_t i = 0; i != SS; ++i){
445-
this->operator[](i) -= vec[i];
446-
}
447-
}else{
448-
static_assert(SS < 4, "");
449-
static_assert(S >= 4, "");
450-
for(size_t i = 0; i != SS; ++i){
451-
this->operator[](i) -= vec[i];
452-
}
453-
this->operator[](3) -= T(1);
454-
}
438+
(*this) += -vec;
455439
return *this;
456440
}
457441

@@ -472,9 +456,7 @@ template <class T, size_t S> class vector : public std::array<T, S>{
472456
* @return Reference to this vector object.
473457
*/
474458
vector& operator-=(T number)noexcept{
475-
for(size_t i = 0; i != S; ++i){
476-
this->operator[](i) -= number;
477-
}
459+
(*this) += -number;
478460
return *this;
479461
}
480462

@@ -547,9 +529,7 @@ template <class T, size_t S> class vector : public std::array<T, S>{
547529
*/
548530
vector& operator/=(T num)noexcept{
549531
ASSERT_INFO(num != 0, "vector::operator/=(): division by 0")
550-
for(auto& c : *this){
551-
c /= num;
552-
}
532+
(*this) *= T(1)/num;
553533
return *this;
554534
}
555535

0 commit comments

Comments
 (0)