56class FONcArray:
public FONcBaseType {
59 libdap::Array *d_a =
nullptr;
61 nc_type d_array_type = NC_NAT;
65 int d_actual_ndims = 0;
67 size_t d_nelements = 1;
69 std::vector<FONcDim *> d_dims;
71 std::vector<int> d4_dim_ids{};
73 std::vector<bool>use_d4_dim_ids;
74 std::vector<int> d4_rds_nums;
77 std::vector<int> d_dim_ids{};
80 std::vector<size_t> d_dim_sizes{};
87 bool d_dont_use_it =
false;
91 std::vector<size_t> d_chunksizes{};
98 std::vector<FONcMap*> d_grid_maps{};
101 bool d4_def_dim =
false;
107 bool farray_dio_flag =
false;
111 FONcDim * find_dim(
const std::vector<std::string> &embed,
const std::string &
name, int64_t size,
bool ignore_size =
false);
114 void write_for_nc4_types(
int ncid);
115 void write_for_nc3_types(
int ncid);
116 void write_nc_variable(
int ncid, nc_type var_type);
118 void write_string_array(
int ncid);
119 void write_equal_length_string_array(
int ncid);
121 void define_dio_filters(
int ncid,
int d_varid);
122 void obtain_dio_filters_order(
const string&,
bool &,
bool &,
bool &,
bool &,
bool &)
const;
123 void allocate_dio_nc4_def_filters(
int,
int,
bool ,
bool ,
bool ,
bool ,
bool,
const vector<unsigned int> &)
const;
124 void write_direct_io_data(
int,
int);
126 FONcArray() =
default;
127 friend class FONcArrayTest;
130 explicit FONcArray(libdap::BaseType *b);
131 FONcArray(libdap::BaseType *b,
const std::vector<int>&dim_ids,
const std::vector<bool>&use_dim_ids,
132 const std::vector<int>&rds_nums);
135 virtual void convert(std::vector<std::string> embed,
bool _dap4=
false,
bool is_dap4_group=
false)
override;
136 virtual void define(
int ncid)
override;
137 virtual void write(
int ncid)
override;
139 std::string
name()
override;
141 virtual libdap::Array *array() {
return d_a; }
143 virtual void dump(std::ostream &strm)
const override;
148 size_t obtain_max_chunk_size(
size_t total_size,
int m_num_chunks,
int chunk_dim_size,
int allowed_chunk_dim_size) {
150 int actual_num_chunks = total_size/(chunk_dim_size*chunk_dim_size);
151 if ((actual_num_chunks > m_num_chunks) && (chunk_dim_size < allowed_chunk_dim_size))
152 chunk_dim_size = obtain_max_chunk_size(total_size,m_num_chunks,2*chunk_dim_size,allowed_chunk_dim_size);
153 return chunk_dim_size;
160 virtual libdap::AttrType getAttrType(nc_type nct)
override;
166 bool get_dio_flag()
const {
return farray_dio_flag; }
167 void set_dio_flag(
bool dio_flag_value =
true) { farray_dio_flag = dio_flag_value; }
170 static std::vector<FONcDim *> Dimensions;
virtual void convert(std::vector< std::string > embed, bool _dap4=false, bool is_dap4_group=false) override
Converts the DAP Array to a FONcArray.