mirror of
				https://github.com/intel/intel-graphics-compiler.git
				synced 2025-10-30 08:18:26 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			176 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*========================== begin_copyright_notice ============================
 | |
| 
 | |
| Copyright (C) 2019-2021 Intel Corporation
 | |
| 
 | |
| SPDX-License-Identifier: MIT
 | |
| 
 | |
| ============================= end_copyright_notice ===========================*/
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include "types.h"
 | |
| #include "Debug.h"
 | |
| 
 | |
| namespace iSTD
 | |
| {
 | |
| 
 | |
| /*****************************************************************************\
 | |
| STRUCT: iSTD::SVector4
 | |
| \*****************************************************************************/
 | |
| template<class Type>
 | |
| struct SVector4
 | |
| {
 | |
|     Type    X;
 | |
|     Type    Y;
 | |
|     Type    Z;
 | |
|     Type    W;
 | |
| 
 | |
|     Type& operator[] ( const int i )
 | |
|     {
 | |
|         ASSERT( i >= 0 );
 | |
|         ASSERT( i <= 3 );
 | |
|         return( ((Type*)this)[i] );
 | |
|     }
 | |
| 
 | |
|     const Type& operator[] ( const int i ) const
 | |
|     {
 | |
|         ASSERT( i >= 0 );
 | |
|         ASSERT( i <= 3 );
 | |
|         return( ((Type*)this)[i] );
 | |
|     }
 | |
| 
 | |
|     bool operator == ( const SVector4& vector ) const
 | |
|     {
 | |
|         return ( ( X == vector.X ) &&
 | |
|                  ( Y == vector.Y ) &&
 | |
|                  ( Z == vector.Z ) &&
 | |
|                  ( W == vector.W ) );
 | |
|     }
 | |
| 
 | |
|     bool operator != ( const SVector4& vector ) const
 | |
|     {
 | |
|         return ( ( X != vector.X ) ||
 | |
|                  ( Y != vector.Y ) ||
 | |
|                  ( Z != vector.Z ) ||
 | |
|                  ( W != vector.W ) );
 | |
|     }
 | |
| };
 | |
| 
 | |
| // Specialization of iSTD::SVector4 template for Type float :
 | |
| template<>
 | |
| struct SVector4<float>
 | |
| {
 | |
|     float    X;
 | |
|     float    Y;
 | |
|     float    Z;
 | |
|     float    W;
 | |
| 
 | |
|     float& operator[] ( const int i )
 | |
|     {
 | |
|         ASSERT( i >= 0 );
 | |
|         ASSERT( i <= 3 );
 | |
|         return( ((float*)this)[i] );
 | |
|     }
 | |
| 
 | |
|     const float& operator[] ( const int i ) const
 | |
|     {
 | |
|         ASSERT( i >= 0 );
 | |
|         ASSERT( i <= 3 );
 | |
|         return( ((float*)this)[i] );
 | |
|     }
 | |
| 
 | |
|     bool operator == ( const SVector4<float>& vector ) const
 | |
|     {
 | |
|         return ( ( *(DWORD*)&X == *(DWORD*)&vector.X ) &&
 | |
|                  ( *(DWORD*)&Y == *(DWORD*)&vector.Y ) &&
 | |
|                  ( *(DWORD*)&Z == *(DWORD*)&vector.Z ) &&
 | |
|                  ( *(DWORD*)&W == *(DWORD*)&vector.W ) );
 | |
|     }
 | |
| 
 | |
|     bool operator != ( const SVector4<float>& vector ) const
 | |
|     {
 | |
|         return ( ( *(DWORD*)&X != *(DWORD*)&vector.X ) ||
 | |
|                  ( *(DWORD*)&Y != *(DWORD*)&vector.Y ) ||
 | |
|                  ( *(DWORD*)&Z != *(DWORD*)&vector.Z ) ||
 | |
|                  ( *(DWORD*)&W != *(DWORD*)&vector.W ) );
 | |
|     }
 | |
| };
 | |
| 
 | |
| /*****************************************************************************\
 | |
| STRUCT: SVector3
 | |
| \*****************************************************************************/
 | |
| template<class Type>
 | |
| struct SVector3
 | |
| {
 | |
|     Type    X;
 | |
|     Type    Y;
 | |
|     Type    Z;
 | |
| 
 | |
|     Type& operator[] ( const int i )
 | |
|     {
 | |
|         ASSERT( i >= 0 );
 | |
|         ASSERT( i <= 2 );
 | |
|         return( ((Type*)this)[i] );
 | |
|     }
 | |
| 
 | |
|     const Type& operator[] ( const int i ) const
 | |
|     {
 | |
|         ASSERT( i >= 0 );
 | |
|         ASSERT( i <= 2 );
 | |
|         return( ((Type*)this)[i] );
 | |
|     }
 | |
| 
 | |
|     bool operator == ( const SVector3& vector ) const
 | |
|     {
 | |
|         return ( ( X == vector.X ) &&
 | |
|             ( Y == vector.Y ) &&
 | |
|             ( Z == vector.Z ) );
 | |
|     }
 | |
| 
 | |
|     bool operator != ( const SVector3& vector ) const
 | |
|     {
 | |
|         return ( ( X != vector.X ) ||
 | |
|             ( Y != vector.Y ) ||
 | |
|             ( Z != vector.Z ) );
 | |
|     }
 | |
| };
 | |
| 
 | |
| // Specialization of SVector3 template for Type float :
 | |
| template<>
 | |
| struct SVector3<float>
 | |
| {
 | |
|     float    X;
 | |
|     float    Y;
 | |
|     float    Z;
 | |
| 
 | |
|     float& operator[] ( const int i )
 | |
|     {
 | |
|         ASSERT( i >= 0 );
 | |
|         ASSERT( i <= 2 );
 | |
|         return( ((float *)this)[i] );
 | |
|     }
 | |
| 
 | |
|     const float& operator[] ( const int i ) const
 | |
|     {
 | |
|         ASSERT( i >= 0 );
 | |
|         ASSERT( i <= 2 );
 | |
|         return( ((float *)this)[i] );
 | |
|     }
 | |
| 
 | |
|     bool operator == ( const SVector3<float>& vector ) const
 | |
|     {
 | |
|         return ( ( *(DWORD*)&X == *(DWORD*)&vector.X ) &&
 | |
|                  ( *(DWORD*)&Y == *(DWORD*)&vector.Y ) &&
 | |
|                  ( *(DWORD*)&Z == *(DWORD*)&vector.Z ) );
 | |
|     }
 | |
| 
 | |
|     bool operator != ( const SVector3& vector ) const
 | |
|     {
 | |
|         return ( ( *(DWORD*)&X != *(DWORD*)&vector.X ) ||
 | |
|                  ( *(DWORD*)&Y != *(DWORD*)&vector.Y ) ||
 | |
|                  ( *(DWORD*)&Z != *(DWORD*)&vector.Z ) );
 | |
|     }
 | |
| };
 | |
| 
 | |
| } // iSTD
 | 
