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,2015, 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.
39 #include "gromacs/fileio/gmxfio.h"
41 #include "gmxfio-impl.h"
43 /*******************************************************************
45 * READ/WRITE FUNCTIONS
47 *******************************************************************/
49 gmx_bool gmx_fio_writee_string(t_fileio *fio, const char *item,
50 const char *desc, const char *srcfile, int line)
54 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
59 gmx_bool gmx_fio_doe_real(t_fileio *fio, real *item,
60 const char *desc, const char *srcfile, int line)
66 ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
70 ret = fio->iotp->nwrite(fio, item, 1, eioREAL, desc, srcfile, line);
77 gmx_bool gmx_fio_doe_float(t_fileio *fio, float *item,
78 const char *desc, const char *srcfile, int line)
84 ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
88 ret = fio->iotp->nwrite(fio, item, 1, eioFLOAT, desc, srcfile, line);
94 gmx_bool gmx_fio_doe_double(t_fileio *fio, double *item,
95 const char *desc, const char *srcfile, int line)
101 ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
105 ret = fio->iotp->nwrite(fio, item, 1, eioDOUBLE, desc, srcfile, line);
112 gmx_bool gmx_fio_doe_gmx_bool(t_fileio *fio, gmx_bool *item,
113 const char *desc, const char *srcfile, int line)
121 ret = fio->iotp->nread(fio, &itmp, 1, eioINT, desc, srcfile, line);
127 ret = fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc, srcfile, line);
133 gmx_bool gmx_fio_doe_int(t_fileio *fio, int *item,
134 const char *desc, const char *srcfile, int line)
140 ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
144 ret = fio->iotp->nwrite(fio, item, 1, eioINT, desc, srcfile, line);
150 gmx_bool gmx_fio_doe_int64(t_fileio *fio, gmx_int64_t *item,
151 const char *desc, const char *srcfile, int line)
157 ret = fio->iotp->nread(fio, item, 1, eioINT64, desc, srcfile, line);
161 ret = fio->iotp->nwrite(fio, item, 1, eioINT64, desc, srcfile, line);
167 gmx_bool gmx_fio_doe_uchar(t_fileio *fio, unsigned char *item,
168 const char *desc, const char *srcfile, int line)
174 ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
178 ret = fio->iotp->nwrite(fio, item, 1, eioUCHAR, desc, srcfile, line);
184 gmx_bool gmx_fio_doe_ushort(t_fileio *fio, unsigned short *item,
185 const char *desc, const char *srcfile, int line)
191 ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
195 ret = fio->iotp->nwrite(fio, item, 1, eioUSHORT, desc, srcfile, line);
201 gmx_bool gmx_fio_doe_rvec(t_fileio *fio, rvec *item,
202 const char *desc, const char *srcfile, int line)
208 ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
212 ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
218 gmx_bool gmx_fio_doe_ivec(t_fileio *fio, ivec *item,
219 const char *desc, const char *srcfile, int line)
225 ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
229 ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
235 gmx_bool gmx_fio_doe_string(t_fileio *fio, char *item,
236 const char *desc, const char *srcfile, int line)
242 ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
246 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
253 /* Array reading & writing */
255 gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
256 const char *desc, const char *srcfile, int line)
261 for (i = 0; i < n; i++)
265 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc,
270 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
280 gmx_bool gmx_fio_ndoe_float(t_fileio *fio, float *item, int n,
281 const char *desc, const char *srcfile, int line)
286 for (i = 0; i < n; i++)
290 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
295 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
305 gmx_bool gmx_fio_ndoe_double(t_fileio *fio, double *item, int n,
306 const char *desc, const char *srcfile, int line)
311 for (i = 0; i < n; i++)
315 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
320 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
330 gmx_bool gmx_fio_ndoe_gmx_bool(t_fileio *fio, gmx_bool *item, int n,
331 const char *desc, const char *srcfile, int line)
337 for (i = 0; i < n; i++)
341 ret = ret && fio->iotp->nread(fio, &itmp, 1, eioINT, desc,
348 ret = ret && fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc,
356 gmx_bool gmx_fio_ndoe_int(t_fileio *fio, int *item, int n,
357 const char *desc, const char *srcfile, int line)
362 for (i = 0; i < n; i++)
366 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc,
371 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc,
381 gmx_bool gmx_fio_ndoe_int64(t_fileio *fio, gmx_int64_t *item, int n,
382 const char *desc, const char *srcfile, int line)
387 for (i = 0; i < n; i++)
391 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT64, desc,
396 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT64, desc,
406 gmx_bool gmx_fio_ndoe_uchar(t_fileio *fio, unsigned char *item, int n,
407 const char *desc, const char *srcfile, int line)
413 ret = ret && fio->iotp->nread(fio, item, n, eioNUCHAR, desc,
418 ret = ret && fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc,
427 gmx_bool gmx_fio_ndoe_ushort(t_fileio *fio, unsigned short *item, int n,
428 const char *desc, const char *srcfile, int line)
433 for (i = 0; i < n; i++)
437 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
442 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
452 gmx_bool gmx_fio_ndoe_rvec(t_fileio *fio, rvec *item, int n,
453 const char *desc, const char *srcfile, int line)
459 ret = ret && fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
463 ret = ret && fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile,
472 gmx_bool gmx_fio_ndoe_ivec(t_fileio *fio, ivec *item, int n,
473 const char *desc, const char *srcfile, int line)
478 for (i = 0; i < n; i++)
482 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioIVEC, desc,
487 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
497 gmx_bool gmx_fio_ndoe_string(t_fileio *fio, char *item[], int n,
498 const char *desc, const char *srcfile, int line)
503 for (i = 0; i < n; i++)
507 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioSTRING, desc,
512 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc,