Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/clhep/src/DoubConv.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /externals/clhep/src/DoubConv.cc (Version 11.3.0) and /externals/clhep/src/DoubConv.cc (Version 10.6.p3)


  1 // -*- C++ -*-                                      1 // -*- C++ -*-
  2 // -------------------------------------------      2 // -----------------------------------------------------------------------
  3 //                             HEP Random           3 //                             HEP Random
  4 //                          --- DoubConv ---        4 //                          --- DoubConv ---
  5 //                      class implementation f      5 //                      class implementation file
  6 // -------------------------------------------      6 // -----------------------------------------------------------------------
  7                                                     7 
  8 #include "CLHEP/Random/DoubConv.h"                  8 #include "CLHEP/Random/DoubConv.h"
  9                                                     9 
 10 #include <sstream>                                 10 #include <sstream>
 11 #include <iomanip>                                 11 #include <iomanip>
 12 #include <vector>                              << 
 13                                                    12 
 14 namespace CLHEP {                                  13 namespace CLHEP {
 15                                                    14 
 16 CLHEP_THREAD_LOCAL bool DoubConv::byte_order_k     15 CLHEP_THREAD_LOCAL bool DoubConv::byte_order_known = false;
 17 CLHEP_THREAD_LOCAL int  DoubConv::byte_order[8     16 CLHEP_THREAD_LOCAL int  DoubConv::byte_order[8];
 18                                                    17 
 19 void DoubConv::fill_byte_order () {                18 void DoubConv::fill_byte_order () {
 20   double x = 1.0;                                  19   double x = 1.0;
 21   int t30 = 1 << 30;                               20   int t30 = 1 << 30;
 22   int t22 = 1 << 22;                               21   int t22 = 1 << 22;
 23   x *= t30;                                        22   x *= t30;
 24   x *= t22;                                        23   x *= t22;
 25   double y = 1;                                    24   double y = 1;
 26   double z = 1;                                    25   double z = 1;
 27   x *= z;                                          26   x *= z;
 28   for (int k=0; k<6; k++) {                        27   for (int k=0; k<6; k++) {
 29     x += y*z;                                      28     x += y*z;
 30     y += 1;                                        29     y += 1;
 31     z *= 256;                                      30     z *= 256;
 32   }                                                31   }
 33   // x, in IEEE format, would now be 0x4330060     32   // x, in IEEE format, would now be 0x4330060504030201
 34   DB8 xb;                                          33   DB8 xb;
 35   xb.d = x;                                        34   xb.d = x;
 36   int n;                                           35   int n;
 37   static const int UNSET = -1;                     36   static const int UNSET = -1; 
 38   for (n=0; n<8; n++) {                            37   for (n=0; n<8; n++) {
 39     byte_order[n] = UNSET;                         38     byte_order[n] = UNSET;
 40   }                                                39   }
 41   int order;                                       40   int order;
 42   for (n=0; n<8; n++) {                            41   for (n=0; n<8; n++) {
 43     switch ( xb.b[n] ) {                           42     switch ( xb.b[n] ) {
 44       case 0x43:                                   43       case 0x43:
 45         order = 0;                                 44         order = 0;
 46         break;                                     45         break;
 47       case 0x30:                                   46       case 0x30:
 48         order = 1;                                 47         order = 1;
 49         break;                                     48         break;
 50       case 0x06:                                   49       case 0x06:
 51         order = 2;                                 50         order = 2;
 52         break;                                     51         break;
 53       case 0x05:                                   52       case 0x05:
 54         order = 3;                                 53         order = 3;
 55         break;                                     54         break;
 56       case 0x04:                                   55       case 0x04:
 57         order = 4;                                 56         order = 4;
 58         break;                                     57         break;
 59       case 0x03:                                   58       case 0x03:
 60         order = 5;                                 59         order = 5;
 61         break;                                     60         break;
 62       case 0x02:                                   61       case 0x02:
 63         order = 6;                                 62         order = 6;
 64         break;                                     63         break;
 65       case 0x01:                                   64       case 0x01:
 66         order = 7;                                 65         order = 7;
 67         break;                                     66         break;
 68       default:                                     67       default:
 69         throw DoubConvException(                   68         throw DoubConvException(
 70     "Cannot determine byte-ordering of doubles     69     "Cannot determine byte-ordering of doubles on this system");
 71     }                                              70     } 
 72     if (byte_order[n] != UNSET) {                  71     if (byte_order[n] != UNSET) {
 73         throw DoubConvException(                   72         throw DoubConvException(
 74     "Confusion in byte-ordering of doubles on      73     "Confusion in byte-ordering of doubles on this system");
 75     }                                              74     }    
 76     byte_order[n] = order;                         75     byte_order[n] = order;
 77     byte_order_known = true;                       76     byte_order_known = true;
 78   }                                                77   }
 79   return;                                          78   return;
 80 }                                                  79 }
 81                                                    80 
 82 std::string DoubConv::d2x(double d) {              81 std::string DoubConv::d2x(double d) {
 83   if ( !byte_order_known ) fill_byte_order ();     82   if ( !byte_order_known ) fill_byte_order ();
 84   DB8 db;                                          83   DB8 db;
 85   db.d = d;                                        84   db.d = d;
 86   std::ostringstream ss;                           85   std::ostringstream ss;
 87   for (int i=0; i<8; ++i) {                        86   for (int i=0; i<8; ++i) {
 88     int k = byte_order[i];                         87     int k = byte_order[i];
 89     ss << std::hex << std::setw(2) << std::set     88     ss << std::hex << std::setw(2) << std::setfill('0') << (int)db.b[k];
 90   }                                                89   }
 91   return ss.str();                                 90   return ss.str();
 92 }                                                  91 }
 93                                                    92 
 94 std::vector<unsigned long> DoubConv::dto2longs     93 std::vector<unsigned long> DoubConv::dto2longs(double d) {
 95   std::vector<unsigned long> v(2);                 94   std::vector<unsigned long> v(2);
 96   if ( !byte_order_known ) fill_byte_order ();     95   if ( !byte_order_known ) fill_byte_order ();
 97   DB8 db;                                          96   DB8 db;
 98   db.d = d;                                        97   db.d = d;
 99   v[0] =   ((static_cast<unsigned long>(db.b[b     98   v[0] =   ((static_cast<unsigned long>(db.b[byte_order[0]])) << 24)
100          | ((static_cast<unsigned long>(db.b[b     99          | ((static_cast<unsigned long>(db.b[byte_order[1]])) << 16)
101          | ((static_cast<unsigned long>(db.b[b    100          | ((static_cast<unsigned long>(db.b[byte_order[2]])) <<  8)
102          | ((static_cast<unsigned long>(db.b[b    101          | ((static_cast<unsigned long>(db.b[byte_order[3]]))      );
103   v[1] =   ((static_cast<unsigned long>(db.b[b    102   v[1] =   ((static_cast<unsigned long>(db.b[byte_order[4]])) << 24)
104          | ((static_cast<unsigned long>(db.b[b    103          | ((static_cast<unsigned long>(db.b[byte_order[5]])) << 16)
105          | ((static_cast<unsigned long>(db.b[b    104          | ((static_cast<unsigned long>(db.b[byte_order[6]])) <<  8)
106          | ((static_cast<unsigned long>(db.b[b    105          | ((static_cast<unsigned long>(db.b[byte_order[7]]))      );
107   return v;                                       106   return v; 
108 }                                                 107 }
109                                                   108 
110 double DoubConv::longs2double (const std::vect    109 double DoubConv::longs2double (const std::vector<unsigned long> & v) {
111   DB8 db;                                         110   DB8 db;
112   unsigned char bytes[8];                         111   unsigned char bytes[8];
113   if ( !byte_order_known ) fill_byte_order ();    112   if ( !byte_order_known ) fill_byte_order ();
114   bytes[0] = static_cast<unsigned char>((v[0]     113   bytes[0] = static_cast<unsigned char>((v[0] >> 24) & 0xFF);
115   bytes[1] = static_cast<unsigned char>((v[0]     114   bytes[1] = static_cast<unsigned char>((v[0] >> 16) & 0xFF);
116   bytes[2] = static_cast<unsigned char>((v[0]     115   bytes[2] = static_cast<unsigned char>((v[0] >>  8) & 0xFF);
117   bytes[3] = static_cast<unsigned char>((v[0]     116   bytes[3] = static_cast<unsigned char>((v[0]      ) & 0xFF);
118   bytes[4] = static_cast<unsigned char>((v[1]     117   bytes[4] = static_cast<unsigned char>((v[1] >> 24) & 0xFF);
119   bytes[5] = static_cast<unsigned char>((v[1]     118   bytes[5] = static_cast<unsigned char>((v[1] >> 16) & 0xFF);
120   bytes[6] = static_cast<unsigned char>((v[1]     119   bytes[6] = static_cast<unsigned char>((v[1] >>  8) & 0xFF);
121   bytes[7] = static_cast<unsigned char>((v[1]     120   bytes[7] = static_cast<unsigned char>((v[1]      ) & 0xFF);
122   for (int i=0; i<8; ++i) {                       121   for (int i=0; i<8; ++i) {
123     db.b[byte_order[i]] =  bytes[i];              122     db.b[byte_order[i]] =  bytes[i];
124   }                                               123   }  
125   return db.d;                                    124   return db.d;
126 }                                                 125 }
127                                                   126 
128 } // end namespace CLHEP                          127 } // end namespace CLHEP
129                                                   128