1 | /* Manipulation et conversion des types de bases */
|
---|
2 | /* E. Aubourg, E. Lesquoy */
|
---|
3 |
|
---|
4 | // LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA
|
---|
5 |
|
---|
6 | #ifndef DATATYPES_H_SEEN
|
---|
7 | #define DATATYPES_H_SEEN
|
---|
8 |
|
---|
9 | #include "machdefs.h"
|
---|
10 |
|
---|
11 |
|
---|
12 | enum PBaseDataTypes {kpbdt_unknown=-1, kuint_1=1, kint_1=2,
|
---|
13 | kuint_2=3, kint_2=4, kuint_4=5, kint_4=6,
|
---|
14 | kr_4=7, kr_8=8};
|
---|
15 |
|
---|
16 | inline PBaseDataTypes DataType(uint_1) {return kuint_1;}
|
---|
17 | inline PBaseDataTypes DataType(int_1) {return kint_1;}
|
---|
18 | inline PBaseDataTypes DataType(uint_2) {return kuint_2;}
|
---|
19 | inline PBaseDataTypes DataType(int_2) {return kint_2;}
|
---|
20 | inline PBaseDataTypes DataType(uint_4) {return kuint_4;}
|
---|
21 | inline PBaseDataTypes DataType(int_4) {return kint_4;}
|
---|
22 | inline PBaseDataTypes DataType(r_4) {return kr_4;}
|
---|
23 | inline PBaseDataTypes DataType(r_8) {return kr_8;}
|
---|
24 |
|
---|
25 | const char * DataName(PBaseDataTypes);
|
---|
26 | const char * DataLongName(PBaseDataTypes);
|
---|
27 | int DataSize(PBaseDataTypes);
|
---|
28 |
|
---|
29 | // Limites des types
|
---|
30 |
|
---|
31 | inline double MinRange(uint_1) {return 0.0;}
|
---|
32 | inline double MaxRange(uint_1) {return 255.0;}
|
---|
33 | inline double MinRange(uint_2) {return 0.0;}
|
---|
34 | inline double MaxRange(uint_2) {return 65535.0;}
|
---|
35 | inline double MinRange(int_2) {return -32768.0;}
|
---|
36 | inline double MaxRange(int_2) {return 32767.0;}
|
---|
37 | inline double MinRange(int_4) {return -2147483648.0;}
|
---|
38 | inline double MaxRange(int_4) {return 2147483647.0;}
|
---|
39 | inline double MinRange(r_4) {return -3.40282347e+38f;}
|
---|
40 | inline double MaxRange(r_4) {return 3.40282347e+38f;}
|
---|
41 |
|
---|
42 | // reduction range donnee si on va du type 1 au type 2 (y/n)
|
---|
43 | // ReducRange(type 1 , type 2 )
|
---|
44 | // retour:
|
---|
45 |
|
---|
46 | enum {t_same,t_up,t_spe,t_down};
|
---|
47 | // t_same: meme type
|
---|
48 | // t_up : ascendant (I,U2)->(I4,R4), I4->R4
|
---|
49 | // t_spe: speciaux I2->U2 , U2->I2
|
---|
50 | // t_down: descendants R4->I4, (R4,I4)->(U2,I2)
|
---|
51 |
|
---|
52 | inline int ConvType(uint_1 , uint_1 ) {return t_same;}
|
---|
53 | inline int ConvType(uint_1 , uint_2 ) {return t_up;}
|
---|
54 | inline int ConvType(uint_1 , int_2 ) {return t_up;}
|
---|
55 | inline int ConvType(uint_1 , int_4 ) {return t_up;}
|
---|
56 | inline int ConvType(uint_1 , r_4 ) {return t_up;}
|
---|
57 | inline int ConvType(uint_2 , uint_1 ) {return t_down;}
|
---|
58 | inline int ConvType(uint_2 , uint_2 ) {return t_same;}
|
---|
59 | inline int ConvType(uint_2 , int_2 ) {return t_spe;}
|
---|
60 | inline int ConvType(uint_2 , int_4 ) {return t_up;}
|
---|
61 | inline int ConvType(uint_2 , r_4 ) {return t_up;}
|
---|
62 | inline int ConvType(int_2 , uint_1 ) {return t_down;}
|
---|
63 | inline int ConvType(int_2 , uint_2 ) {return t_spe;}
|
---|
64 | inline int ConvType(int_2 , int_2 ) {return t_same;}
|
---|
65 | inline int ConvType(int_2 , int_4 ) {return t_up;}
|
---|
66 | inline int ConvType(int_2 , r_4 ) {return t_up;}
|
---|
67 | inline int ConvType(int_4 , uint_1 ) {return t_down;}
|
---|
68 | inline int ConvType(int_4 , uint_2 ) {return t_down;}
|
---|
69 | inline int ConvType(int_4 , int_2 ) {return t_down;}
|
---|
70 | inline int ConvType(int_4 , int_4 ) {return t_same;}
|
---|
71 | inline int ConvType(int_4 , r_4 ) {return t_up;}
|
---|
72 | inline int ConvType(r_4 , uint_1 ) {return t_down;}
|
---|
73 | inline int ConvType(r_4 , uint_2 ) {return t_down;}
|
---|
74 | inline int ConvType(r_4 , int_2 ) {return t_down;}
|
---|
75 | inline int ConvType(r_4 , int_4 ) {return t_down;}
|
---|
76 | inline int ConvType(r_4 , r_4 ) {return t_same;}
|
---|
77 |
|
---|
78 | /*
|
---|
79 | template <class T>
|
---|
80 | inline T PutInRange(double x,T t) {
|
---|
81 | return (T)( x < MinRange(t) ? MinRange(t) : \
|
---|
82 | (x > MaxRange(t) ? MaxRange(t) : x));
|
---|
83 | }
|
---|
84 | // BUG GCC 2.6.1. Unresolved: xxx..ng
|
---|
85 | */
|
---|
86 |
|
---|
87 | inline uint_1 PutInRange(double x, uint_1 t) {
|
---|
88 | return (uint_1)( x < MinRange(t) ? MinRange(t) : \
|
---|
89 | (x > MaxRange(t) ? MaxRange(t) : x));
|
---|
90 | }
|
---|
91 | inline uint_2 PutInRange(double x, uint_2 t) {
|
---|
92 | return (uint_2)( x < MinRange(t) ? MinRange(t) : \
|
---|
93 | (x > MaxRange(t) ? MaxRange(t) : x));
|
---|
94 | }
|
---|
95 | inline int_2 PutInRange(double x, int_2 t) {
|
---|
96 | return (int_2)( x < MinRange(t) ? MinRange(t) : \
|
---|
97 | (x > MaxRange(t) ? MaxRange(t) : x));
|
---|
98 | }
|
---|
99 | inline int_4 PutInRange(double x, int_4 t) {
|
---|
100 | return (int_4)( x < MinRange(t) ? MinRange(t) : \
|
---|
101 | (x > MaxRange(t) ? MaxRange(t) : x));
|
---|
102 | }
|
---|
103 | inline r_4 PutInRange(double x , r_4) {return x;}
|
---|
104 |
|
---|
105 | /*
|
---|
106 | template <class T>
|
---|
107 | inline T SharePix(double x, T t, double cutmin, double cutmax)
|
---|
108 | { double tmp = (((x - cutmin)/(cutmax-cutmin))* \
|
---|
109 | ( MaxRange(t)-MinRange(t)))+MinRange(t);
|
---|
110 | return PutInRange(tmp, t);
|
---|
111 | }
|
---|
112 | // BUG GCC 2.6.1. Unresolved: xxx..ng
|
---|
113 | */
|
---|
114 | inline double SharePix(double x, uint_1 t, double cutmin, double cutmax)
|
---|
115 | { double tmp = (((x - cutmin)/(cutmax-cutmin))* \
|
---|
116 | ( MaxRange(t)-MinRange(t)))+MinRange(t);
|
---|
117 | return PutInRange(tmp, t);
|
---|
118 | }
|
---|
119 | inline double SharePix(double x, uint_2 t, double cutmin, double cutmax)
|
---|
120 | { double tmp = (((x - cutmin)/(cutmax-cutmin))* \
|
---|
121 | ( MaxRange(t)-MinRange(t)))+MinRange(t);
|
---|
122 | return PutInRange(tmp, t);
|
---|
123 | }
|
---|
124 | inline double SharePix(double x, int_2 t, double cutmin, double cutmax)
|
---|
125 | { double tmp = (((x - cutmin)/(cutmax-cutmin))* \
|
---|
126 | ( MaxRange(t)-MinRange(t)))+MinRange(t);
|
---|
127 | return PutInRange(tmp, t);
|
---|
128 | }
|
---|
129 | inline double SharePix(double x, int_4 t, double cutmin, double cutmax)
|
---|
130 | { double tmp = (((x - cutmin)/(cutmax-cutmin))* \
|
---|
131 | ( MaxRange(t)-MinRange(t)))+MinRange(t);
|
---|
132 | return PutInRange(tmp, t);
|
---|
133 | }
|
---|
134 | inline double SharePix(double x, r_4 t, double cutmin, double cutmax)
|
---|
135 | { double tmp = (((x - cutmin)/(cutmax-cutmin))* \
|
---|
136 | ( MaxRange(t)-MinRange(t)))+ MinRange(t);
|
---|
137 | return PutInRange(tmp, t);
|
---|
138 | }
|
---|
139 |
|
---|
140 | #endif
|
---|