85 std::string d_vlen_ons_str;
86 bool is_variable_length_string_array =
false;
87 bool is_fixed_length_string_array =
false;
92 unsigned long long d_fixed_str_length = 0;
93 string_pad_type d_fixed_length_string_pad_type = not_set;
96 bool is_readable_struct =
false;
98 unsigned long long bytes_per_element;
101 bool is_special_structure =
false;
103 DmrppArray::dimension get_dimension(
unsigned int dim_num);
105 void insert_constrained_contiguous(Dim_iter dim_iter,
unsigned long *target_index,
106 std::vector<unsigned long long> &subset_addr,
107 const std::vector<unsigned long long> &array_shape,
char *data,
char *dest_buf);
109 void read_contiguous();
110 void read_one_chunk_dio();
111 void read_contiguous_string();
113#ifdef USE_READ_SERIAL
114 virtual void insert_chunk_serial(
unsigned int dim, std::vector<unsigned long long> *target_element_address,
115 std::vector<unsigned long long> *chunk_source_address,
Chunk *chunk);
116 virtual void read_chunks_serial();
119 friend class DmrppArrayTest;
133 process_one_chunk(std::shared_ptr<Chunk> chunk, DmrppArray *array,
const vector<unsigned long long> &constrained_array_shape);
137 virtual void insert_chunk_unconstrained(std::shared_ptr<Chunk> chunk,
unsigned int dim,
138 unsigned long long array_offset,
const std::vector<unsigned long long> &array_shape,
139 unsigned long long chunk_offset,
const std::vector<unsigned long long> &chunk_shape,
140 const std::vector<unsigned long long> &chunk_origin);
142 virtual void insert_chunk_unconstrained_dio(std::shared_ptr<Chunk> chunk);
145 void read_chunks_unconstrained();
146 void read_chunks_dio_unconstrained();
147 void read_linked_blocks();
148 void read_linked_blocks_constrained();
149 void read_chunks_with_linked_blocks();
150 void read_chunks_with_linked_blocks_constrained();
152 void read_buffer_chunks();
153 void read_buffer_chunks_unconstrained();
155 unsigned long long get_chunk_start(
const dimension &thisDim,
unsigned long long chunk_origin_for_dim);
157 std::shared_ptr<Chunk> find_needed_chunks(
unsigned int dim, std::vector<unsigned long long> *target_element_address, std::shared_ptr<Chunk> chunk);
159 virtual void insert_chunk(
161 std::vector<unsigned long long> *target_element_address,
162 std::vector<unsigned long long> *chunk_element_address,
163 std::shared_ptr<Chunk> chunk,
166 bool check_struct_handling();
168 bool use_direct_io_opt();
170 bool use_buffer_chunk();
172 unsigned long long inflate_simple(
char **destp,
unsigned long long dest_len,
char *src,
unsigned long long src_len);
176 DmrppArray(
const std::string &n, libdap::BaseType *v) :
177 libdap::Array(n, v,
true ), DmrppCommon()
180 DmrppArray(
const std::string &n,
const std::string &d, libdap::BaseType *v) :
181 libdap::Array(n, d, v,
true), DmrppCommon()
184 DmrppArray(
const string &n, BaseType *v, shared_ptr<DMZ> dmz) :
185 libdap::Array(n, v,
true), DmrppCommon(dmz)
188 DmrppArray(
const string &n,
const string &d, BaseType *v, shared_ptr<DMZ> dmz) :
189 libdap::Array(n, d, v,
true), DmrppCommon(dmz)
192 DmrppArray(
const DmrppArray &) =
default;
194 ~DmrppArray()
override =
default;
196 DmrppArray &operator=(
const DmrppArray &rhs);
198 libdap::BaseType *ptr_duplicate()
override {
return new DmrppArray(*
this); }
200 bool read()
override;
201 void set_send_p(
bool state)
override;
203 virtual unsigned long long get_size(
bool constrained =
false);
205 virtual std::vector<unsigned long long>
get_shape(
bool constrained);
207 void print_dap4(libdap::XMLWriter &writer,
bool constrained =
false)
override;
209 void dump(
ostream &strm)
const override;
216 is_fixed_length_string_array = state;
218 bool is_flsa()
const{
return is_fixed_length_string_array; }
220 void set_is_vlsa(
bool state){
221 is_variable_length_string_array = state;
223 bool is_vlsa()
const{
return is_variable_length_string_array; }
225 void set_fixed_string_length(
const unsigned long long length){ d_fixed_str_length = length; }
226 unsigned long long set_fixed_string_length(
const string &length_str);
227 unsigned long long get_fixed_string_length()
const {
return d_fixed_str_length; }
229 void set_fixed_length_string_pad(
const string_pad_type pad){ d_fixed_length_string_pad_type = pad; }
230 string_pad_type set_fixed_length_string_pad_type(
const std::string &pad_str);
231 string_pad_type get_fixed_length_string_pad()
const {
return d_fixed_length_string_pad_type; }
232 std::string get_fixed_length_string_pad_str()
const {
return pad_type_to_str(d_fixed_length_string_pad_type); }
234 void set_ons_string(
const std::string &ons_str);
235 void set_ons_string(
const vector<ons> &ons_pairs);
236 std::string get_ons_string(){
return d_vlen_ons_str; };
239 static std::string pad_type_to_str(string_pad_type pad_type);
240 static string ingest_fixed_length_string(
const char *buf,
unsigned long long fixed_str_len, string_pad_type pad_type);
243 unsigned int buf2val(
void **val)
override;
244 vector<u_int8_t> &compact_str_buffer(){
return d_compact_str_buf; }
246 vector<char> & get_structure_array_str_buffer() {
return d_structure_array_str_buf;}
247 char * get_structure_array_buf_ptr() {
return d_structure_array_buf.data(); }
249 unsigned long long get_bytes_per_element()
const {
return bytes_per_element;}
250 void set_bytes_per_element(
unsigned long long bpe) { bytes_per_element = bpe;}
251 void set_special_structure_flag(
bool is_special_struct) {is_special_structure = is_special_struct;}
252 bool get_special_structure_flag() {
return is_special_structure;}