r73: Added C++ image files
[ctsim.git] / include / imagefile.h
index 0c2f8b5c990c0ce8c88d6a35c1ee290520fe42e2..098d0c7272c585291cbe9998c148786f06c067ad 100644 (file)
@@ -98,14 +98,16 @@ public:
   Array2dFile (const char* const filename, unsigned int nx, unsigned int ny);
   ~Array2dFile ();
 
-  virtual unsigned int getNumLabels (void) const
-  { return num_labels; }
+  unsigned int getNumLabels (void) const
+      { return num_labels; }
 
   bool labelRead (Array2dFileLabel& label, unsigned int label_num);
 
-  bool labelAdd (const char* const label_str, double calc_time=0.);
+  void labelAdd (const Array2dFileLabel& label);
 
-  bool labelAdd (int type, const char* const label_str, double calc_time=0.);
+  void labelAdd (const char* const label_str, double calc_time=0.);
+
+  void labelAdd (int type, const char* const label_str, double calc_time=0.);
 
   void fileClose (void);
 
@@ -382,7 +384,7 @@ Array2dFile<T>::arrayDataWrite (void)
   }
 
   lseek (file_id, headersize, SEEK_SET);
-  for (int ix = 0; ix < nx; ix++)
+  for (unsigned int ix = 0; ix < nx; ix++)
     {
       write (file_id, array->array_data[ix], ny * pixel_size);
     }
@@ -500,18 +502,25 @@ Array2dFile<T>::labelRead (Array2dFileLabel& label, unsigned int label_num)
 
 
 template<class T>
-bool
+void
 Array2dFile<T>::labelAdd (const char* const lstr, double calc_time=0.)
 {
   labelAdd (Array2dFileLabel::L_HISTORY, lstr, calc_time);
 }
 
 template<class T>
-bool
+void
 Array2dFile<T>::labelAdd (int type, const char* const lstr, double calc_time=0.)
 {
   Array2dFileLabel label (type, lstr, calc_time);
 
+  labelAdd (label);
+}
+
+template<class T>
+void
+Array2dFile<T>::labelAdd (const Array2dFileLabel& label)
+{
   labelSeek (num_labels);
   
   write_nint16 (&label.label_type, file_id);
@@ -535,49 +544,66 @@ Array2dFile<T>::labelAdd (int type, const char* const lstr, double calc_time=0.)
 
 #endif
 
+#ifdef MPI_CT
+#include <mpi.h>
+#endif
 
 class F32Image
 {
 public:
-  Array2dFile<kfloat32> idf;
+  Array2dFile<kfloat32> adf;
 
-  F32Image (const char* const fname, unsigned int nx, unsigned int ny) : idf (fname, nx, ny)
+  F32Image (const char* const fname, unsigned int nx, unsigned int ny) : adf (fname, nx, ny)
   {
-      idf.pixel_type = Array2dFile<kfloat32>::FLOAT32;
+      adf.pixel_type = Array2dFile<kfloat32>::FLOAT32;
   }
 
-  F32Image (unsigned int nx, unsigned int ny) : idf (nx, ny)
+  F32Image (unsigned int nx, unsigned int ny) : adf (nx, ny)
   {
-      idf.pixel_type = Array2dFile<kfloat32>::FLOAT32;
+      adf.pixel_type = Array2dFile<kfloat32>::FLOAT32;
   }
 
-  F32Image (const char* const fname) : idf (fname)
+  F32Image (const char* const fname) : adf (fname)
   {
-      idf.pixel_type = Array2dFile<kfloat32>::FLOAT32;
+      adf.pixel_type = Array2dFile<kfloat32>::FLOAT32;
   }
+
+#ifdef MPI_CT
+  MPI_Datatype getMPIDataType (void) const
+      { return MPI_FLOAT; }
+#endif
 };
 
 class F64Image 
 {
 public:
-  Array2dFile<kfloat64> idf;
+  Array2dFile<kfloat64> adf;
+
+#ifdef MPI_CT
+  MPI_Datatype getMPIDataType (void) const
+      { return MPI_DOUBLE; }
+#endif
 
-  F64Image (const char* const fname, unsigned int nx, unsigned int ny) : idf (fname, nx, ny)
+  F64Image (const char* const fname, unsigned int nx, unsigned int ny) : adf (fname, nx, ny)
   {
-      idf.pixel_type = Array2dFile<kfloat64>::FLOAT64;
+      adf.pixel_type = Array2dFile<kfloat64>::FLOAT64;
   }
 
-  F64Image (unsigned int nx, unsigned int ny) : idf (nx, ny)
+  F64Image (unsigned int nx, unsigned int ny) : adf (nx, ny)
   {
-      idf.pixel_type = Array2dFile<kfloat64>::FLOAT64;
+      adf.pixel_type = Array2dFile<kfloat64>::FLOAT64;
   }
 
-  F64Image (const char* const fname) : idf (fname)
+  F64Image (const char* const fname) : adf (fname)
   {
-      idf.pixel_type = Array2dFile<kfloat64>::FLOAT64;
+      adf.pixel_type = Array2dFile<kfloat64>::FLOAT64;
   }
 };
 
-typedef F64Image ImageFile;
+typedef F64Image   ImageFile;
+typedef kfloat64   ImageFileValue;
+typedef kfloat64*  ImageFileColumn;
+typedef kfloat64** ImageFileArray;
+