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()
46BaseType *HDFEOS2CFStr::ptr_duplicate()
48 return new HDFEOS2CFStr(*
this);
55 BESDEBUG(
"h4",
"Coming to HDFEOS2CFStr read "<<endl);
58 string check_pass_fileid_key_str=
"H4.EnablePassFileID";
59 bool check_pass_fileid_key =
false;
60 check_pass_fileid_key = HDFCFUtil::check_beskeys(check_pass_fileid_key_str);
62 bool check_pass_fileid_key = HDF4RequestHandler::get_pass_fileid();
65 int32 (*openfunc) (
char *, intn);
66 intn (*closefunc) (int32);
67 int32 (*attachfunc) (int32,
char *);
68 intn (*detachfunc) (int32);
69 intn (*fieldinfofunc) (int32,
char *, int32 *, int32 *, int32 *,
char *);
70 intn (*readfieldfunc) (int32,
char *, int32 *, int32 *, int32 *,
void *);
74 if(grid_or_swath == 0) {
77 attachfunc = GDattach;
78 detachfunc = GDdetach;
79 fieldinfofunc = GDfieldinfo;
80 readfieldfunc = GDreadfield;
86 attachfunc = SWattach;
87 detachfunc = SWdetach;
88 fieldinfofunc = SWfieldinfo;
89 readfieldfunc = SWreadfield;
93 if (
false == check_pass_fileid_key) {
96 gfid = openfunc (
const_cast < char *
>(filename.c_str ()), DFACC_READ);
99 eherr <<
"File " << filename.c_str () <<
" cannot be open.";
100 throw InternalErr (__FILE__, __LINE__, eherr.str ());
107 int32 gsid = attachfunc (gfid,
const_cast < char *
>(objname.c_str ()));
109 if(
false == check_pass_fileid_key)
112 eherr <<
"Grid/Swath " << objname.c_str () <<
" cannot be attached.";
113 throw InternalErr (__FILE__, __LINE__, eherr.str ());
119 char tmp_dimlist[1024];
121 int32 field_dtype = 0;
123 r = fieldinfofunc (gsid,
const_cast < char *
>(varname.c_str ()),
124 &tmp_rank, tmp_dims, &field_dtype, tmp_dimlist);
127 if(
false == check_pass_fileid_key)
130 eherr <<
"Field " << varname.c_str () <<
" information cannot be obtained.";
131 throw InternalErr (__FILE__, __LINE__, eherr.str ());
135 vector<int32>offset32;
137 vector<int32>count32;
142 count32[0] = tmp_dims[0];
146 val.resize(count32[0]);
148 r = readfieldfunc(gsid,
const_cast<char*
>(varname.c_str()),
149 offset32.data(), step32.data(), count32.data(), val.data());
153 if(
false == check_pass_fileid_key)
156 eherr <<
"swath or grid readdata failed.";
157 throw InternalErr (__FILE__, __LINE__, eherr.str ());
160 string final_str(val.begin(),val.end());
161 set_value(final_str);
163 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.