mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 21:22:46 +00:00 
			
		
		
		
	 d144da3a62
			
		
	
	
		d144da3a62
		
	
	
	
	
		
			
			`Gfx::Vector[2,3,4]` are nearly identical implementations. This code redundancy does not follow the DRY (Don't Repeat Yourself) principle leading to possible out-of-sync errors between the classes. Combining these classes into a class template which can be specialized for each needed size makes the differences obvious through `constexpr-if` blocks and `requires` clauses.
		
			
				
	
	
		
			39 lines
		
	
	
	
		
			769 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			769 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2020, Stephan Unverwerth <s.unverwerth@serenityos.org>
 | |
|  * Copyright (c) 2022, the SerenityOS developers.
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include "VectorN.h"
 | |
| 
 | |
| #include <AK/Error.h>
 | |
| #include <AK/Format.h>
 | |
| #include <AK/StringView.h>
 | |
| 
 | |
| namespace Gfx {
 | |
| 
 | |
| template<class T>
 | |
| using Vector3 = VectorN<3, T>;
 | |
| using FloatVector3 = Vector3<float>;
 | |
| using DoubleVector3 = Vector3<double>;
 | |
| 
 | |
| }
 | |
| 
 | |
| namespace AK {
 | |
| 
 | |
| template<typename T>
 | |
| struct Formatter<Gfx::Vector3<T>> : Formatter<StringView> {
 | |
|     ErrorOr<void> format(FormatBuilder& builder, Gfx::Vector3<T> const& value)
 | |
|     {
 | |
|         return Formatter<StringView>::format(builder, value.to_string());
 | |
|     }
 | |
| };
 | |
| 
 | |
| }
 | |
| 
 | |
| using Gfx::DoubleVector3;
 | |
| using Gfx::FloatVector3;
 | |
| using Gfx::Vector3;
 |