Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:55

0001 #pragma once
0002 
0003 /**
0004 sview.h
0005 =========
0006 
0007 Templated reinterpretation of bits allowing to view 
0008 unsigned int as float and double and vice versa.
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