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.
46 #include "gromacs/utility/smalloc.h"
47 #include "gromacs/utility/futil.h"
52 #include "gmxfio_int.h"
55 /*******************************************************************
57 * READ/WRITE FUNCTIONS
59 *******************************************************************/
61 gmx_bool gmx_fio_reade_real(t_fileio *fio, real *item,
62 const char *desc, const char *srcfile, int line)
66 ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
71 gmx_bool gmx_fio_reade_float(t_fileio *fio, float *item,
72 const char *desc, const char *srcfile, int line)
76 ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
82 gmx_bool gmx_fio_reade_double(t_fileio *fio, double *item,
83 const char *desc, const char *srcfile, int line)
87 ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
92 gmx_bool gmx_fio_reade_int(t_fileio *fio, int *item,
93 const char *desc, const char *srcfile, int line)
97 ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
102 gmx_bool gmx_fio_reade_int64(t_fileio *fio, gmx_int64_t *item,
103 const char *desc, const char *srcfile, int line)
107 ret = fio->iotp->nread(fio, item, 1, eioINT64, desc, srcfile, line);
112 gmx_bool gmx_fio_reade_uchar(t_fileio *fio, unsigned char *item,
113 const char *desc, const char *srcfile, int line)
117 ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
123 gmx_bool gmx_fio_reade_ushort(t_fileio *fio, unsigned short *item,
124 const char *desc, const char *srcfile, int line)
128 ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
133 gmx_bool gmx_fio_reade_rvec(t_fileio *fio, rvec *item,
134 const char *desc, const char *srcfile, int line)
138 ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
143 gmx_bool gmx_fio_reade_ivec(t_fileio *fio, ivec *item,
144 const char *desc, const char *srcfile, int line)
148 ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
153 gmx_bool gmx_fio_reade_string(t_fileio *fio, char *item,
154 const char *desc, const char *srcfile, int line)
158 ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
166 gmx_bool gmx_fio_writee_real(t_fileio *fio, real item,
167 const char *desc, const char *srcfile, int line)
171 ret = fio->iotp->nwrite(fio, &item, 1, eioREAL, desc, srcfile, line);
176 gmx_bool gmx_fio_writee_float(t_fileio *fio, float item,
177 const char *desc, const char *srcfile, int line)
181 ret = fio->iotp->nwrite(fio, &item, 1, eioFLOAT, desc, srcfile, line);
186 gmx_bool gmx_fio_writee_double(t_fileio *fio, double item,
187 const char *desc, const char *srcfile, int line)
191 ret = fio->iotp->nwrite(fio, &item, 1, eioDOUBLE, desc, srcfile, line);
197 gmx_bool gmx_fio_writee_int(t_fileio *fio, int item,
198 const char *desc, const char *srcfile, int line)
202 ret = fio->iotp->nwrite(fio, &item, 1, eioINT, desc, srcfile, line);
207 gmx_bool gmx_fio_writee_int64(t_fileio *fio, gmx_int64_t item,
208 const char *desc, const char *srcfile, int line)
212 ret = fio->iotp->nwrite(fio, &item, 1, eioINT64, desc, srcfile, line);
217 gmx_bool gmx_fio_writee_uchar(t_fileio *fio, unsigned char item,
218 const char *desc, const char *srcfile, int line)
222 ret = fio->iotp->nwrite(fio, &item, 1, eioUCHAR, desc, srcfile, line);
227 gmx_bool gmx_fio_writee_ushort(t_fileio *fio, unsigned short item,
228 const char *desc, const char *srcfile, int line)
232 ret = fio->iotp->nwrite(fio, &item, 1, eioUSHORT, desc, srcfile, line);
237 gmx_bool gmx_fio_writee_rvec(t_fileio *fio, rvec *item,
238 const char *desc, const char *srcfile, int line)
242 ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
247 gmx_bool gmx_fio_writee_ivec(t_fileio *fio, ivec *item,
248 const char *desc, const char *srcfile, int line)
252 ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
257 gmx_bool gmx_fio_writee_string(t_fileio *fio, const char *item,
258 const char *desc, const char *srcfile, int line)
262 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
269 /* Read/write functions */
271 gmx_bool gmx_fio_doe_real(t_fileio *fio, real *item,
272 const char *desc, const char *srcfile, int line)
278 ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
282 ret = fio->iotp->nwrite(fio, item, 1, eioREAL, desc, srcfile, line);
289 gmx_bool gmx_fio_doe_float(t_fileio *fio, float *item,
290 const char *desc, const char *srcfile, int line)
296 ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
300 ret = fio->iotp->nwrite(fio, item, 1, eioFLOAT, desc, srcfile, line);
306 gmx_bool gmx_fio_doe_double(t_fileio *fio, double *item,
307 const char *desc, const char *srcfile, int line)
313 ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
317 ret = fio->iotp->nwrite(fio, item, 1, eioDOUBLE, desc, srcfile, line);
324 gmx_bool gmx_fio_doe_gmx_bool(t_fileio *fio, gmx_bool *item,
325 const char *desc, const char *srcfile, int line)
333 ret = fio->iotp->nread(fio, &itmp, 1, eioINT, desc, srcfile, line);
339 ret = fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc, srcfile, line);
345 gmx_bool gmx_fio_doe_int(t_fileio *fio, int *item,
346 const char *desc, const char *srcfile, int line)
352 ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
356 ret = fio->iotp->nwrite(fio, item, 1, eioINT, desc, srcfile, line);
362 gmx_bool gmx_fio_doe_int64(t_fileio *fio, gmx_int64_t *item,
363 const char *desc, const char *srcfile, int line)
369 ret = fio->iotp->nread(fio, item, 1, eioINT64, desc, srcfile, line);
373 ret = fio->iotp->nwrite(fio, item, 1, eioINT64, desc, srcfile, line);
379 gmx_bool gmx_fio_doe_uchar(t_fileio *fio, unsigned char *item,
380 const char *desc, const char *srcfile, int line)
386 ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
390 ret = fio->iotp->nwrite(fio, item, 1, eioUCHAR, desc, srcfile, line);
396 gmx_bool gmx_fio_doe_ushort(t_fileio *fio, unsigned short *item,
397 const char *desc, const char *srcfile, int line)
403 ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
407 ret = fio->iotp->nwrite(fio, item, 1, eioUSHORT, desc, srcfile, line);
413 gmx_bool gmx_fio_doe_rvec(t_fileio *fio, rvec *item,
414 const char *desc, const char *srcfile, int line)
420 ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
424 ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
430 gmx_bool gmx_fio_doe_ivec(t_fileio *fio, ivec *item,
431 const char *desc, const char *srcfile, int line)
437 ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
441 ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
447 gmx_bool gmx_fio_doe_string(t_fileio *fio, char *item,
448 const char *desc, const char *srcfile, int line)
454 ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
458 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
470 /* Array reading & writing */
472 gmx_bool gmx_fio_nreade_real(t_fileio *fio, real *item, int n,
473 const char *desc, const char *srcfile, int line)
478 for (i = 0; i < n; i++)
480 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc, srcfile, line);
486 gmx_bool gmx_fio_nreade_float(t_fileio *fio, float *item, int n,
487 const char *desc, const char *srcfile, int line)
492 for (i = 0; i < n; i++)
494 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
502 gmx_bool gmx_fio_nreade_double(t_fileio *fio, double *item, int n,
503 const char *desc, const char *srcfile, int line)
508 for (i = 0; i < n; i++)
510 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
517 gmx_bool gmx_fio_nreade_int(t_fileio *fio, int *item, int n,
518 const char *desc, const char *srcfile, int line)
523 for (i = 0; i < n; i++)
525 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc, srcfile, line);
531 gmx_bool gmx_fio_nreade_int64(t_fileio *fio, gmx_int64_t *item, int n,
532 const char *desc, const char *srcfile, int line)
537 for (i = 0; i < n; i++)
539 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT64, desc,
547 gmx_bool gmx_fio_nreade_uchar(t_fileio *fio, unsigned char *item, int n,
548 const char *desc, const char *srcfile, int line)
552 ret = fio->iotp->nread(fio, item, n, eioNUCHAR, desc, srcfile, line);
557 gmx_bool gmx_fio_nreade_ushort(t_fileio *fio, unsigned short *item, int n,
558 const char *desc, const char *srcfile, int line)
563 for (i = 0; i < n; i++)
565 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
572 gmx_bool gmx_fio_nreade_rvec(t_fileio *fio, rvec *item, int n,
573 const char *desc, const char *srcfile, int line)
577 ret = fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
582 gmx_bool gmx_fio_nreade_ivec(t_fileio *fio, ivec *item, int n,
583 const char *desc, const char *srcfile, int line)
588 for (i = 0; i < n; i++)
590 ret = ret && fio->iotp->nread(fio, item[i], 1, eioIVEC, desc, srcfile, line);
596 gmx_bool gmx_fio_nreade_string(t_fileio *fio, char *item[], int n,
597 const char *desc, const char *srcfile, int line)
602 for (i = 0; i < n; i++)
604 ret = ret && fio->iotp->nread(fio, item[i], 1, eioSTRING, desc, srcfile, line);
615 gmx_bool gmx_fio_nwritee_real(t_fileio *fio, const real *item, int n,
616 const char *desc, const char *srcfile, int line)
621 for (i = 0; i < n; i++)
623 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
630 gmx_bool gmx_fio_nwritee_float(t_fileio *fio, const float *item, int n,
631 const char *desc, const char *srcfile, int line)
636 for (i = 0; i < n; i++)
638 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
645 gmx_bool gmx_fio_nwritee_double(t_fileio *fio, const double *item, int n,
646 const char *desc, const char *srcfile, int line)
651 for (i = 0; i < n; i++)
653 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
660 gmx_bool gmx_fio_nwritee_int(t_fileio *fio, const int *item, int n,
661 const char *desc, const char *srcfile, int line)
666 for (i = 0; i < n; i++)
668 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc, srcfile,
675 gmx_bool gmx_fio_nwritee_int64(t_fileio *fio,
676 const gmx_int64_t *item, int n,
677 const char *desc, const char *srcfile, int line)
682 for (i = 0; i < n; i++)
684 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT64,
685 desc, srcfile, line);
691 gmx_bool gmx_fio_nwritee_uchar(t_fileio *fio, const unsigned char *item, int n,
692 const char *desc, const char *srcfile, int line)
696 ret = fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc, srcfile, line);
701 gmx_bool gmx_fio_nwritee_ushort(t_fileio *fio, const unsigned short *item, int n,
702 const char *desc, const char *srcfile, int line)
707 for (i = 0; i < n; i++)
709 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
717 gmx_bool gmx_fio_nwritee_rvec(t_fileio *fio, const rvec *item, int n,
718 const char *desc, const char *srcfile, int line)
722 ret = fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile, line);
727 gmx_bool gmx_fio_nwritee_ivec(t_fileio *fio, const ivec *item, int n,
728 const char *desc, const char *srcfile, int line)
733 for (i = 0; i < n; i++)
735 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
743 gmx_bool gmx_fio_nwritee_string(t_fileio *fio, const char *item[], int n,
744 const char *desc, const char *srcfile, int line)
749 for (i = 0; i < n; i++)
751 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc, srcfile,
760 /* array read/write functions */
762 gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
763 const char *desc, const char *srcfile, int line)
768 for (i = 0; i < n; i++)
772 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc,
777 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
787 gmx_bool gmx_fio_ndoe_float(t_fileio *fio, float *item, int n,
788 const char *desc, const char *srcfile, int line)
793 for (i = 0; i < n; i++)
797 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
802 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
812 gmx_bool gmx_fio_ndoe_double(t_fileio *fio, double *item, int n,
813 const char *desc, const char *srcfile, int line)
818 for (i = 0; i < n; i++)
822 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
827 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
837 gmx_bool gmx_fio_ndoe_gmx_bool(t_fileio *fio, gmx_bool *item, int n,
838 const char *desc, const char *srcfile, int line)
844 for (i = 0; i < n; i++)
848 ret = ret && fio->iotp->nread(fio, &itmp, 1, eioINT, desc,
855 ret = ret && fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc,
863 gmx_bool gmx_fio_ndoe_int(t_fileio *fio, int *item, int n,
864 const char *desc, const char *srcfile, int line)
869 for (i = 0; i < n; i++)
873 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc,
878 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc,
888 gmx_bool gmx_fio_ndoe_int64(t_fileio *fio, gmx_int64_t *item, int n,
889 const char *desc, const char *srcfile, int line)
894 for (i = 0; i < n; i++)
898 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT64, desc,
903 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT64, desc,
913 gmx_bool gmx_fio_ndoe_uchar(t_fileio *fio, unsigned char *item, int n,
914 const char *desc, const char *srcfile, int line)
920 ret = ret && fio->iotp->nread(fio, item, n, eioNUCHAR, desc,
925 ret = ret && fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc,
934 gmx_bool gmx_fio_ndoe_ushort(t_fileio *fio, unsigned short *item, int n,
935 const char *desc, const char *srcfile, int line)
940 for (i = 0; i < n; i++)
944 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
949 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
959 gmx_bool gmx_fio_ndoe_rvec(t_fileio *fio, rvec *item, int n,
960 const char *desc, const char *srcfile, int line)
966 ret = ret && fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
970 ret = ret && fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile,
979 gmx_bool gmx_fio_ndoe_ivec(t_fileio *fio, ivec *item, int n,
980 const char *desc, const char *srcfile, int line)
985 for (i = 0; i < n; i++)
989 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioIVEC, desc,
994 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
1004 gmx_bool gmx_fio_ndoe_string(t_fileio *fio, char *item[], int n,
1005 const char *desc, const char *srcfile, int line)
1007 gmx_bool ret = TRUE;
1010 for (i = 0; i < n; i++)
1014 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioSTRING, desc,
1019 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc,
1023 gmx_fio_unlock(fio);