99 friend class DmrppCommonTest;
100 friend class DmrppParserTest;
101 friend class DMZTest;
103 bool d_compact =
false;
104 bool d_missing_data =
false;
105 bool d_disable_dio =
false;
107 std::string d_filters;
108 std::string d_byte_order;
109 std::vector<unsigned long long> d_chunk_dimension_sizes;
110 std::vector<std::shared_ptr<Chunk>> d_chunks;
111 bool d_twiddle_bytes =
false;
115 bool d_chunks_loaded =
false;
116 bool d_attributes_loaded =
false;
118 bool d_uses_fill_value {
false};
120 std::string d_fill_value_str;
121 libdap::Type d_fill_value_type{libdap::dods_null_c};
130 bool d_one_chunk_fill_value {
false};
137 std::shared_ptr<DMZ> d_dmz;
138 pugi::xml_node d_xml_node;
142 unsigned long long var_chunks_storage_size = 0;
143 std::vector<unsigned int> deflate_levels;
144 bool processing_fv_chunks =
false;
145 bool using_linked_block =
false;
146 unsigned int total_linked_blocks =0;
148 bool multi_linked_blocks_chunk =
false;
151 std::vector<unsigned int> struct_offsets;
153 virtual char *
read_atomic(
const std::string &name);
154 virtual char *
read_atomic(
const std::string &name,
size_t & buf_size);
157 friend void compute_super_chunks(
dmrpp::DmrppArray *array,
bool only_constrained, std::vector<dmrpp::SuperChunk *> &super_chunks);
164 DmrppCommon() =
default;
166 explicit DmrppCommon(std::shared_ptr<DMZ> dmz) : d_dmz(std::move(dmz)) { }
179 const std::vector<unsigned int> & get_deflate_levels()
const {
return deflate_levels;}
180 void set_deflate_levels(
const std::vector<unsigned int>& def_levels) {
181 for(
const auto &def_level:def_levels)
182 deflate_levels.push_back(def_level);
184 void set_struct_offsets(
const std::vector<unsigned int>& s_offs) {
185 for(
const auto &s_o:s_offs)
186 struct_offsets.push_back(s_o);
188 const std::vector<unsigned int> & get_struct_offsets()
const {
return struct_offsets;}
190 void set_processing_fv_chunks() { processing_fv_chunks =
true;}
191 bool get_processing_fv_chunks()
const {
return processing_fv_chunks; }
193 void set_using_linked_block() { using_linked_block =
true;}
194 bool get_using_linked_block()
const {
return using_linked_block; }
196 void set_total_linked_blocks(
unsigned tlbs) { total_linked_blocks = tlbs;}
197 unsigned int get_total_linked_blocks()
const {
return total_linked_blocks; }
199 virtual bool is_filters_empty()
const {
200 return d_filters.empty();
215 return d_missing_data;
220 d_missing_data = value;
225 return multi_linked_blocks_chunk;
230 multi_linked_blocks_chunk = value;
236 return d_disable_dio;
241 d_disable_dio = value;
252 virtual void set_chunks_loaded(
bool state) { d_chunks_loaded = state; }
256 virtual void set_attributes_loaded(
bool state) { d_attributes_loaded = state; }
258 virtual const pugi::xml_node &get_xml_node()
const {
return d_xml_node; }
259 virtual void set_xml_node(pugi::xml_node node) { d_xml_node = node; }
266 std::vector<std::shared_ptr<Chunk>> get_chunks()
const {
return d_chunks; }
275 return d_chunk_dimension_sizes;
281 unsigned long long elements = 1;
282 for (
auto d_chunk_dimension_size : d_chunk_dimension_sizes) {
283 elements *= d_chunk_dimension_size;
315 void print_compact_element(libdap::XMLWriter &xml,
const std::string &name_space =
"",
const std::string &encoded =
"")
const;
316 void print_missing_data_element(
const libdap::XMLWriter &xml,
const std::string &name_space =
"",
const std::string &encoded =
"")
const;
317 void print_missing_data_element(
const libdap::XMLWriter &xml,
const std::string &name_space,
const char *data,
int length)
const;
318 void print_special_structure_element(
const libdap::XMLWriter &xml,
const std::string &name_space =
"",
const std::string &encoded =
"")
const;
320 void print_dmrpp(libdap::XMLWriter &writer,
bool constrained =
false);
324 d_chunk_dimension_sizes.clear();
326 for (
auto chunk_dim : chunk_dims) {
327 d_chunk_dimension_sizes.emplace_back(chunk_dim);
341 virtual std::string get_byte_order()
const {
return d_byte_order; }
349 std::shared_ptr<http::url> d_data_url,
350 const std::string &byte_order,
351 unsigned long long size,
352 unsigned long long offset,
353 const std::string &position_in_array);
356 std::shared_ptr<http::url> d_data_url,
357 const std::string &byte_order,
358 unsigned long long size,
359 unsigned long long offset,
360 unsigned int filter_mask,
361 const std::string &position_in_array);
364 std::shared_ptr<http::url> d_data_url,
365 const std::string &byte_order,
366 unsigned long long size,
367 unsigned long long offset,
369 unsigned int linked_block_index);
372 std::shared_ptr<http::url> d_data_url,
373 const std::string &byte_order,
374 unsigned long long size,
375 unsigned long long offset,
376 const std::vector<unsigned long long> &position_in_array,
bool multi_linked_blocks,
unsigned int multi_linked_block_index_in_dmrpp_file);
380 std::shared_ptr<http::url> d_data_url,
381 const std::string &byte_order,
382 unsigned long long size,
383 unsigned long long offset,
384 const std::vector<unsigned long long> &position_in_array);
388 std::shared_ptr<http::url> d_data_url,
389 const std::string &byte_order,
390 unsigned long long size,
391 unsigned long long offset,
392 unsigned int filter_mask,
393 const std::vector<unsigned long long> &position_in_array);
397 const std::string &byte_order,
398 unsigned long long size,
399 unsigned long long offset,
400 const std::string &position_in_array);
403 const std::string &byte_order,
404 unsigned long long size,
405 unsigned long long offset,
407 unsigned int linked_block_index);
411 const std::string &byte_order,
412 unsigned long long size,
413 unsigned long long offset,
414 const std::vector<unsigned long long> &position_in_array,
415 bool multi_linked_blocks,
416 unsigned int linked_block_index);
420 const std::string &byte_order,
421 unsigned long long size,
422 unsigned long long offset,
423 const std::vector<unsigned long long> &position_in_array);
428 std::shared_ptr<http::url> d_data_url,
429 const std::string &byte_order,
430 const std::string &position_in_array,
431 const std::vector<std::pair<unsigned long long, unsigned long long>> &lb_offset_length);
434 const std::string &byte_order,
435 const std::string &position_in_array,
436 const std::vector<std::pair<unsigned long long, unsigned long long>> &lb_offset_length);
439 const std::string &byte_order,
440 unsigned long long size,
441 unsigned long long offset,
442 unsigned int filter_mask,
443 const std::vector<unsigned long long> &position_in_array);
446 const std::string &byte_order,
447 const std::string &fill_value,
448 libdap::Type fv_type,
449 unsigned long long chunk_size,
450 const std::vector<unsigned long long> &position_in_array);
454 const std::string &byte_order,
455 const std::string &fill_value,
456 libdap::Type fv_type,
457 unsigned long long chunk_size,
458 const std::vector<unsigned long long> &position_in_array,
459 const std::vector<std::pair<libdap::Type,int>> &structure_type_element);
463 const std::string &byte_order,
464 const std::string &fill_value,
465 libdap::Type fv_type,
466 unsigned long long chunk_size,
467 const std::vector<unsigned long long> &position_in_array,
468 unsigned int struct_size);
471 void accumlate_storage_size(
unsigned long long chunk_storage_size) {var_chunks_storage_size += chunk_storage_size; }
472 unsigned long long get_var_chunks_storage_size()
const {
return var_chunks_storage_size; }
473 virtual void dump(std::ostream & strm)
const;