38 #ifndef DATAARRAY_OBJECT_H
39 #define DATAARRAY_OBJECT_H
91 GeoTessDataArray() : GeoTessData(), nValues(0), values(NULL) {};
101 values =
new T [nValues];
102 for (
int i = 0; i < nValues; ++i) values[i] = v[i];
111 values =
new T [nValues];
112 for (
int i = 0; i < nValues; ++i) values[i] = v[i];
120 values =
new T [nValues];
121 for (
int i = 0; i < n; ++i) values[i] = (T) 0;
134 values =
new T [nValues];
135 for (
int i = 0; i < nValues; ++i) ifs.
readType(values[i]);
143 GeoTessDataArray(IFStreamBinary& ifs,
int n) : GeoTessData(), nValues(n), values(NULL)
147 values =
new T [nValues];
148 ifs.readTypeArray(values, nValues);
161 GeoTessDataArray(IFStreamAscii& ifs,
int n, vector<int>& filter) : GeoTessData(), nValues(n), values(NULL)
165 values =
new T [nValues];
167 for (
int i=0; i<(int)filter.size(); ++i)
171 values[filter[i]] = val;
185 GeoTessDataArray(IFStreamBinary& ifs,
int n, vector<int>& filter) : GeoTessData(), nValues(n), values(NULL)
189 values =
new T [nValues];
192 for (
int i=0; i<(int)filter.size(); ++i)
196 values[filter[i]] = val;
204 virtual ~GeoTessDataArray()
205 {
if (values != NULL)
delete [] values; };
210 virtual void write(IFStreamBinary& ofs)
212 for (
int i = 0; i < nValues; ++i) ofs.writeType(values[i]);
218 virtual void write(IFStreamAscii& ofs)
220 for (
int i = 0; i < nValues; ++i)
221 { ofs.writeString(
" "); ofs.writeType(values[i]); }
234 virtual int size()
const {
return nValues; };
245 if (!GeoTessData::operator==(d))
return false;
246 if (nValues != d.nValues)
return false;
248 for (
int i = 0; i < nValues; ++i)
249 if ((values[i] != d.values[i]) &&
250 !(isNaN(i) && d.
isNaN(i)))
return false;
266 {
return (
double) values[attributeIndex]; }
272 {
return (
float) values[attributeIndex]; };
278 {
return (
LONG_INT) values[attributeIndex]; };
283 virtual int getInt(
int attributeIndex)
const
284 {
return (
int) values[attributeIndex]; };
290 {
return (
short) values[attributeIndex]; };
295 virtual byte getByte(
int attributeIndex)
const
296 {
return (
byte) values[attributeIndex]; };
301 virtual void getValue(
int attributeIndex,
double& val)
const
302 { val = (double) values[attributeIndex]; };
307 virtual void getValue(
int attributeIndex,
float& val)
const
308 { val = (float) values[attributeIndex]; };
314 { val = (
LONG_INT) values[attributeIndex]; };
319 virtual void getValue(
int attributeIndex,
int& val)
const
320 { val = (int) values[attributeIndex]; };
325 virtual void getValue(
int attributeIndex,
short& val)
const
326 { val = (short) values[attributeIndex]; };
331 virtual void getValue(
int attributeIndex,
byte& val)
const
332 { val = (
byte) values[attributeIndex]; };
338 {
for (
int i=0; i<n && i<nValues; ++i) vals[i] = (
double) values[i]; }
344 {
for (
int i=0; i<n && i<nValues; ++i) vals[i] = (
float) values[i]; }
350 {
for (
int i=0; i<n && i<nValues; ++i) vals[i] = (
LONG_INT) values[i]; }
356 {
for (
int i=0; i<n && i<nValues; ++i) vals[i] = (
int) values[i]; }
362 {
for (
int i=0; i<n && i<nValues; ++i) vals[i] = (
short) values[i]; }
368 {
for (
int i=0; i<n && i<nValues; ++i) vals[i] = (
byte) values[i]; }
374 { values[attributeIndex] = (T) v;
return *
this; }
380 { values[attributeIndex] = (T) v;
return *
this; }
386 { values[attributeIndex] = (T) v;
return *
this; }
392 { values[attributeIndex] = (T) v;
return *
this; }
398 { values[attributeIndex] = (T) v;
return *
this; };
404 { values[attributeIndex] = (T) v;
return *
this; }
417 virtual bool isNaN(
int attributeIndex)
const {
return false;};
435 inline bool GeoTessDataArray<double>::isNaN(
int attributeIndex)
const
437 return (isnan(values[attributeIndex]));
444 inline bool GeoTessDataArray<float>::isNaN(
int attributeIndex)
const
446 double v = (double) values[attributeIndex];
454 inline const GeoTessDataType& GeoTessDataArray<double>::getDataType()
const
456 return GeoTessDataType::DOUBLE;
463 inline const GeoTessDataType& GeoTessDataArray<float>::getDataType()
const
465 return GeoTessDataType::FLOAT;
472 inline const GeoTessDataType& GeoTessDataArray<LONG_INT>::getDataType()
const
474 return GeoTessDataType::LONG;
481 inline const GeoTessDataType& GeoTessDataArray<int>::getDataType()
const
483 return GeoTessDataType::INT;
490 inline const GeoTessDataType& GeoTessDataArray<short>::getDataType()
const
492 return GeoTessDataType::SHORT;
499 inline const GeoTessDataType& GeoTessDataArray<byte>::getDataType()
const
501 return GeoTessDataType::BYTE;
508 #endif // DATAARRAY_OBJECT_H