diff --git a/src/templates_front/templator_front.org b/src/templates_front/templator_front.org index 1e8d291..ab2066f 100644 --- a/src/templates_front/templator_front.org +++ b/src/templates_front/templator_front.org @@ -1055,8 +1055,8 @@ end interface This section concerns API calls related to datasets. - | Function name | Description | Precision | - |----------------------------------------+-------------------------------------+-----------| + | Function name | Description | Precision | + |--------------------------------+-------------------------------------+-----------| | ~trexio_has_$group_dset$~ | Check if a dataset exists in a file | --- | | ~trexio_read_$group_dset$~ | Read a dataset | Double | | ~trexio_write_$group_dset$~ | Write a dataset | Double | @@ -1402,6 +1402,170 @@ interface end interface #+end_src +** Templates for front end has/read/write a dataset of strings + + This section concerns API calls related to datasets of strings. + + | Function name | Description | + |---------------------------------+-------------------------------------| + | ~trexio_has_$group_dset_str$~ | Check if a dataset exists in a file | + | ~trexio_read_$group_dset_str$~ | Read a dataset | + | ~trexio_write_$group_dset_str$~ | Write a dataset | + +*** C templates for front end + + First parameter is the ~TREXIO~ file handle. Second parameter is the variable to be written/read + to/from the ~TREXIO~ file (except for ~trexio_has_~ functions). + + + #+begin_src c :tangle hrw_dset_str_front.h :exports none +trexio_exit_code trexio_has_$group_dset$(trexio_t* const file); +trexio_exit_code trexio_read_$group_dset$(trexio_t* const file, $group_dset_dtype$* const dset); +trexio_exit_code trexio_write_$group_dset$(trexio_t* const file, const $group_dset_dtype$* dset); + #+end_src + + #+begin_src c :tangle read_dset_str_front.c +trexio_exit_code +trexio_read_$group_dset$ (trexio_t* const file, $group_dset_dtype$* const dset) +{ + + if (file == NULL) return TREXIO_INVALID_ARG_1; + if (dset == NULL) return TREXIO_INVALID_ARG_2; + + trexio_exit_code rc; + int64_t $group_dset_dim$ = 0; + + /* Error handling for this call is added by the generator */ + rc = trexio_read_$group_dset_dim$_64(file, &($group_dset_dim$)); + + if ($group_dset_dim$ == 0L) return TREXIO_INVALID_NUM; + + uint32_t rank = $group_dset_rank$; + uint64_t dims[$group_dset_rank$] = {$group_dset_dim_list$}; + + assert(file->back_end < TREXIO_INVALID_BACK_END); + + switch (file->back_end) { + + case TREXIO_TEXT: + return trexio_text_read_$group_dset$(file, dset, rank, dims); + break; + + case TREXIO_HDF5: + return trexio_hdf5_read_$group_dset$(file, dset, rank, dims); + break; +/* + case TREXIO_JSON: + return trexio_json_read_$group_dset$(file, dset, rank, dims); + break; +,*/ + } + return TREXIO_FAILURE; +} + #+end_src + + #+begin_src c :tangle write_dset_str_front.c +trexio_exit_code +trexio_write_$group_dset$ (trexio_t* const file, const $group_dset_dtype$* dset) +{ + + if (file == NULL) return TREXIO_INVALID_ARG_1; + if (dset == NULL) return TREXIO_INVALID_ARG_2; + + trexio_exit_code rc; + int64_t $group_dset_dim$ = 0; + + /* Error handling for this call is added by the generator */ + rc = trexio_read_$group_dset_dim$_64(file, &($group_dset_dim$)); + + if ($group_dset_dim$ == 0L) return TREXIO_INVALID_NUM; + + uint32_t rank = $group_dset_rank$; + uint64_t dims[$group_dset_rank$] = {$group_dset_dim_list$}; + + assert(file->back_end < TREXIO_INVALID_BACK_END); + + switch (file->back_end) { + + case TREXIO_TEXT: + return trexio_text_write_$group_dset$(file, dset, rank, dims); + break; + + case TREXIO_HDF5: + return trexio_hdf5_write_$group_dset$(file, dset, rank, dims); + break; +/* + case TREXIO_JSON: + return trexio_json_write_$group_dset$(file, dset, rank, dims); + break; +,*/ + } + return TREXIO_FAILURE; +} + #+end_src + + #+begin_src c :tangle has_dset_str_front.c +trexio_exit_code +trexio_has_$group_dset$ (trexio_t* const file) +{ + + if (file == NULL) return TREXIO_INVALID_ARG_1; + + assert(file->back_end < TREXIO_INVALID_BACK_END); + + switch (file->back_end) { + + case TREXIO_TEXT: + return trexio_text_has_$group_dset$(file); + break; + + case TREXIO_HDF5: + return trexio_hdf5_has_$group_dset$(file); + break; +/* + case TREXIO_JSON: + return trexio_json_has_$group_dset$(file); + break; +,*/ + } + return TREXIO_FAILURE; +} + #+end_src + +*** Fortran templates for front end + + The ~Fortran~ templates that provide an access to the ~C~ API calls from ~Fortran~. + These templates are based on the use of ~iso_c_binding~. Pointers have to be passed by value. + + #+begin_src f90 :tangle write_dset_str_front_fortran.f90 +interface + integer function trexio_write_$group_dset$ (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + $group_dset_f_dtype$, intent(in) :: dset$group_dset_f_dims$ + end function trexio_write_$group_dset$ +end interface + #+end_src + + #+begin_src f90 :tangle read_dset_str_front_fortran.f90 +interface + integer function trexio_read_$group_dset$ (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + $group_dset_f_dtype$, intent(out) :: dset$group_dset_f_dims$ + end function trexio_read_$group_dset$ +end interface + #+end_src + + #+begin_src f90 :tangle has_dset_str_front_fortran.f90 +interface + integer function trexio_has_$group_dset$ (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_$group_dset$ +end interface + #+end_src + * Fortran helper/wrapper functions The function below adapts the original C-based ~trexio_open~ for Fortran.