25 #ifndef _dmrpp_common_h
26 #define _dmrpp_common_h 1
34 #include "dods-datatypes.h"
36 #include "SuperChunk.h"
39 #include "byteswap_compat.h"
44 class D4BaseTypeFactory;
54 void join_threads(pthread_t threads[],
unsigned int num_threads);
70 friend class DmrppCommonTest;
71 friend class DmrppParserTest;
72 friend class DmrppTypeReadTest;
78 std::string d_byte_order;
79 std::vector<unsigned int> d_chunk_dimension_sizes;
80 std::vector<std::shared_ptr<Chunk>> d_chunks;
85 d_deflate = dc.d_deflate;
86 d_shuffle = dc.d_shuffle;
87 d_compact = dc.d_compact;
88 d_chunk_dimension_sizes = dc.d_chunk_dimension_sizes;
89 d_chunks = dc.d_chunks;
90 d_byte_order = dc.d_byte_order;
91 d_twiddle_bytes = dc.d_twiddle_bytes;
96 virtual std::vector<std::shared_ptr<Chunk>>
get_chunks() {
100 virtual char *
read_atomic(
const std::string &name);
107 DmrppCommon() : d_deflate(false), d_shuffle(false), d_compact(false),d_byte_order(
""), d_twiddle_bytes(false)
113 m_duplicate_common(dc);
116 virtual ~DmrppCommon()=
default;
157 virtual const std::vector<unsigned int> &get_chunk_dimension_sizes()
const {
158 return d_chunk_dimension_sizes;
167 unsigned int elements = 1;
168 for (
auto d_chunk_dimension_size : d_chunk_dimension_sizes) {
169 elements *= d_chunk_dimension_size;
177 void print_compact_element(libdap::XMLWriter &xml,
const std::string &name_space =
"",
const std::string &encoded =
"");
179 void print_dmrpp(libdap::XMLWriter &writer,
bool constrained =
false);
187 for (
auto chunk_dim : chunk_dims) {
188 d_chunk_dimension_sizes.push_back(chunk_dim);
197 virtual std::string get_byte_order()
const {
return d_byte_order; }
199 virtual unsigned long add_chunk(
const std::string &data_url,
const std::string &byte_order,
200 unsigned long long size,
unsigned long long offset,
const std::string &position_in_array =
"");
202 virtual unsigned long add_chunk(
const std::string &data_url,
const std::string &byte_order,
203 unsigned long long size,
const unsigned long long offset,
const std::vector<unsigned int> &position_in_array);
205 virtual void dump(std::ostream & strm)
const;
Size and offset information of data included in DMR++ files.
static std::string d_ns_prefix
The XML namespace prefix to use.
virtual bool twiddle_bytes() const
Returns true if this object utilizes shuffle compression.
virtual unsigned int get_chunk_size_in_elements() const
Get the number of elements in this chunk.
void set_chunk_dimension_sizes(const std::vector< size_t > &chunk_dims)
Set the value of the chunk dimension sizes given a vector of HDF5 hsize_t.
static bool d_print_chunks
if true, print_dap4() prints chunk elements
virtual bool is_compact_layout() const
Returns true if this object utilizes COMPACT layout.
virtual void ingest_compression_type(const std::string &compression_type_string)
Parses the text content of the XML element h4:chunkDimensionSizes into the internal vector<unsigned i...
virtual std::vector< std::shared_ptr< Chunk > > get_immutable_chunks() const
A const reference to the vector of chunks.
virtual unsigned long add_chunk(const std::string &data_url, const std::string &byte_order, unsigned long long size, unsigned long long offset, const std::string &position_in_array="")
Add a new chunk as defined by an h4:byteStream element.
void print_compact_element(libdap::XMLWriter &xml, const std::string &name_space="", const std::string &encoded="")
Print the Compact base64-encoded information.
static std::string d_dmrpp_ns
The DMR++ XML namespace.
void print_chunks_element(libdap::XMLWriter &xml, const std::string &name_space="")
Print the Chunk information.
void set_deflate(bool value)
Set the value of the deflate property.
virtual void parse_chunk_dimension_sizes(const std::string &chunk_dim_sizes_string)
Set the dimension sizes for a chunk.
virtual std::vector< std::shared_ptr< Chunk > > get_chunks()
Returns a reference to the internal Chunk vector.
virtual void ingest_byte_order(const std::string &byte_order_string)
Parses the text content of the XML element chunks:byteOrder.
virtual bool is_shuffle_compression() const
Returns true if this object utilizes shuffle compression.
virtual bool is_deflate_compression() const
Returns true if this object utilizes deflate compression.
void set_compact(bool value)
Set the value of the compact property.
void print_dmrpp(libdap::XMLWriter &writer, bool constrained=false)
Print the DMR++ response for the Scalar types.
void set_shuffle(bool value)
Set the value of the shuffle property.
virtual char * read_atomic(const std::string &name)
read method for the atomic types