68 #ifdef HAVE_SYS_PARAM_H
69 #include <sys/param.h>
97 #define SIGNED_BYTE_TO_INT32 1
99 BaseType *
NewDAPVar(
const string &varname,
100 const string &dataset,
107 fieldeq(
const string & s) {
111 bool operator() (
const hdf_field & f)
const {
112 return (f.
name == _val);
124 if (!vd || vd.
fields.size() == 0 || vd.
name.empty())
131 for (
int i = 0; i < (int) vd.
fields.size(); ++i) {
133 vd.
fields[i].name.empty()) {
142 if (vd.
fields[i].vals[0].number_type() == DFNT_CHAR8
143 || vd.
fields[i].vals[0].number_type() == DFNT_UCHAR8) {
146 string subname = vd.
fields[i].name +
"__0";
147 BaseType *bt =
new HDFStr(subname, dataset);
153 for (
int j = 0; j < (int) vd.
fields[i].vals.size(); ++j) {
155 strm << vd.
fields[i].name <<
"__" << j;
158 vd.
fields[i].vals[j].number_type());
179 gr_map &grmap,
const string &dataset)
182 if (vg.
name.length() == 0)
189 bool nonempty =
false;
193 for (
int i = 0; i < (int) vg.
tags.size(); ++i) {
194 int32 tag = vg.
tags[i];
195 int32 ref = vg.
refs[i];
202 if (sdmap[ref].sds.has_scale()) {
210 if (grmap.find(ref) != grmap.end()){
215 sdmap, vdmap, grmap, dataset);
244 if (sds.
name.length() == 0)
246 if (sds.
dims.size() == 0)
260 for (
int i = 0; i < (int) sds.
dims.size(); ++i)
261 ar->append_dim(sds.
dims[i].count, sds.
dims[i].name);
274 if (gr.
name.length() == 0)
293 ar->append_dim(gr.
dims[1], gr.
name +
"__Y");
294 ar->append_dim(gr.
dims[0], gr.
name +
"__X");
306 BESDEBUG(
"h4",
"NewGridFromSDS" << endl);
321 gr->add_var(ar, array);
327 for (
int i = 0; i < (int) sds.
dims.size(); ++i) {
328 if (sds.
dims[i].name.length() == 0) {
332 mapname = sds.
dims[i].name;
334 sds.
dims[i].scale.number_type())) == 0) {
338 dmar =
new HDFArray(mapname, dataset, dsbt);
340 dmar->append_dim(sds.
dims[i].count);
341 gr->add_var(dmar, maps);
358 const string &dataset,
369 return new HDFInt16(varname, dataset);
371 #ifdef SIGNED_BYTE_TO_INT32
375 return new HDFInt32(varname, dataset);
385 #ifndef SIGNED_BYTE_TO_INT32
391 return new HDFByte(varname, dataset);
403 return string(
"Float32");
406 return string(
"Float64");
409 return string(
"Int16");
411 #ifdef SIGNED_BYTE_TO_INT32
415 return string(
"Int32");
418 return string(
"UInt16");
421 return string(
"UInt32");
424 #ifndef SIGNED_BYTE_TO_INT32
428 return string(
"Byte");
433 return string(
"String");
443 #ifdef SIGNED_BYTE_TO_INT32
452 ar->val2buf(const_cast < char *>(sds.
data.
data()));
455 ar->val2buf(const_cast < char *>(sds.
data.
data()));
463 #ifdef SIGNED_BYTE_TO_INT32
473 ar->val2buf(const_cast < char *>(gr.
image.
data()));
476 ar->val2buf(const_cast < char *>(gr.
image.
data()));
489 if (primary_array.send_p()) {
491 primary_array.set_read_p(
true);
494 if (primary_array.dimensions() != sds.
dims.size())
497 Grid::Map_iter p = gr->map_begin();
498 for (
unsigned int i = 0;
499 i < sds.
dims.size() && p != gr->map_end(); ++i, ++p) {
500 if ((*p)->send_p()) {
501 #ifdef SIGNED_BYTE_TO_INT32
502 switch (sds.
dims[i].scale.number_type()) {
510 (*p)->val2buf(const_cast < char *>
511 (sds.
dims[i].scale.data()));
514 (*p)->val2buf(const_cast < char *>(sds.
dims[i].scale.data()));
516 (*p)->set_read_p(
true);
525 Constructor::Vars_iter p;
526 for (p = seq->var_begin(); p != seq->var_end(); ++p) {
530 vector < hdf_field >::iterator vf =
532 fieldeq(stru.name()));
533 if (vf == vd.
fields.end())
549 if (row < 0 || f.
vals.size() <= 0 || row > (int) f.
vals[0].size())
552 BaseType *firstp = *stru->var_begin();
553 if (firstp->type() == dods_str_c) {
558 for (
unsigned int i = 0; i < f.
vals.size(); ++i) {
560 str += f.
vals[i].elt_char8(row);
563 firstp->val2buf(static_cast < void *>(&str));
564 firstp->set_read_p(
true);
569 Constructor::Vars_iter q;
570 for (q = stru->var_begin(); q != stru->var_end(); ++q, ++i) {
577 (*q)->set_read_p(
true);
586 const string & hdf_file)
590 Constructor::Vars_iter q;
591 for (q = str->var_begin(); err == 0 && q != str->var_end(); ++q, ++i) {
593 BESDEBUG(
"h4",
"Reading within LoadStructureFromVgroup: " << p->name()
594 <<
", send_p: " << p->send_p() <<
", vg.names[" << i <<
"]: "
596 if (p && p->send_p() && p->name() == vg.
vnames[i]) {
HDFArray * NewArrayFromGR(const hdf_gri &gr, const string &dataset)
bool has_scale(void) const
map< int32, vd_info, less< int32 > > vd_map
HDFGrid * NewGridFromSDS(const hdf_sds &sds, const string &dataset)
const char * data(void) const
vector< hdf_genvec > vals
HDFSequence * NewSequenceFromVdata(const hdf_vdata &vd, const string &dataset)
void LoadSequenceFromVdata(HDFSequence *seq, hdf_vdata &vd, int row)
vector< hdf_field > fields
string DAPTypeName(int32 hdf_type)
map< int32, gr_info, less< int32 > > gr_map
void LoadArrayFromSDS(HDFArray *ar, const hdf_sds &sds)
int32 number_type(void) const
void LoadStructureFromField(HDFStructure *stru, hdf_field &f, int row)
HDFArray * NewArrayFromSDS(const hdf_sds &sds, const string &dataset)
void LoadGridFromSDS(HDFGrid *gr, const hdf_sds &sds)
void LoadArrayFromGR(HDFArray *ar, const hdf_gri &gr)
virtual void set_read_p(bool state)
void * ExportDataForDODS(const hdf_genvec &v)
HDFStructure * NewStructureFromVgroup(const hdf_vgroup &vg, vg_map &vgmap, sds_map &sdmap, vd_map &vdmap, gr_map &grmap, const string &dataset)
void LoadStructureFromVgroup(HDFStructure *str, const hdf_vgroup &vg, const string &hdf_file)
#define BESDEBUG(x, y)
macro used to send debug information to the debug stream
map< int32, sds_info, less< int32 > > sds_map
BaseType * NewDAPVar(const string &varname, const string &dataset, int32 hdf_type)
map< int32, vg_info, less< int32 > > vg_map