Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #pragma once
0002 
0003 /**
0004 SPack
0005 ======
0006 
0007 Static packing/unpacking utilities.
0008 
0009 
0010 **/
0011 
0012 
0013 #include <cstddef>
0014 #include <cstdint>
0015 
0016 #include "SYSRAP_API_EXPORT.hh"
0017 
0018 class SYSRAP_API SPack {
0019      public:
0020         union uif_t {
0021             unsigned u ; 
0022             int      i ;
0023             float    f ; 
0024         }; 
0025 
0026         union ui16_t {
0027             uint16_t  u ; 
0028             int16_t   i ; 
0029         };
0030 
0031 
0032      public:
0033         static bool     IsLittleEndian(); 
0034         static unsigned Encode(unsigned x, unsigned y, unsigned z, unsigned w);  // values must fit into unsigned char, ie up to  0xff   
0035         static void     Decode( const unsigned int value,  unsigned& x, unsigned& y, unsigned& z, unsigned& w );
0036 
0037         static unsigned Encode(unsigned char x, unsigned char y, unsigned char z, unsigned char w); 
0038         static unsigned Encode(const unsigned char* ptr, const unsigned num); 
0039 
0040         static void Decode( const unsigned value,  unsigned char& x, unsigned char& y, unsigned char& z, unsigned char& w ); 
0041         static void Decode( const unsigned value,  unsigned char* ptr, const unsigned num); 
0042 
0043      public:
0044         static unsigned Encode13(unsigned char c, unsigned int ccc);
0045         static void Decode13( const unsigned int value, unsigned char& c, unsigned int& ccc );
0046 
0047      public:
0048         static unsigned Encode22(unsigned a, unsigned b);
0049         static void     Decode22( const unsigned value, unsigned& a, unsigned& b);
0050         static unsigned Decode22a( const unsigned value ); 
0051         static unsigned Decode22b( const unsigned value ); 
0052      public:
0053         static unsigned Encode22hilo( int a, int b ); 
0054         static void     Decode22hilo( const unsigned packed, int& a, int& b ); 
0055         static int      Decode22hi( const unsigned packed ); 
0056         static int      Decode22lo( const unsigned packed ); 
0057      public:
0058         static float int_as_float( const int i ); 
0059         static int int_from_float( const float f ); 
0060         static float uint_as_float( const unsigned f ); 
0061         static unsigned uint_from_float( const float f ); 
0062 
0063         static float unsigned_as_float( const unsigned u ) ;
0064         static unsigned float_as_unsigned( const float f ) ;
0065 
0066 
0067         template <int NUM_BITS>
0068         static int unsigned_as_int(unsigned value);
0069 
0070         static int unsigned_as_int_32(unsigned value);
0071         static int unsigned_as_int_16(unsigned value);
0072 
0073         static double unsigned_as_double( const unsigned x, const unsigned y ) ;
0074         static void double_as_unsigned(unsigned& x, unsigned& y, const double d ) ;
0075 
0076 
0077 
0078 };
0079 
0080