H5Pall.hpp
1 /*
2  * Copyright (c) 2018 vargaconsulting, Toronto,ON Canada
3  * Author: Varga, Steven <steven@vargaconsulting.ca>
4  *
5  */
6 
7 #ifndef H5CPP_PALL_HPP
8 #define H5CPP_PALL_HPP
9 
10 namespace h5 { namespace impl {
11  /* proxy object that gets converted to property_id with restriction that
12  * only same class properties may be daisy chained */
13  template <class Derived, class phid_t>
14  struct prop_base {
15  using hidtype = typename phid_t::parent::hidtype;
16  using parent_hidtype = typename phid_t::hidtype;
17 
18  prop_base(){ }
19  // removed ctor
20  ~prop_base(){
21  if( H5Iis_valid( handle ) ){
22  H5Pclose( handle );
23  }
24  }
25  // prevents property type mismatch at compile time:
26  template <class R>
28  const prop_base<Derived, phid_t>& >::type
29  operator|( const R& rhs ) const {
30  rhs.copy( handle );
31  return *this;
32  }
33  // convert to propery
34  void copy(::hid_t handle_) const { /*CRTP idiom*/
35  static_cast<const Derived*>(this)->copy_impl( handle_ );
36  }
37  /*transfering ownership to managed handle*/
38  operator phid_t( ) const {
39  static_cast<const Derived*>(this)->copy_impl( handle );
40  H5Iinc_ref( handle ); /*keep this alive */
41  return phid_t{handle};
42  }
43  ::hid_t handle;
44  using type = phid_t;
45  };
46  // definition
47  template <class phid_t, defprop_t init, class capi, typename capi::fn_t capi_call> struct prop_t;
48  /* CAPI macros are sequence calls: (H5OPEN, register_property_class), these are all meant to be read only/copied from,
49  */
50  #define H5CPP__capicall( name, default_id ) ::hid_t inline default_##name(){ return default_id; } \
51  template <class capi, typename capi::fn_t capi_call> \
52  using name##_call = prop_t<h5::name##_t, default_##name, capi, capi_call>; \
53  template <class... args> using name##_args = impl::capi_t<args...>; \
54 
55  H5CPP__capicall( acpl, H5P_ATTRIBUTE_CREATE) H5CPP__capicall( dapl, H5P_DATASET_ACCESS )
56  H5CPP__capicall( dxpl, H5P_DATASET_XFER ) H5CPP__capicall( dcpl, H5P_DATASET_CREATE )
57  H5CPP__capicall( tapl, H5P_DATATYPE_ACCESS ) H5CPP__capicall( tcpl, H5P_DATATYPE_CREATE )
58  H5CPP__capicall( fapl, H5P_FILE_ACCESS ) H5CPP__capicall( fcpl, H5P_FILE_CREATE )
59  H5CPP__capicall( fmpl, H5P_FILE_MOUNT )
60 
61  H5CPP__capicall( gapl, H5P_GROUP_ACCESS) H5CPP__capicall( gcpl, H5P_GROUP_CREATE )
62  H5CPP__capicall( lapl, H5P_LINK_ACCESS) H5CPP__capicall( lcpl, H5P_LINK_CREATE )
63  H5CPP__capicall( ocpl, H5P_OBJECT_COPY) H5CPP__capicall( ocrl, H5P_OBJECT_CREATE )
64  H5CPP__capicall( scpl, H5P_STRING_CREATE)
65  #undef H5CPP__defid
66 
67  /*property with a capi function call with some arguments, also is the base for other properties */
68  template <class phid_t, defprop_t init, class capi, typename capi::fn_t capi_call>
69  struct prop_t : prop_base<prop_t<phid_t,init,capi,capi_call>,phid_t> {
70  prop_t( typename capi::args_t values ) : args( values ) {
71  H5CPP_CHECK_NZ( (this->handle = H5Pcreate(init())),
72  h5::error::property_list::misc, "failed to create property");
73  }
74  prop_t(){
75  H5CPP_CHECK_NZ( (this->handle = H5Pcreate(init())),
76  h5::error::property_list::misc, "failed to create property");
77  }
78  void copy_impl(::hid_t id) const {
79  //int i = capi_call + 1;
80  /*CAPI needs `this` hid_t id passed along */
81  capi_t capi_args = std::tuple_cat( std::tie(id), args );
82  H5CPP_CHECK_NZ( compat::apply(capi_call, capi_args),
83  h5::error::property_list::argument,"failed to parse arguments...");
84  }
85  using base_t = prop_base<prop_t<phid_t,init,capi,capi_call>,phid_t>;
86  using args_t = typename capi::args_t;
87  using capi_t = typename capi::type;
88  using type = phid_t;
89  args_t args;
90  };
91 
92  /* T prop is much similar to other properties, except the value needs HDF5 type info and passed by
93  * const void* pointer type. This is reflected by templating `prop_t`
94  */
95  template <class phid_t, defprop_t init, class capi, typename capi::fn_t capi_call, class T>
96  struct tprop_t final : prop_t<phid_t,init,capi,capi_call> { // ::hid_t,const void*
97  tprop_t( T value ) : base_t( std::make_tuple( h5::copy<T>( h5::dt_t<T>() ), &this->value) ), value(value) {
98  }
99  ~tprop_t(){ // don't forget that the first argument is a HDF5 type info, that needs closing
100  if( H5Iis_valid( std::get<0>(this->args) ) )
101  H5Tclose( std::get<0>(this->args) );
102  }
103  using type = phid_t;
104  using base_t = prop_t<phid_t,init,capi,capi_call>;
105  T value;
106  };
107  /* takes an arbitrary length of hsize_t sequence and calls H5Pset_xxx
108  */
109  template <class phid_t, defprop_t init, class capi, typename capi::fn_t capi_call>
110  struct aprop_t final : prop_t<phid_t,init,capi,capi_call> {
111  aprop_t( std::initializer_list<hsize_t> values )
112  : base_t( std::make_tuple( values.size(), this->values) ) {
113  std::copy( std::begin(values), std::end(values), this->values);
114  }
115  template <class T, size_t N>
116  aprop_t( std::array<T,N> values )
117  : base_t( std::make_tuple( values.size(), this->values) ) {
118  std::copy( std::begin(values), std::end(values), this->values);
119  }
120  hsize_t values[H5CPP_MAX_RANK];
121  using type = phid_t;
122  using base_t = prop_t<phid_t,init,capi,capi_call>;
123  };
124 
125  // only data control property list set_chunk has this pattern, lets allow to define CAPI argument lists
126  // the same way as with others
127  template <class capi, typename capi::fn_t capi_call>
128  using dcpl_acall = aprop_t<h5::dcpl_t,default_dcpl, capi,capi_call>;
129  // only data control property list set_value has this pattern, lets allow to define CAPI argument lists
130  // the same way as with others
131  template <class capi, typename capi::fn_t capi_call, class T> using dcpl_tcall = tprop_t<h5::dcpl_t,default_dcpl, capi, capi_call, T>;
132 }}
133 
137 namespace h5 {
138 
139 // FILE CREATION PROPERTY LISTS
140 using userblock = impl::fcpl_call< impl::fcpl_args<hid_t,hsize_t>, H5Pset_userblock>;
141 using istore_k = impl::fcpl_call< impl::fcpl_args<hid_t,unsigned>, H5Pset_istore_k>;
142 using file_space_page_size = impl::fcpl_call< impl::fcpl_args<hid_t,hsize_t>, H5Pset_file_space_page_size>;
143 using shared_mesg_nindexes = impl::fcpl_call< impl::fcpl_args<hid_t,unsigned>, H5Pset_shared_mesg_nindexes>;
144 using sizes = impl::fcpl_call< impl::fcpl_args<hid_t,size_t,size_t>, H5Pset_sizes>;
145 using sym_k = impl::fcpl_call< impl::fcpl_args<hid_t,unsigned,unsigned>, H5Pset_sym_k>;
146 using shared_mesg_index = impl::fcpl_call< impl::fcpl_args<hid_t,unsigned,unsigned,unsigned>,H5Pset_shared_mesg_index>;
147 using shared_mesg_phase_change = impl::fcpl_call< impl::fcpl_args<hid_t,unsigned,unsigned>, H5Pset_shared_mesg_phase_change>;
148 // FILE ACCESS PROPERTY LISTS
149 using fclose_degree = impl::fapl_call< impl::fapl_args<hid_t,H5F_close_degree_t>, H5Pset_fclose_degree>;
150 using fapl_core = impl::fapl_call< impl::fapl_args<hid_t,size_t,hbool_t>, H5Pset_fapl_core>;
151 using core_write_tracking = impl::fapl_call< impl::fapl_args<hid_t,hbool_t,size_t>, H5Pset_core_write_tracking>;
152 using fapl_family = impl::fapl_call< impl::fapl_args<hid_t,hsize_t,hid_t>, H5Pset_fapl_family>;
153 using family_offset = impl::fapl_call< impl::fapl_args<hid_t,hsize_t>, H5Pset_family_offset>;
154 using fapl_log = impl::fapl_call< impl::fapl_args<hid_t,const char*,unsigned long long,size_t>,H5Pset_fapl_log>;
155 using multi_type = impl::fapl_call< impl::fapl_args<hid_t,H5FD_mem_t>,H5Pset_multi_type>;
156 using fapl_split = impl::fapl_call< impl::fapl_args<hid_t,const char*, hid_t,const char*,hid_t>,H5Pset_fapl_split>;
157 using file_image = impl::fapl_call< impl::fapl_args<hid_t,void*,size_t>,H5Pset_file_image>;
158 using meta_block_size = impl::fapl_call< impl::fapl_args<hid_t,hsize_t>,H5Pset_meta_block_size>;
159 using page_buffer_size = impl::fapl_call< impl::fapl_args<hid_t,size_t,unsigned,unsigned>,H5Pset_page_buffer_size>;
160 using sieve_buf_size = impl::fapl_call< impl::fapl_args<hid_t,size_t>,H5Pset_sieve_buf_size>;
161 using alignment = impl::fapl_call< impl::fapl_args<hid_t,hsize_t, hsize_t>,H5Pset_alignment>;
162 using cache = impl::fapl_call< impl::fapl_args<hid_t,int,size_t,size_t,double>,H5Pset_cache>;
163 using elink_file_cache_size = impl::fapl_call< impl::fapl_args<hid_t,unsigned>,H5Pset_elink_file_cache_size>;
164 using evict_on_close = impl::fapl_call< impl::fapl_args<hid_t,hbool_t>,H5Pset_evict_on_close>;
165 using metadata_read_attempts = impl::fapl_call< impl::fapl_args<hid_t,unsigned>,H5Pset_metadata_read_attempts>;
166 using mdc_config = impl::fapl_call< impl::fapl_args<hid_t,H5AC_cache_config_t *>,H5Pset_mdc_config>;
167 using mdc_image_config = impl::fapl_call< impl::fapl_args<hid_t,H5AC_cache_image_config_t*>,H5Pset_mdc_image_config>;
168 using mdc_log_options = impl::fapl_call< impl::fapl_args<hid_t,hbool_t,const char*,hbool_t>,H5Pset_mdc_log_options>;
169 using libver_bounds = impl::fapl_call< impl::fapl_args<hid_t,H5F_libver_t,H5F_libver_t>,H5Pset_libver_bounds>;
170 namespace flag {
171  using fapl_sec2 = impl::fapl_call< impl::fapl_args<hid_t>,H5Pset_fapl_sec2>;
172  using fapl_stdio = impl::fapl_call< impl::fapl_args<hid_t>,H5Pset_fapl_stdio>;
173 }
174 const static h5::libver_bounds latest_version({H5F_LIBVER_LATEST, H5F_LIBVER_LATEST});
175 const static flag::fapl_sec2 sec2;
176 const static flag::fapl_stdio stdio;
177 const static h5::fclose_degree fclose_degree_weak{H5F_CLOSE_WEAK};
178 const static h5::fclose_degree fclose_degree_semi{H5F_CLOSE_SEMI};
179 const static h5::fclose_degree fclose_degree_strong{H5F_CLOSE_STRONG};
180 const static h5::fclose_degree fclose_degree_default{H5F_CLOSE_DEFAULT };
181 // GROUP CREATION PROPERTY LISTS
182 using local_heap_size_hint = impl::gcpl_call< impl::gcpl_args<hid_t,size_t>,H5Pset_local_heap_size_hint>;
183 using link_creation_order = impl::gcpl_call< impl::gcpl_args<hid_t,unsigned>,H5Pset_link_creation_order>;
184 using est_link_info = impl::gcpl_call< impl::gcpl_args<hid_t,unsigned, unsigned>,H5Pset_est_link_info>;
185 using link_phase_change = impl::gcpl_call< impl::gcpl_args<hid_t,unsigned, unsigned>,H5Pset_link_phase_change>;
186 // GROUP ACCESS PROPERTY LISTS
187 // LINK CREATION PROPERTY LISTS
188 using char_encoding = impl::lcpl_call< impl::lcpl_args<hid_t,H5T_cset_t>,H5Pset_char_encoding>;
189 using create_intermediate_group= impl::lcpl_call< impl::lcpl_args<hid_t,unsigned>,H5Pset_create_intermediate_group>;
190 const static h5::char_encoding ascii{H5T_CSET_ASCII};
191 const static h5::char_encoding utf8{H5T_CSET_UTF8};
192 const static h5::create_intermediate_group create_path{1};
193 // LINK ACCESS PROPERTY LISTS
194 using nlinks = impl::lapl_call< impl::lapl_args<hid_t,size_t>,H5Pset_nlinks>;
195 using elink_cb = impl::lapl_call< impl::lapl_args<hid_t,H5L_elink_traverse_t, void*>,H5Pset_elink_cb>;
196 using elink_prefix = impl::lapl_call< impl::lapl_args<hid_t,const char*>,H5Pset_elink_prefix>;
197 using elink_fapl = impl::lapl_call< impl::lapl_args<hid_t,hid_t>,H5Pset_elink_fapl>;
198 using elink_acc_flags = impl::lapl_call< impl::lapl_args<hid_t,unsigned>,H5Pset_elink_acc_flags>;
199 // DATA CREATION PROPERTY LISTS
200 using layout = impl::dcpl_call< impl::dcpl_args<hid_t,H5D_layout_t>,H5Pset_layout>;
201 using deflate = impl::dcpl_call< impl::dcpl_args<hid_t,unsigned>,H5Pset_deflate>;
202 using gzip = deflate;
203 using fill_time = impl::dcpl_call< impl::dcpl_args<hid_t,H5D_fill_time_t>,H5Pset_fill_time>;
204 using alloc_time = impl::dcpl_call< impl::dcpl_args<hid_t,H5D_alloc_time_t>,H5Pset_alloc_time>;
205 using chunk_opts = impl::dcpl_call< impl::dcpl_args<hid_t,unsigned>,H5Pset_chunk_opts>;
206 template<class T> /*tcall ::= templated call with T*/
207 using fill_value = impl::dcpl_tcall< impl::dcpl_args<hid_t,hid_t,const void*>, H5Pset_fill_value, T>;
208 using chunk = impl::dcpl_acall< impl::dcpl_args<hid_t,int,const hsize_t*>, H5Pset_chunk>; /*acall ::= array call of hsize_t */
209 namespace flag{
210  using fletcher32 = impl::dcpl_call< impl::dcpl_args<hid_t>,H5Pset_fletcher32>;
211  using shuffle = impl::dcpl_call< impl::dcpl_args<hid_t>,H5Pset_shuffle>;
212  using nbit = impl::dcpl_call< impl::dcpl_args<hid_t>,H5Pset_nbit>;
213 }
214 const static flag::fletcher32 fletcher32;
215 const static flag::shuffle shuffle;
216 const static flag::nbit nbit;
217 
218 const static h5::layout layout_compact{H5D_COMPACT};
219 const static h5::layout layout_contigous{H5D_CONTIGUOUS};
220 const static h5::layout layout_chunked{H5D_CHUNKED};
221 const static h5::layout layout_virtual{H5D_VIRTUAL};
222 
223 const static h5::fill_time fill_time_ifset{H5D_FILL_TIME_IFSET};
224 const static h5::fill_time fill_time_alloc{H5D_FILL_TIME_ALLOC};
225 const static h5::fill_time fill_time_never{H5D_FILL_TIME_NEVER};
226 const static h5::alloc_time alloc_time_default{H5D_ALLOC_TIME_DEFAULT};
227 const static h5::alloc_time alloc_time_early{H5D_ALLOC_TIME_EARLY};
228 const static h5::alloc_time alloc_time_incr{H5D_ALLOC_TIME_INCR};
229 const static h5::alloc_time alloc_time_late{H5D_ALLOC_TIME_LATE};
230 const static h5::chunk_opts dont_filter_partial_chunks{H5D_CHUNK_DONT_FILTER_PARTIAL_CHUNKS};
231 // DATA ACCESS PROPERTY LISTS: see H5Pdapl.hpp
232 
233 
234 // DATA TRANSFER PROPERTY LISTS
235 using buffer = impl::dxpl_call< impl::dxpl_args<hid_t,size_t,void*,void*>,H5Pset_buffer>;
236 using edc_check = impl::dxpl_call< impl::dxpl_args<hid_t,H5Z_EDC_t>,H5Pset_edc_check>;
237 using filter_callback = impl::dxpl_call< impl::dxpl_args<hid_t,H5Z_filter_func_t,void*>,H5Pset_filter_callback>;
238 using data_transform = impl::dxpl_call< impl::dxpl_args<hid_t,const char *>,H5Pset_data_transform>;
239 using type_conv_cb = impl::dxpl_call< impl::dxpl_args<hid_t,H5T_conv_except_func_t,void*>,H5Pset_type_conv_cb>;
240 using hyper_vector_size = impl::dxpl_call< impl::dxpl_args<hid_t,size_t>,H5Pset_hyper_vector_size>;
241 using btree_ratios = impl::dxpl_call< impl::dxpl_args<hid_t,double,double,double>,H5Pset_btree_ratios>;
242 // OBJECT CREATION PROPERTY LISTS
243 using ocreate_intermediate_group = impl::ocrl_call< impl::ocrl_args<hid_t,unsigned>,H5Pset_create_intermediate_group>;
244 using obj_track_times = impl::ocrl_call< impl::ocrl_args<hid_t,hbool_t>,H5Pset_obj_track_times>;
245 using attr_phase_change = impl::ocrl_call< impl::ocrl_args<hid_t,unsigned,unsigned>,H5Pset_attr_phase_change>;
246 using attr_creation_order = impl::ocrl_call< impl::ocrl_args<hid_t,unsigned>,H5Pset_attr_creation_order>;
247 //static h5::ocreate_intermediate_group ocreate_intermediate_group{1};
248 // OBJECT COPY PROPERTY LISTS
249 using copy_object = impl::ocpl_call< impl::ocpl_args<hid_t,unsigned>,H5Pset_copy_object>;
250 using mcdt_search_cb = impl::ocpl_call< impl::ocpl_args<hid_t,H5O_mcdt_search_cb_t,void*>,H5Pset_mcdt_search_cb>;
251 const static h5::copy_object shallow_hierarchy{H5O_COPY_SHALLOW_HIERARCHY_FLAG};
252 const static h5::copy_object expand_soft_link{H5O_COPY_EXPAND_SOFT_LINK_FLAG};
253 const static h5::copy_object expand_ext_link{H5O_COPY_EXPAND_EXT_LINK_FLAG};
254 const static h5::copy_object expand_reference{H5O_COPY_EXPAND_REFERENCE_FLAG};
255 const static h5::copy_object copy_without_attr{H5O_COPY_WITHOUT_ATTR_FLAG};
256 const static h5::copy_object merge_commited_dtype{H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG};
257 
258 #ifdef H5CPP_HAVE_KITA
259 // follow instructions: https://bitbucket.hdfgroup.org/users/jhenderson/repos/rest-vol/browse
260 using fapl_rest_vol = impl::fapl_call< impl::fapl_args<hid_t>,H5Pset_fapl_rest_vol>;
261 using kita = impl::fapl_call< impl::fapl_args<hid_t>,H5Pset_fapl_rest_vol>;
262 #endif
263 #ifdef H5_HAVE_PARALLEL
264 using fapl_mpiio = impl::fapl_call< impl::fapl_args<hid_t,MPI_Comm, MPI_Info>,H5Pset_fapl_mpio>;
265 using all_coll_metadata_ops = impl::fapl_call< impl::fapl_args<hid_t,hbool_t>,H5Pset_all_coll_metadata_ops>;
266 using coll_metadata_write = impl::fapl_call< impl::fapl_args<hid_t,hbool_t>,H5Pset_coll_metadata_write>;
267 using gc_references = impl::fapl_call< impl::fapl_args<hid_t,unsigned>,H5Pset_gc_references>;
268 using small_data_block_size = impl::fapl_call< impl::fapl_args<hid_t,hsize_t>,H5Pset_small_data_block_size>;
269 using object_flush_cb = impl::fapl_call< impl::fapl_args<hid_t,H5F_flush_cb_t,void*>,H5Pset_object_flush_cb>;
270 
271 using fapl_coll_metadata_ops = impl::fapl_call< impl::fapl_args<hid_t,hbool_t>,H5Pset_all_coll_metadata_ops>; // file
272 using gapl_coll_metadata_ops = impl::gapl_call< impl::gapl_args<hid_t,hbool_t>,H5Pset_all_coll_metadata_ops>; // group
273 using dapl_coll_metadata_ops = impl::gapl_call< impl::dapl_args<hid_t,hbool_t>,H5Pset_all_coll_metadata_ops>; // dataset
274 using tapl_coll_metadata_ops = impl::tapl_call< impl::tapl_args<hid_t,hbool_t>,H5Pset_all_coll_metadata_ops>; // type
275 using lapl_coll_metadata_ops = impl::lapl_call< impl::lapl_args<hid_t,hbool_t>,H5Pset_all_coll_metadata_ops>; // link
276 using aapl_coll_metadata_ops = impl::gapl_call< impl::gapl_args<hid_t,hbool_t>,H5Pset_all_coll_metadata_ops>; // attribute
277 
278 using dxpl_mpiio = impl::dxpl_call< impl::dxpl_args<hid_t,H5FD_mpio_xfer_t>,H5Pset_dxpl_mpio>;
279 using dxpl_mpiio_chunk_opt = impl::dxpl_call< impl::dxpl_args<hid_t,H5FD_mpio_chunk_opt_t>,H5Pset_dxpl_mpio_chunk_opt>;
280 using dxpl_mpiio_chunk_opt_num = impl::dxpl_call< impl::dxpl_args<hid_t,unsigned>,H5Pset_dxpl_mpio_chunk_opt_num>;
281 using dxpl_mpiio_chunk_opt_ratio = impl::dxpl_call< impl::dxpl_args<hid_t,unsigned>,H5Pset_dxpl_mpio_chunk_opt_ratio>;
282 using dxpl_mpiio_collective_opt = impl::dxpl_call< impl::dxpl_args<hid_t,H5FD_mpio_collective_opt_t>,H5Pset_dxpl_mpio_collective_opt>;
283 //TODO; verify * -> ref?
284 using dxpl_mpiio = impl::dxpl_call< impl::dxpl_args<hid_t,H5FD_mpio_xfer_t>,H5Pset_dxpl_mpio>;
285 
286 using mpiio = fapl_mpiio;
287 const static h5::dxpl_mpiio collective{H5FD_MPIO_COLLECTIVE};
288 const static h5::dxpl_mpiio independent{H5FD_MPIO_INDEPENDENT};
289 #endif
290 }
291 
292 namespace h5 { namespace notimplemented_yet { // OBJECT COPY PROPERTY LISTS
293  //using char_encoding_ = = impl::fapl_call< impl::fapl_args<hid_t, >,H5Pset_char_encoding, H5T_cset_t)
294  //static h5::char_encoding_ ascii{H5T_CSET_ASCII};
295  //static h5::char_encoding_ utf8{H5T_CSET_UTF8};
296  //FIXME: using fapl_direct = impl::fapl_call< impl::fapl_args<hid_t, >, .. , size_t, size_t, size_t>;
297  //TODO: using vlen_mem_manager,) too complex to implement
298  //TODO: using append_flush -- too complex to implement
299  //NOT MAPPED: fapl_direct, mpiposix, fapl_multi
300  //MISSING: H5CPP__PROPERTYLIST_FLAG(fapl, fapl_windows)
301  //MISSING: using file_image_callbacks, H5_file_image_callbacks_t* >;
302 }}
303 
304 
305 namespace h5 {
306  const static h5::acpl_t acpl = static_cast<h5::acpl_t>( H5P_DEFAULT );
307  const static h5::dcpl_t dcpl = static_cast<h5::dcpl_t>( H5P_DEFAULT);
308  const static h5::dxpl_t dxpl = static_cast<h5::dxpl_t>( H5P_DEFAULT );
309  const static h5::lcpl_t lcpl = h5::char_encoding{H5T_CSET_UTF8} | h5::create_intermediate_group{1};
310  const static h5::fapl_t fapl = static_cast<h5::fapl_t>( H5P_DEFAULT );
311  const static h5::fcpl_t fcpl = static_cast<h5::fcpl_t>( H5P_DEFAULT );
312 
313  const static h5::acpl_t default_acpl = static_cast<h5::acpl_t>( H5P_DEFAULT );
314  const static h5::dcpl_t default_dcpl = static_cast<h5::dcpl_t>( H5P_DEFAULT );
315  const static h5::dxpl_t default_dxpl = static_cast<h5::dxpl_t>( H5P_DEFAULT );
316  const static h5::lcpl_t default_lcpl = h5::char_encoding{H5T_CSET_UTF8} | h5::create_intermediate_group{1};
317  const static h5::fapl_t default_fapl = static_cast<h5::fapl_t>( H5P_DEFAULT );
318  const static h5::fcpl_t default_fcpl = static_cast<h5::fcpl_t>( H5P_DEFAULT );
319 }
320 
321 #endif
322 
public namespace
Definition: H5Acreate.hpp:10
T copy(T... args)
T tie(T... args)
T make_tuple(T... args)
T end(T... args)
T tuple_cat(T... args)
T begin(T... args)