12#ifndef HDFEOS2ARRAYSWATHDIMMAPFIELD_H 
   13#define HDFEOS2ARRAYSWATHDIMMAPFIELD_H 
   15#include <libdap/Array.h> 
   18#include "HDFEOS2EnumType.h" 
   20class HDFEOS2ArraySwathDimMapField:
public libdap::Array
 
   23    HDFEOS2ArraySwathDimMapField (
int rank,  
const std::string & filename, 
bool isgeofile, 
const int sdfd, 
const int swathfd, 
const std::string & gridname, 
const std::string & swathname, 
const std::string & fieldname, 
const std::vector < struct dimmap_entry >&dimmaps, SOType sotype, 
const string & n = 
"", libdap::BaseType * v = 
nullptr):
 
   31        swathname (swathname), 
 
   32        fieldname (fieldname), 
 
   37        ~ HDFEOS2ArraySwathDimMapField () 
override = 
default;
 
   40        int format_constraint (
int *cor, 
int *step, 
int *edg);
 
   42        libdap::BaseType *ptr_duplicate ()
 override 
   44            return new HDFEOS2ArraySwathDimMapField (*
this);
 
   48        bool read () 
override;
 
   68        std::string swathname;
 
   71        std::string fieldname;
 
   74        std::vector < struct dimmap_entry >dimmaps;
 
   81        int write_dap_data_scale_comp(int32 swid, 
const int nelms,   std::vector<int32> &offset32, std::vector<int32> &count32, std::vector<int32> &step32);
 
   82        int write_dap_data_disable_scale_comp(int32 swid, 
const int nelms,  std::vector<int32> &offset32,std::vector<int32> &count32,std::vector<int32> &step32);
 
   84        template < 
class T > 
int GetFieldValue (int32, 
const std::string &,
const std::vector < struct dimmap_entry >&, std::vector < T > &, std::vector<int32>&);
 
   87        template < 
class T > 
int _expand_dimmap_field (std::vector < T > *pvals, int32 rank, int32 dimsa[], 
int dimindex, int32 ddimsize, int32 offset, int32 inc) 
const;
 
   90        template < 
class T > 
bool FieldSubset (T * outlatlon, 
const std::vector<int32>&newdims, T * latlon, 
const int32 * offset, 
const int32 * count, 
const int32 * step) ;
 
   92        template < 
class T > 
bool Field1DSubset (T * outlatlon, 
const int majordim, T * latlon, 
const int32 * offset, 
const int32 * count, 
const int32 * step);
 
   95        template < 
class T > 
bool Field2DSubset (T * outlatlon, 
const int majordim, 
const int minordim, T * latlon, 
const int32 * offset, 
const int32 * count, 
const int32 * step);
 
   97        template < 
class T > 
bool Field3DSubset (T * outlatlon, 
const std::vector<int32>& newdims, T * latlon, 
const int32 * offset, 
const int32 * count, 
const int32 * step);
 
  101        void close_fileid(
const int32 swid, 
const int32 sfid);
 
  104        bool check_num_elems_constraint(
const int num_elems,
const std::vector<int32>&newdims) 
const;