#include <string>
#include "kstddef.h"
+#include <sys/types.h>
+#include <unistd.h>
#include <array2d.h>
using namespace std;
{
private:
void init (void);
+ Array2dFileLabel (const Array2dFileLabel&);
+ Array2dFileLabel& operator= (const Array2dFileLabel&);
public:
kfloat64 calc_time;
kuint32 mNX;
kuint32 mNY;
+ Array2dFile (const Array2dFile&);
+ Array2dFile& operator= (const Array2dFile&);
+
public:
- Array2d<T> *array;
+ Array2d<T> array;
static const int INT8 = 1;
static const int UINT8 = 2;
void doPixelOffsetScale (double offset, double scale);
T** getArray (void) const
- { return (array == NULL ? NULL : array->getArray()); }
+ { return (array.getArray()); }
bool arrayDataWrite (void);
init();
mNX = x;
mNY = y;
- array = new Array2d<T> (mNX, mNY);
+ array.initSetSize(mNX, mNY);
}
template<class T>
init();
mNX = x;
mNY = y;
- array = new Array2d<T> (mNX, mNY);
+ array.initSetSize(mNX, mNY);
}
template<class T>
mMinX = mMaxX = mMinY = mMaxY = 0;
mOffsetPV = 0;
mScalePV = 1;
- array = NULL;
io = NULL;
#if 0
void
Array2dFile<T>::fileClose (void)
{
- headerWrite ();
- if (file_id >= 0 && array != NULL) {
- arrayDataWrite ();
- close (file_id);
- file_id = -1;
+ if (file_id >= 0) {
+ headerWrite ();
+ close (file_id);
+ file_id = -1;
}
}
}
headerRead();
- if (array != NULL)
- delete array;
- array = new Array2d<T> (mNX, mNY);
+ array.initSetSize(mNX, mNY);
arrayDataRead();
void
Array2dFile<T>::getPixelValueRange (T& pvmin, T& pvmax) const
{
- if (array != NULL) {
- T** da = array->getArray();
+ T** da = array.getArray();
+ if (da) {
pvmax = pvmin = da[0][0];
for (int ix = 0; ix < mNX; ix++)
for (int iy = 0; iy < mNY; iy++)
void
Array2dFile<T>::doPixelOffsetScale (double offset, double scale)
{
- if (adf != NULL) {
- mOffsetPV = offset;
- mScalePV = scale;
-
- T** ad = adf->getArray();
- for (unsigned int ix = 0; ix < mNX; ix++)
- for (unsigned int iy = 0; iy < mNY; iy++)
- ad[ix][iy] = (ad[ix][iy] - offset) * scale;
+ T** ad = array.getArray();
+ if (ad) {
+ mOffsetPV = offset;
+ mScalePV = scale;
+
+ for (unsigned int ix = 0; ix < mNX; ix++)
+ for (unsigned int iy = 0; iy < mNY; iy++)
+ ad[ix][iy] = (ad[ix][iy] - offset) * scale;
}
}
return (false);
}
+ T** da = array.getArray();
+ if (! da)
+ return (false);
+
lseek (file_id, headersize, SEEK_SET);
for (unsigned int ix = 0; ix < mNX; ix++)
for (unsigned int iy = 0; iy < mNY; iy++) {
- T value = array->array_data[ix][iy];
- ConvertNetworkOrder (&value, sizeof(T));
- write (file_id, &value, mPixelSize);
+ T value = da[ix][iy];
+ ConvertReverseNetworkOrder (&value, sizeof(T));
+ write (file_id, &value, mPixelSize);
}
return (true);
return (false);
}
+ T** da = array.getArray();
+ if (! da)
+ return (false);
+
lseek (file_id, headersize, SEEK_SET);
T pixelBuffer;
for (int ix = 0; ix < mNX; ix++)
for (unsigned int iy = 0; iy < mNY; iy++) {
read (file_id, &pixelBuffer, mPixelSize);
- ConvertNetworkOrder (&pixelBuffer, sizeof(T));
- array->array_data[ix][iy] = pixelBuffer;
+ ConvertReverseNetworkOrder (&pixelBuffer, sizeof(T));
+ da[ix][iy] = pixelBuffer;
}
return (true);
return (false);
}
- if (array == NULL) { // Could not have written data if array not allocated
+ if (array.getArray() == NULL) { // Could not have written data if array not allocated
sys_error (ERR_WARNING, "array == NULL [labelSeek]");
return (false);
}
- off_t pos = headersize + array->sizeofArray();
+ off_t pos = headersize + array.sizeofArray();
if (lseek (file_id, pos, SEEK_SET) != pos) {
sys_error (ERR_WARNING, "Can't seek to end of data array");
return (false);
void
Array2dFile<T>::arrayDataClear (void)
{
- if (array != NULL) {
- T** v = array->getArray();
+ T** v = array.getArray();
+ if (v) {
for (unsigned int ix = 0; ix < mNX; ix++)
for (unsigned int iy = 0; iy < mNY; iy++)
v[ix][iy] = 0;
}
-#ifdef MPI_CT
-#include <mpi.h>
+#ifdef HAVE_MPI
+#include <mpi++.h>
#endif
-class F32Image
+class F32Image : public Array2dFile<kfloat32>
{
public:
- Array2dFile<kfloat32> adf;
-
- F32Image (const char* const fname, unsigned int nx, unsigned int ny) : adf (fname, nx, ny)
+ F32Image (const char* const fname, unsigned int nx, unsigned int ny)
+ : Array2dFile<kfloat32>::Array2dFile (fname, nx, ny)
{
- adf.setPixelType (Array2dFile<kfloat64>::FLOAT32);
+ setPixelType (FLOAT32);
}
- F32Image (unsigned int nx, unsigned int ny) : adf (nx, ny)
+ F32Image (unsigned int nx, unsigned int ny)
+ : Array2dFile<kfloat32>::Array2dFile (nx, ny)
{
- adf.setPixelType (Array2dFile<kfloat64>::FLOAT32);
+ setPixelType (FLOAT32);
}
- F32Image (const char* const fname) : adf (fname)
+ F32Image (const char* const fname)
+ : Array2dFile<kfloat32>::Array2dFile (fname)
{
- adf.setPixelType (Array2dFile<kfloat64>::FLOAT32);
+ setPixelType (FLOAT32);
}
- kfloat32** getArray(void) const
- { return adf.getArray(); }
-
- kuint32 nx(void) const
- { return adf.nx(); }
-
- kuint32 ny(void) const
- { return adf.ny(); }
-
-#ifdef MPI_CT
- MPI_Datatype getMPIDataType (void) const
- { return MPI_FLOAT; }
+#ifdef HAVE_MPI
+ MPI::Datatype getMPIDataType (void) const
+ { return MPI::FLOAT; }
#endif
};
-class F64Image
-{
-public:
- Array2dFile<kfloat64> adf;
-#ifdef MPI_CT
- MPI_Datatype getMPIDataType (void) const
- { return MPI_DOUBLE; }
-#endif
+class F64Image : public Array2dFile<kfloat64>
+{
+ public:
- F64Image (const char* const fname, unsigned int nx, unsigned int ny) : adf (fname, nx, ny)
+ F64Image (const char* const fname, unsigned int nx, unsigned int ny)
+ : Array2dFile<kfloat64>::Array2dFile (fname, nx, ny)
{
- adf.setPixelType (Array2dFile<kfloat64>::FLOAT64);
+ setPixelType (FLOAT64);
}
- F64Image (unsigned int nx, unsigned int ny) : adf (nx, ny)
+ F64Image (unsigned int nx, unsigned int ny)
+ : Array2dFile<kfloat64>::Array2dFile (nx, ny)
{
- adf.setPixelType (Array2dFile<kfloat64>::FLOAT64);
+ setPixelType (FLOAT64);
}
- F64Image (const char* const fname) : adf (fname)
+ F64Image (const char* const fname)
+ : Array2dFile<kfloat64>::Array2dFile (fname)
{
- adf.setPixelType (Array2dFile<kfloat64>::FLOAT64);
+ setPixelType (FLOAT64);
}
- kfloat64** getArray(void) const
- { return adf.getArray(); }
-
- kuint32 nx(void) const
- { return adf.nx(); }
-
- kuint32 ny(void) const
- { return adf.ny(); }
+#ifdef HAVE_MPI
+ MPI::Datatype getMPIDataType (void) const
+ { return MPI::DOUBLE; }
+#endif
};
+#define IMAGEFILE_64_BITS 1
+#ifdef IMAGEFILE_64_BITS
typedef F64Image ImageFile;
typedef kfloat64 ImageFileValue;
typedef kfloat64* ImageFileColumn;
typedef kfloat64** ImageFileArray;
+#else
+typedef F32Image ImageFile;
+typedef kfloat32 ImageFileValue;
+typedef kfloat32* ImageFileColumn;
+typedef kfloat32** ImageFileArray;
+#endif
#endif