77 pugi::xml_document d_xml_doc;
78 std::shared_ptr<http::url> d_dataset_elem_href;
83 static bool d_elide_unsupported;
86 static const std::set<std::string> variable_elements;
88 static void load_config_from_keys();
89 void process_dataset(libdap::DMR *dmr,
const pugi::xml_node &xml_root);
90 static pugi::xml_node get_variable_xml_node(libdap::BaseType *btp);
91 void add_mblock_index(
const pugi::xml_node &chunk,std::queue<std::vector<std::pair<unsigned long long, unsigned long long>>>& mb_index_queue,
92 std::vector<std::pair<unsigned long long, unsigned long long >>&)
const;
94 void process_block(
dmrpp::DmrppCommon *dc,
const pugi::xml_node &chunk,
unsigned int block_count)
const;
95 void process_multi_blocks_chunk(
dmrpp::DmrppCommon *dc,
const pugi::xml_node &chunk, std::queue<std::vector<std::pair<unsigned long long, unsigned long long>>>& mb_index_queue)
const;
96 bool process_chunks(libdap::BaseType *btp,
const pugi::xml_node &chunks)
const;
98 static void process_fill_value_chunks(libdap::BaseType *btp,
const std::set<shape> &chunk_map,
const shape &chunk_shape,
99 const shape &array_shape,
unsigned long long chunk_size,
unsigned int struct_size);
101 static bool is_simple_dap_structure_scalar_array(libdap::BaseType *btp, std::vector<std::pair<libdap::Type,int>> &structure_type_element);
102 static bool is_simple_dap_structure_internal(
const libdap::Structure *ds, std::vector<std::pair<libdap::Type,int>> &structure_type_element);
104 static std::vector<unsigned long long int> get_array_dims(libdap::Array *array);
105 static size_t logical_chunks(
const std::vector<unsigned long long> &array_dim_sizes,
const dmrpp::DmrppCommon *dc);
106 static std::set< std::vector<unsigned long long> > get_chunk_map(
const std::vector<std::shared_ptr<Chunk>> &chunks);
108 static void process_compact(libdap::BaseType *btp,
const pugi::xml_node &compact);
109 static void process_compact_subset(
DmrppArray *da, std::vector<u_int8_t>& decoded);
110 static void process_missing_data(libdap::BaseType *btp,
const pugi::xml_node &missing_data);
111 static void handle_subset(
dmrpp::DmrppArray *da, libdap::Array::Dim_iter dim_iter,
unsigned long & subset_index, std::vector<unsigned long long> & subset_pos,
112 std::vector<unsigned char>& subset_buf, std::vector<unsigned char>& whole_buf);
113 static size_t INDEX_nD_TO_1D (
const std::vector <unsigned long long > &dims,
const std::vector < unsigned long long> &pos) ;
115 static void process_special_structure_data(libdap::BaseType *btp,
const pugi::xml_node &special_structure_data);
116 static void process_special_structure_data_internal(
DmrppStructure * dmrpp_s, std::vector<u_int8_t> &values ,
size_t total_value_size,
size_t & values_offset);
117 static bool supported_special_structure_type(libdap::BaseType *btp);
118 static bool supported_special_structure_type_internal(libdap::Constructor *var_ctor);
119 static void process_vlsa(libdap::BaseType *btp,
const pugi::xml_node &vlsa_element);
121 static pugi::xml_node get_variable_xml_node_helper(
const pugi::xml_node &var_node, std::stack<libdap::BaseType*> &bt);
122 static void build_basetype_chain(libdap::BaseType *btp, std::stack<libdap::BaseType*> &bt);
124 static void process_group(libdap::DMR *dmr, libdap::D4Group *parent,
const pugi::xml_node &var_node);
125 static void process_dimension(libdap::D4Group *grp,
const pugi::xml_node &dimension_node);
126 static void process_variable(libdap::DMR *dmr, libdap::D4Group *grp, libdap::Constructor *parent,
const pugi::xml_node &var_node);
127 static void process_dim(libdap::DMR *dmr, libdap::D4Group *grp, libdap::Array *array,
const pugi::xml_node &dim_node);
128 static void process_map(libdap::DMR *dmr, libdap::D4Group *grp, libdap::Array *array,
const pugi::xml_node &map_node);
129 static libdap::BaseType *build_variable(libdap::DMR *dmr, libdap::D4Group *group, libdap::Type t,
const pugi::xml_node &var_node);
130 static libdap::BaseType *add_scalar_variable(libdap::DMR *dmr, libdap::D4Group *group, libdap::Constructor *parent, libdap::Type t,
const pugi::xml_node &var_node);
131 static libdap::BaseType *add_array_variable(libdap::DMR *dmr, libdap::D4Group *grp, libdap::Constructor *parent, libdap::Type t,
const pugi::xml_node &var_node);
132 static void process_attribute(libdap::D4Attributes *attributes,
const pugi::xml_node &dap_attr_node);
136 void load_attributes(libdap::BaseType *btp, pugi::xml_node var_node)
const;
138 friend class DMZTest;
145 explicit DMZ(
const std::string &file_name);
147 virtual ~DMZ() =
default;
156 virtual bool set_up_all_direct_io_flags_phase_1(libdap::DMR *dmr);
157 virtual bool set_up_direct_io_flag_phase_1(libdap::D4Group *group);
158 virtual bool set_up_direct_io_flag_phase_1(libdap::BaseType *btp);
160 virtual void set_up_all_direct_io_flags_phase_2(libdap::DMR *dmr);
161 virtual void set_up_direct_io_flag_phase_2(libdap::D4Group *group);
162 virtual void set_up_direct_io_flag_phase_2(libdap::BaseType *btp);
165 virtual void load_attributes(libdap::BaseType *btp);
166 virtual void load_attributes(libdap::Constructor *constructor);
167 virtual void load_attributes(libdap::D4Group *group);
171 virtual void load_all_attributes(libdap::DMR *dmr);