28 #include <QStringList>
89 #if ISIS_LITTLE_ENDIAN
90 # define DBL_INIT(a,b) {(b), (a)}
92 # define DBL_INIT(a,b) {(a), (b)}
97 const DBL_UNION IVALID_MIN8 = { DBL_INIT(0xFFEFFFFF, 0xFFFFFFFA) };
98 const double VALID_MIN8 = IVALID_MIN8.d;
105 const DBL_UNION INULL8 = { DBL_INIT(0xFFEFFFFF, 0xFFFFFFFB) };
106 const double NULL8 = INULL8.d;
109 const DBL_UNION ILOW_REPR_SAT8 = { DBL_INIT(0xFFEFFFFF, 0xFFFFFFFC) };
110 const double LOW_REPR_SAT8 = ILOW_REPR_SAT8.d;
111 const double Lrs = ILOW_REPR_SAT8.d;
115 const DBL_UNION ILOW_INSTR_SAT8 = { DBL_INIT(0xFFEFFFFF, 0xFFFFFFFD) };
116 const double LOW_INSTR_SAT8 = ILOW_INSTR_SAT8.d;
117 const double Lis = ILOW_INSTR_SAT8.d;
121 const DBL_UNION IHIGH_INSTR_SAT8 = { DBL_INIT(0xFFEFFFFF, 0xFFFFFFFE) };
122 const double HIGH_INSTR_SAT8 = IHIGH_INSTR_SAT8.d;
123 const double His = IHIGH_INSTR_SAT8.d;
127 const DBL_UNION IHIGH_REPR_SAT8 = { DBL_INIT(0xFFEFFFFF, 0xFFFFFFFF) };
128 const double HIGH_REPR_SAT8 = IHIGH_REPR_SAT8.d;
129 const double Hrs = IHIGH_REPR_SAT8.d;
133 const double VALID_MAX8 = DBL_MAX;
141 const int IVALID_MIN4 = 0xFF7FFFFA;
142 const float VALID_MIN4 = (*((
const float *) &IVALID_MIN4));
144 const int INULL4 = 0xFF7FFFFB;
145 const float NULL4 = (*((
const float *) &INULL4));
147 const int ILOW_REPR_SAT4 = 0xFF7FFFFC;
148 const float LOW_REPR_SAT4 = (*((
const float *) &ILOW_REPR_SAT4));
150 const int ILOW_INSTR_SAT4 = 0xFF7FFFFD;
151 const float LOW_INSTR_SAT4 = (*((
const float *) &ILOW_INSTR_SAT4));
153 const int IHIGH_INSTR_SAT4 = 0xFF7FFFFE;
154 const float HIGH_INSTR_SAT4 = (*((
const float *) &IHIGH_INSTR_SAT4));
156 const int IHIGH_REPR_SAT4 = 0xFF7FFFFF;
157 const float HIGH_REPR_SAT4 = (*((
const float *) &IHIGH_REPR_SAT4));
159 const float VALID_MAX4 = FLT_MAX;
162 const short VALID_MIN2 = ((short)(-32752));
163 const short NULL2 = ((short)(-32768));
164 const short LOW_REPR_SAT2 = ((short)(-32767));
165 const short LOW_INSTR_SAT2 = ((short)(-32766));
166 const short HIGH_INSTR_SAT2 = ((short)(-32765));
167 const short HIGH_REPR_SAT2 = ((short)(-32764));
168 const short VALID_MAX2 = ((short) 32767);
171 const unsigned short VALID_MINU2 = ((
unsigned short) 3);
172 const unsigned short NULLU2 = ((
unsigned short) 0);
173 const unsigned short LOW_REPR_SATU2 = ((
unsigned short) 1);
174 const unsigned short LOW_INSTR_SATU2 = ((
unsigned short) 2);
175 const unsigned short HIGH_INSTR_SATU2 = ((
unsigned short) 65534);
176 const unsigned short HIGH_REPR_SATU2 = ((
unsigned short) 65535);
177 const unsigned short VALID_MAXU2 = ((
unsigned short) 65522);
180 const unsigned char VALID_MIN1 = ((
unsigned char) 1);
181 const unsigned char NULL1 = ((
unsigned char) 0);
182 const unsigned char LOW_REPR_SAT1 = ((
unsigned char) 0);
183 const unsigned char LOW_INSTR_SAT1 = ((
unsigned char) 0);
184 const unsigned char HIGH_INSTR_SAT1 = ((
unsigned char) 255);
185 const unsigned char HIGH_REPR_SAT1 = ((
unsigned char) 255);
186 const unsigned char VALID_MAX1 = ((
unsigned char) 254);
197 return (d < VALID_MIN8);
210 return (f < VALID_MIN4);
221 return (d >= VALID_MIN8);
243 return (d == HIGH_REPR_SAT8) || (d == HIGH_INSTR_SAT8);
254 return (d == LOW_REPR_SAT8) || (d == LOW_INSTR_SAT8);
265 return (d == HIGH_REPR_SAT8);
276 return (d == HIGH_INSTR_SAT8);
287 return (d == LOW_INSTR_SAT8);
298 return (d == LOW_REPR_SAT8);
310 if(t == NULL4)
return (NULL8);
311 if(t == LOW_REPR_SAT4)
return (LOW_REPR_SAT8);
312 if(t == LOW_INSTR_SAT4)
return (LOW_INSTR_SAT8);
313 if(t == HIGH_REPR_SAT4)
return (HIGH_REPR_SAT8);
314 if(t == HIGH_INSTR_SAT4)
return (HIGH_INSTR_SAT8);
315 return (LOW_REPR_SAT8);
317 else if(t > VALID_MAX4) {
318 return (HIGH_REPR_SAT8);
334 if(t < (
double) VALID_MIN4) {
335 if(t == NULL8)
return (NULL4);
336 if(t == LOW_REPR_SAT8)
return (LOW_REPR_SAT4);
337 if(t == LOW_INSTR_SAT8)
return (LOW_INSTR_SAT4);
338 if(t == HIGH_INSTR_SAT8)
return (HIGH_INSTR_SAT4);
339 if(t == HIGH_REPR_SAT8)
return (HIGH_REPR_SAT4);
340 return (LOW_REPR_SAT4);
342 else if(t > (
double) VALID_MAX4) {
343 return (HIGH_REPR_SAT8);
369 return result.setNum(d,
'g', 8);
381 QString s = str.toUpper();
384 legal.push_back(
"NULL");
385 legal.push_back(
"HRS");
386 legal.push_back(
"LRS");
387 legal.push_back(
"HIS");
388 legal.push_back(
"LIS");
390 for(
int i = 0; i < (int) legal.size(); i++) {
391 if(legal[i].mid(0, s.size()) == s) {
396 QString msg =
"Input [" + str +
"] is not a unique abbreviation. Use " + s +
"I or " + s +
"R.";
404 QString msg =
"Input [" + str +
"] does not appear to be a legal special pixel abbreviation or double value.";
408 if(s[0] ==
'N')
return Null;
409 if(s.mid(0, 2) ==
"HR")
return Hrs;
410 if(s.mid(0, 2) ==
"LR")
return Lrs;
411 if(s.mid(0, 2) ==
"HI")
return His;