24 #ifndef _dmrpp_array_h
25 #define _dmrpp_array_h 1
32 #include "DmrppCommon.h"
41 #undef USE_READ_SERIAL
67 DmrppArray::dimension get_dimension(
unsigned int dim_num);
69 void insert_constrained_contiguous(Dim_iter p,
unsigned long *target_index, std::vector<unsigned int> &subsetAddress,
70 const std::vector<unsigned int> &array_shape,
char *data);
71 virtual void read_contiguous();
73 #ifdef USE_READ_SERIAL
74 virtual void insert_chunk_serial(
unsigned int dim, std::vector<unsigned int> *target_element_address,
75 std::vector<unsigned int> *chunk_source_address,
Chunk *chunk);
76 virtual void read_chunks_serial();
79 unsigned long long get_chunk_start(
const dimension &thisDim,
unsigned int chunk_origin_for_dim);
81 Chunk *find_needed_chunks(
unsigned int dim, std::vector<unsigned int> *target_element_address,
Chunk *chunk);
82 void insert_chunk(
unsigned int dim, std::vector<unsigned int> *target_element_address, std::vector<unsigned int> *chunk_element_address,
83 Chunk *chunk,
const vector<unsigned int> &constrained_array_shape);
86 void insert_chunk_unconstrained(
Chunk *chunk,
unsigned int dim,
87 unsigned long long array_offset,
const std::vector<unsigned int> &array_shape,
88 unsigned long long chunk_offset,
const std::vector<unsigned int> &chunk_shape,
const std::vector<unsigned int> &chunk_origin);
89 void read_chunks_unconstrained();
92 friend void process_one_chunk_unconstrained(
Chunk *chunk,
DmrppArray *array,
const vector<unsigned int> &array_shape,
93 const vector<unsigned int> &chunk_shape);
96 DmrppArray(
const std::string &n, libdap::BaseType *v);
97 DmrppArray(
const std::string &n,
const std::string &d, libdap::BaseType *v);
106 virtual libdap::BaseType *ptr_duplicate();
110 virtual unsigned long long get_size(
bool constrained =
false);
111 virtual std::vector<unsigned int>
get_shape(
bool constrained);
113 virtual void print_dap4(libdap::XMLWriter &writer,
bool constrained =
false);
115 virtual void dump(ostream & strm)
const;
124 const vector<unsigned int> &array_shape;
125 const vector<unsigned int> &chunk_shape;
128 : fds(pipe), tid(
id), chunk(c), array(a), array_shape(a_s), chunk_shape(c_s) {}
140 : fds(pipe), tid(
id), child_chunk(c_c), master_chunk(m_c) {}
150 #endif // _dmrpp_array_h