11#include "config_hdf.h"
16#include <libdap/debug.h>
17#include <libdap/InternalErr.h>
23#include "HDF4RequestHandler.h"
28HDFEOS2CFStr::HDFEOS2CFStr(
const int gsfd,
29 const std::string &filename,
30 const std::string &objname,
31 const std::string &varname,
32 const std::string &varnewname,
34 :
Str(varnewname,filename),
39 grid_or_swath(grid_or_swath)
43HDFEOS2CFStr::~HDFEOS2CFStr() =
default;
45BaseType *HDFEOS2CFStr::ptr_duplicate()
47 return new HDFEOS2CFStr(*
this);
54 BESDEBUG(
"h4",
"Coming to HDFEOS2CFStr read "<<endl);
56 bool check_pass_fileid_key = HDF4RequestHandler::get_pass_fileid();
59 int32 (*openfunc) (
char *, intn);
60 intn (*closefunc) (int32);
61 int32 (*attachfunc) (int32,
char *);
62 intn (*detachfunc) (int32);
63 intn (*fieldinfofunc) (int32,
char *, int32 *, int32 *, int32 *,
char *);
64 intn (*readfieldfunc) (int32,
char *, int32 *, int32 *, int32 *,
void *);
68 if (grid_or_swath == 0) {
71 attachfunc = GDattach;
72 detachfunc = GDdetach;
73 fieldinfofunc = GDfieldinfo;
74 readfieldfunc = GDreadfield;
80 attachfunc = SWattach;
81 detachfunc = SWdetach;
82 fieldinfofunc = SWfieldinfo;
83 readfieldfunc = SWreadfield;
87 if (
false == check_pass_fileid_key) {
90 gfid = openfunc (
const_cast < char *
>(filename.c_str ()), DFACC_READ);
93 eherr <<
"File " << filename.c_str () <<
" cannot be open.";
94 throw InternalErr (__FILE__, __LINE__, eherr.str ());
101 int32 gsid = attachfunc (gfid,
const_cast < char *
>(objname.c_str ()));
103 if (
false == check_pass_fileid_key)
106 eherr <<
"Grid/Swath " << objname.c_str () <<
" cannot be attached.";
107 throw InternalErr (__FILE__, __LINE__, eherr.str ());
113 char tmp_dimlist[1024];
115 int32 field_dtype = 0;
117 r = fieldinfofunc (gsid,
const_cast < char *
>(varname.c_str ()),
118 &tmp_rank, tmp_dims, &field_dtype, tmp_dimlist);
121 if (
false == check_pass_fileid_key)
124 eherr <<
"Field " << varname.c_str () <<
" information cannot be obtained.";
125 throw InternalErr (__FILE__, __LINE__, eherr.str ());
136 count32[0] = tmp_dims[0];
140 val.resize(count32[0]);
142 r = readfieldfunc(gsid,
const_cast<char*
>(varname.c_str()),
143 offset32.data(), step32.data(), count32.data(), val.data());
147 if (
false == check_pass_fileid_key)
150 eherr <<
"swath or grid readdata failed.";
151 throw InternalErr (__FILE__, __LINE__, eherr.str ());
154 string final_str(val.begin(),val.end());
155 set_value(final_str);
157 if (
false == check_pass_fileid_key)
This class provides a way to map HDFEOS2 1-D character array to DAP Str for the CF option.