File indexing completed on 2026-04-09 07:49:55
0001 #pragma once
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #if defined(__CUDACC__) || defined(__CUDABE__)
0013 # define SVIEW_METHOD __host__ __device__ __forceinline__
0014 #else
0015 # define SVIEW_METHOD inline
0016 #endif
0017
0018 struct sview
0019 {
0020 union UIF32
0021 {
0022 unsigned u ;
0023 int i ;
0024 float f ;
0025 };
0026
0027 struct uint2 { unsigned x, y ; };
0028 struct int2 { unsigned x, y ; };
0029
0030 union UIF64
0031 {
0032 uint2 uu ;
0033 int2 ii ;
0034 double f ;
0035 };
0036
0037 template<typename T> static T int_as( int i );
0038 template<typename T> static int int_from( T v );
0039
0040 template<typename T> static T uint_as( unsigned u );
0041 template<typename T> static unsigned uint_from( T v );
0042 };
0043
0044 template<> SVIEW_METHOD float sview::int_as<float>( int i )
0045 {
0046 UIF32 u32 ;
0047 u32.i = i ;
0048 return u32.f ;
0049 }
0050 template<> SVIEW_METHOD double sview::int_as<double>( int i )
0051 {
0052 UIF64 u64 ;
0053 u64.ii.x = i ;
0054 return u64.f ;
0055 }
0056
0057
0058 template<> SVIEW_METHOD int sview::int_from<float>( float f )
0059 {
0060 UIF32 u32 ;
0061 u32.f = f ;
0062 return u32.i ;
0063 }
0064 template<> SVIEW_METHOD int sview::int_from<double>( double f )
0065 {
0066 UIF64 u64 ;
0067 u64.f = f ;
0068 return u64.ii.x ;
0069 }
0070
0071 template<> SVIEW_METHOD float sview::uint_as<float>( unsigned u )
0072 {
0073 UIF32 u32 ;
0074 u32.u = u ;
0075 return u32.f ;
0076 }
0077 template<> SVIEW_METHOD double sview::uint_as<double>( unsigned v )
0078 {
0079 UIF64 u64 ;
0080 u64.uu.x = v ;
0081 return u64.f ;
0082 }
0083
0084 template<> SVIEW_METHOD unsigned sview::uint_from<float>( float f )
0085 {
0086 UIF32 u32 ;
0087 u32.f = f ;
0088 return u32.u ;
0089 }
0090 template<> SVIEW_METHOD unsigned sview::uint_from<double>( double f )
0091 {
0092 UIF64 u64 ;
0093 u64.f = f ;
0094 return u64.uu.x ;
0095 }
0096