2 * This file is part of the GROMACS molecular simulation package.
4 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5 * Copyright (c) 2001-2004, The GROMACS development team.
6 * Copyright (c) 2013,2014, by the GROMACS development team, led by
7 * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
8 * and including many others, as listed in the AUTHORS file in the
9 * top-level source directory and at http://www.gromacs.org.
11 * GROMACS is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public License
13 * as published by the Free Software Foundation; either version 2.1
14 * of the License, or (at your option) any later version.
16 * GROMACS is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with GROMACS; if not, see
23 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
24 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 * If you want to redistribute modifications to GROMACS, please
27 * consider that scientific software is very special. Version
28 * control is crucial - bugs must be traceable. We will be happy to
29 * consider code for inclusion in the official distribution, but
30 * derived work must not be called official GROMACS. Details are found
31 * in the README & COPYING files - if they are missing, get the
32 * official version at http://www.gromacs.org.
34 * To help us fund GROMACS development, we humbly ask that you cite
35 * the research papers on the package. Check out http://www.gromacs.org.
48 #include "gromacs/utility/smalloc.h"
54 #include "gmxfio_int.h"
57 /*******************************************************************
59 * READ/WRITE FUNCTIONS
61 *******************************************************************/
63 gmx_bool gmx_fio_reade_real(t_fileio *fio, real *item,
64 const char *desc, const char *srcfile, int line)
68 ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
73 gmx_bool gmx_fio_reade_float(t_fileio *fio, float *item,
74 const char *desc, const char *srcfile, int line)
78 ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
84 gmx_bool gmx_fio_reade_double(t_fileio *fio, double *item,
85 const char *desc, const char *srcfile, int line)
89 ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
94 gmx_bool gmx_fio_reade_int(t_fileio *fio, int *item,
95 const char *desc, const char *srcfile, int line)
99 ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
104 gmx_bool gmx_fio_reade_int64(t_fileio *fio, gmx_int64_t *item,
105 const char *desc, const char *srcfile, int line)
109 ret = fio->iotp->nread(fio, item, 1, eioINT64, desc, srcfile, line);
114 gmx_bool gmx_fio_reade_uchar(t_fileio *fio, unsigned char *item,
115 const char *desc, const char *srcfile, int line)
119 ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
125 gmx_bool gmx_fio_reade_ushort(t_fileio *fio, unsigned short *item,
126 const char *desc, const char *srcfile, int line)
130 ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
135 gmx_bool gmx_fio_reade_rvec(t_fileio *fio, rvec *item,
136 const char *desc, const char *srcfile, int line)
140 ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
145 gmx_bool gmx_fio_reade_ivec(t_fileio *fio, ivec *item,
146 const char *desc, const char *srcfile, int line)
150 ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
155 gmx_bool gmx_fio_reade_string(t_fileio *fio, char *item,
156 const char *desc, const char *srcfile, int line)
160 ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
168 gmx_bool gmx_fio_writee_real(t_fileio *fio, real item,
169 const char *desc, const char *srcfile, int line)
173 ret = fio->iotp->nwrite(fio, &item, 1, eioREAL, desc, srcfile, line);
178 gmx_bool gmx_fio_writee_float(t_fileio *fio, float item,
179 const char *desc, const char *srcfile, int line)
183 ret = fio->iotp->nwrite(fio, &item, 1, eioFLOAT, desc, srcfile, line);
188 gmx_bool gmx_fio_writee_double(t_fileio *fio, double item,
189 const char *desc, const char *srcfile, int line)
193 ret = fio->iotp->nwrite(fio, &item, 1, eioDOUBLE, desc, srcfile, line);
199 gmx_bool gmx_fio_writee_int(t_fileio *fio, int item,
200 const char *desc, const char *srcfile, int line)
204 ret = fio->iotp->nwrite(fio, &item, 1, eioINT, desc, srcfile, line);
209 gmx_bool gmx_fio_writee_int64(t_fileio *fio, gmx_int64_t item,
210 const char *desc, const char *srcfile, int line)
214 ret = fio->iotp->nwrite(fio, &item, 1, eioINT64, desc, srcfile, line);
219 gmx_bool gmx_fio_writee_uchar(t_fileio *fio, unsigned char item,
220 const char *desc, const char *srcfile, int line)
224 ret = fio->iotp->nwrite(fio, &item, 1, eioUCHAR, desc, srcfile, line);
229 gmx_bool gmx_fio_writee_ushort(t_fileio *fio, unsigned short item,
230 const char *desc, const char *srcfile, int line)
234 ret = fio->iotp->nwrite(fio, &item, 1, eioUSHORT, desc, srcfile, line);
239 gmx_bool gmx_fio_writee_rvec(t_fileio *fio, rvec *item,
240 const char *desc, const char *srcfile, int line)
244 ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
249 gmx_bool gmx_fio_writee_ivec(t_fileio *fio, ivec *item,
250 const char *desc, const char *srcfile, int line)
254 ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
259 gmx_bool gmx_fio_writee_string(t_fileio *fio, const char *item,
260 const char *desc, const char *srcfile, int line)
264 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
271 /* Read/write functions */
273 gmx_bool gmx_fio_doe_real(t_fileio *fio, real *item,
274 const char *desc, const char *srcfile, int line)
280 ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
284 ret = fio->iotp->nwrite(fio, item, 1, eioREAL, desc, srcfile, line);
291 gmx_bool gmx_fio_doe_float(t_fileio *fio, float *item,
292 const char *desc, const char *srcfile, int line)
298 ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
302 ret = fio->iotp->nwrite(fio, item, 1, eioFLOAT, desc, srcfile, line);
308 gmx_bool gmx_fio_doe_double(t_fileio *fio, double *item,
309 const char *desc, const char *srcfile, int line)
315 ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
319 ret = fio->iotp->nwrite(fio, item, 1, eioDOUBLE, desc, srcfile, line);
326 gmx_bool gmx_fio_doe_gmx_bool(t_fileio *fio, gmx_bool *item,
327 const char *desc, const char *srcfile, int line)
335 ret = fio->iotp->nread(fio, &itmp, 1, eioINT, desc, srcfile, line);
341 ret = fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc, srcfile, line);
347 gmx_bool gmx_fio_doe_int(t_fileio *fio, int *item,
348 const char *desc, const char *srcfile, int line)
354 ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
358 ret = fio->iotp->nwrite(fio, item, 1, eioINT, desc, srcfile, line);
364 gmx_bool gmx_fio_doe_int64(t_fileio *fio, gmx_int64_t *item,
365 const char *desc, const char *srcfile, int line)
371 ret = fio->iotp->nread(fio, item, 1, eioINT64, desc, srcfile, line);
375 ret = fio->iotp->nwrite(fio, item, 1, eioINT64, desc, srcfile, line);
381 gmx_bool gmx_fio_doe_uchar(t_fileio *fio, unsigned char *item,
382 const char *desc, const char *srcfile, int line)
388 ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
392 ret = fio->iotp->nwrite(fio, item, 1, eioUCHAR, desc, srcfile, line);
398 gmx_bool gmx_fio_doe_ushort(t_fileio *fio, unsigned short *item,
399 const char *desc, const char *srcfile, int line)
405 ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
409 ret = fio->iotp->nwrite(fio, item, 1, eioUSHORT, desc, srcfile, line);
415 gmx_bool gmx_fio_doe_rvec(t_fileio *fio, rvec *item,
416 const char *desc, const char *srcfile, int line)
422 ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
426 ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
432 gmx_bool gmx_fio_doe_ivec(t_fileio *fio, ivec *item,
433 const char *desc, const char *srcfile, int line)
439 ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
443 ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
449 gmx_bool gmx_fio_doe_string(t_fileio *fio, char *item,
450 const char *desc, const char *srcfile, int line)
456 ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
460 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
472 /* Array reading & writing */
474 gmx_bool gmx_fio_nreade_real(t_fileio *fio, real *item, int n,
475 const char *desc, const char *srcfile, int line)
480 for (i = 0; i < n; i++)
482 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc, srcfile, line);
488 gmx_bool gmx_fio_nreade_float(t_fileio *fio, float *item, int n,
489 const char *desc, const char *srcfile, int line)
494 for (i = 0; i < n; i++)
496 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
504 gmx_bool gmx_fio_nreade_double(t_fileio *fio, double *item, int n,
505 const char *desc, const char *srcfile, int line)
510 for (i = 0; i < n; i++)
512 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
519 gmx_bool gmx_fio_nreade_int(t_fileio *fio, int *item, int n,
520 const char *desc, const char *srcfile, int line)
525 for (i = 0; i < n; i++)
527 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc, srcfile, line);
533 gmx_bool gmx_fio_nreade_int64(t_fileio *fio, gmx_int64_t *item, int n,
534 const char *desc, const char *srcfile, int line)
539 for (i = 0; i < n; i++)
541 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT64, desc,
549 gmx_bool gmx_fio_nreade_uchar(t_fileio *fio, unsigned char *item, int n,
550 const char *desc, const char *srcfile, int line)
554 ret = fio->iotp->nread(fio, item, n, eioNUCHAR, desc, srcfile, line);
559 gmx_bool gmx_fio_nreade_ushort(t_fileio *fio, unsigned short *item, int n,
560 const char *desc, const char *srcfile, int line)
565 for (i = 0; i < n; i++)
567 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
574 gmx_bool gmx_fio_nreade_rvec(t_fileio *fio, rvec *item, int n,
575 const char *desc, const char *srcfile, int line)
579 ret = fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
584 gmx_bool gmx_fio_nreade_ivec(t_fileio *fio, ivec *item, int n,
585 const char *desc, const char *srcfile, int line)
590 for (i = 0; i < n; i++)
592 ret = ret && fio->iotp->nread(fio, item[i], 1, eioIVEC, desc, srcfile, line);
598 gmx_bool gmx_fio_nreade_string(t_fileio *fio, char *item[], int n,
599 const char *desc, const char *srcfile, int line)
604 for (i = 0; i < n; i++)
606 ret = ret && fio->iotp->nread(fio, item[i], 1, eioSTRING, desc, srcfile, line);
617 gmx_bool gmx_fio_nwritee_real(t_fileio *fio, const real *item, int n,
618 const char *desc, const char *srcfile, int line)
623 for (i = 0; i < n; i++)
625 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
632 gmx_bool gmx_fio_nwritee_float(t_fileio *fio, const float *item, int n,
633 const char *desc, const char *srcfile, int line)
638 for (i = 0; i < n; i++)
640 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
647 gmx_bool gmx_fio_nwritee_double(t_fileio *fio, const double *item, int n,
648 const char *desc, const char *srcfile, int line)
653 for (i = 0; i < n; i++)
655 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
662 gmx_bool gmx_fio_nwritee_int(t_fileio *fio, const int *item, int n,
663 const char *desc, const char *srcfile, int line)
668 for (i = 0; i < n; i++)
670 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc, srcfile,
677 gmx_bool gmx_fio_nwritee_int64(t_fileio *fio,
678 const gmx_int64_t *item, int n,
679 const char *desc, const char *srcfile, int line)
684 for (i = 0; i < n; i++)
686 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT64,
687 desc, srcfile, line);
693 gmx_bool gmx_fio_nwritee_uchar(t_fileio *fio, const unsigned char *item, int n,
694 const char *desc, const char *srcfile, int line)
698 ret = fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc, srcfile, line);
703 gmx_bool gmx_fio_nwritee_ushort(t_fileio *fio, const unsigned short *item, int n,
704 const char *desc, const char *srcfile, int line)
709 for (i = 0; i < n; i++)
711 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
719 gmx_bool gmx_fio_nwritee_rvec(t_fileio *fio, const rvec *item, int n,
720 const char *desc, const char *srcfile, int line)
724 ret = fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile, line);
729 gmx_bool gmx_fio_nwritee_ivec(t_fileio *fio, const ivec *item, int n,
730 const char *desc, const char *srcfile, int line)
735 for (i = 0; i < n; i++)
737 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
745 gmx_bool gmx_fio_nwritee_string(t_fileio *fio, const char *item[], int n,
746 const char *desc, const char *srcfile, int line)
751 for (i = 0; i < n; i++)
753 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc, srcfile,
762 /* array read/write functions */
764 gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
765 const char *desc, const char *srcfile, int line)
770 for (i = 0; i < n; i++)
774 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc,
779 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
789 gmx_bool gmx_fio_ndoe_float(t_fileio *fio, float *item, int n,
790 const char *desc, const char *srcfile, int line)
795 for (i = 0; i < n; i++)
799 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
804 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
814 gmx_bool gmx_fio_ndoe_double(t_fileio *fio, double *item, int n,
815 const char *desc, const char *srcfile, int line)
820 for (i = 0; i < n; i++)
824 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
829 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
839 gmx_bool gmx_fio_ndoe_gmx_bool(t_fileio *fio, gmx_bool *item, int n,
840 const char *desc, const char *srcfile, int line)
846 for (i = 0; i < n; i++)
850 ret = ret && fio->iotp->nread(fio, &itmp, 1, eioINT, desc,
857 ret = ret && fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc,
865 gmx_bool gmx_fio_ndoe_int(t_fileio *fio, int *item, int n,
866 const char *desc, const char *srcfile, int line)
871 for (i = 0; i < n; i++)
875 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc,
880 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc,
890 gmx_bool gmx_fio_ndoe_int64(t_fileio *fio, gmx_int64_t *item, int n,
891 const char *desc, const char *srcfile, int line)
896 for (i = 0; i < n; i++)
900 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT64, desc,
905 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT64, desc,
915 gmx_bool gmx_fio_ndoe_uchar(t_fileio *fio, unsigned char *item, int n,
916 const char *desc, const char *srcfile, int line)
922 ret = ret && fio->iotp->nread(fio, item, n, eioNUCHAR, desc,
927 ret = ret && fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc,
936 gmx_bool gmx_fio_ndoe_ushort(t_fileio *fio, unsigned short *item, int n,
937 const char *desc, const char *srcfile, int line)
942 for (i = 0; i < n; i++)
946 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
951 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
961 gmx_bool gmx_fio_ndoe_rvec(t_fileio *fio, rvec *item, int n,
962 const char *desc, const char *srcfile, int line)
968 ret = ret && fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
972 ret = ret && fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile,
981 gmx_bool gmx_fio_ndoe_ivec(t_fileio *fio, ivec *item, int n,
982 const char *desc, const char *srcfile, int line)
987 for (i = 0; i < n; i++)
991 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioIVEC, desc,
996 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
1000 gmx_fio_unlock(fio);
1006 gmx_bool gmx_fio_ndoe_string(t_fileio *fio, char *item[], int n,
1007 const char *desc, const char *srcfile, int line)
1009 gmx_bool ret = TRUE;
1012 for (i = 0; i < n; i++)
1016 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioSTRING, desc,
1021 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc,
1025 gmx_fio_unlock(fio);