#include "gromacs/fileio/filenm.h"
#include "gromacs/fileio/md5.h"
-#include "gromacs/legacyheaders/macros.h"
#include "gromacs/utility/fatalerror.h"
#include "gromacs/utility/futil.h"
#include "gromacs/utility/smalloc.h"
during the simulation. */
static tMPI_Thread_mutex_t open_file_mutex = TMPI_THREAD_MUTEX_INITIALIZER;
-
-/* These simple lists define the I/O type for these files */
-static const int ftpXDR[] =
-{ efTPR, efTRR, efEDR, efXTC, efTNG, efMTX, efCPT };
-
-const char *eioNames[eioNR] =
+const char *eioNames[eioNR] =
{
"REAL", "INT", "GMX_STE_T", "UCHAR", "NUCHAR", "USHORT", "RVEC", "NRVEC",
"IVEC", "STRING"
};
-
-static gmx_bool do_dummyread(t_fileio *fio, void *item, int nitem, int eio,
- const char *desc, const char *srcfile, int line);
-static gmx_bool do_dummywrite(t_fileio *fio, const void *item, int nitem, int eio,
- const char *desc, const char *srcfile, int line);
-
-const t_iotype dummy_iotype = {do_dummyread, do_dummywrite};
-
-static gmx_bool do_dummyread(
- t_fileio gmx_unused *fio, void gmx_unused *item, int gmx_unused nitem, int gmx_unused eio,
- const char gmx_unused *desc, const char gmx_unused *srcfile, int gmx_unused line)
-{
- gmx_fatal(FARGS, "File type not set!");
- return FALSE;
-}
-
-static gmx_bool do_dummywrite(
- t_fileio gmx_unused *fio, const void gmx_unused *item, int gmx_unused nitem, int gmx_unused eio,
- const char gmx_unused *desc, const char gmx_unused *srcfile, int gmx_unused line)
-{
- gmx_fatal(FARGS, "File type not set!");
- return FALSE;
-}
-
/******************************************************************
*
* Internal functions:
return rc;
}
-/* returns TRUE if the file type ftp is in the set set */
-static gmx_bool in_ftpset(int ftp, int nset, const int set[])
-{
- int i;
- gmx_bool bResult;
-
- bResult = FALSE;
- for (i = 0; (i < nset); i++)
- {
- if (ftp == set[i])
- {
- bResult = TRUE;
- }
- }
-
- return bResult;
-}
-
/* check the number of items given against the type */
void gmx_fio_check_nitem(int eio, int nitem, const char *file, int line)
srcfile, line);
}
-
-/* set the reader/writer functions based on the file type */
-static void gmx_fio_set_iotype(t_fileio *fio)
-{
- if (in_ftpset(fio->iFTP, asize(ftpXDR), ftpXDR))
- {
- fio->iotp = &xdr_iotype;
- }
- else
- {
- fio->iotp = &dummy_iotype;
- }
-}
-
-
/* lock the mutex associated with this fio. This needs to be done for every
type of access to the fio's elements. */
void gmx_fio_lock(t_fileio *fio)
}
/* Check if it should be opened as a binary file */
- if (strncmp(ftp2ftype(fn2ftp(fn)), "ASCII", 5))
+ if (!ftp_is_text(fn2ftp(fn)))
{
/* Not ascii, add b to file mode */
if ((strchr(newmode, 'b') == NULL) && (strchr(newmode, 'B') == NULL))
fio->fn = gmx_strdup(fn);
/* If this file type is in the list of XDR files, open it like that */
- if (in_ftpset(fio->iFTP, asize(ftpXDR), ftpXDR))
+ if (ftp_is_xdr(fio->iFTP))
{
/* First check whether we have to make a backup,
* only for writing, not for read or append.
fio->bDebug = FALSE;
fio->bOpen = TRUE;
- /* set the reader/writer functions */
- gmx_fio_set_iotype(fio);
-
/* and now insert this file into the list of open files. */
gmx_fio_insert(fio);
return fio;
gmx_fatal(FARGS, "File %s closed twice!\n", fio->fn);
}
- if (in_ftpset(fio->iFTP, asize(ftpXDR), ftpXDR))
+ if (ftp_is_xdr(fio->iFTP))
{
xdr_destroy(fio->xdr);
sfree(fio->xdr);
{
int rc = 0;
gmx_fio_lock(fio);
- if (!in_ftpset(fio->iFTP, asize(ftpXDR), ftpXDR))
+ if (!ftp_is_xdr(fio->iFTP))
{
rc = gmx_ffclose(fio->fp); /* fclose returns 0 if happy */
fio->fp = NULL;
void gmx_fio_checktype(t_fileio *fio)
{
- if (in_ftpset(fio->iFTP, asize(ftpXDR), ftpXDR))
- {
- return;
- }
- else
+ if (!ftp_is_xdr(fio->iFTP))
{
gmx_fatal(FARGS, "Can not read/write topologies to file type %s",
ftp2ext(fio->iFTP));
const char *desc, const char *srcfile, int line)
{
gmx_bool ret;
+ void *it = (void*)item; /* ugh.. */
gmx_fio_lock(fio);
- ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
+ ret = do_xdr(fio, it, 1, eioSTRING, desc, srcfile, line);
gmx_fio_unlock(fio);
return ret;
}
{
gmx_bool ret;
gmx_fio_lock(fio);
- if (fio->bRead)
- {
- ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
- }
- else
- {
- ret = fio->iotp->nwrite(fio, item, 1, eioREAL, desc, srcfile, line);
- }
+ ret = do_xdr(fio, item, 1, eioREAL, desc, srcfile, line);
gmx_fio_unlock(fio);
return ret;
{
gmx_bool ret;
gmx_fio_lock(fio);
- if (fio->bRead)
- {
- ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
- }
- else
- {
- ret = fio->iotp->nwrite(fio, item, 1, eioFLOAT, desc, srcfile, line);
- }
+ ret = do_xdr(fio, item, 1, eioFLOAT, desc, srcfile, line);
gmx_fio_unlock(fio);
return ret;
}
{
gmx_bool ret;
gmx_fio_lock(fio);
- if (fio->bRead)
- {
- ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
- }
- else
- {
- ret = fio->iotp->nwrite(fio, item, 1, eioDOUBLE, desc, srcfile, line);
- }
+ ret = do_xdr(fio, item, 1, eioDOUBLE, desc, srcfile, line);
gmx_fio_unlock(fio);
return ret;
}
gmx_fio_lock(fio);
if (fio->bRead)
{
- ret = fio->iotp->nread(fio, &itmp, 1, eioINT, desc, srcfile, line);
+ ret = do_xdr(fio, &itmp, 1, eioINT, desc, srcfile, line);
*item = itmp;
}
else
{
itmp = *item;
- ret = fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc, srcfile, line);
+ ret = do_xdr(fio, &itmp, 1, eioINT, desc, srcfile, line);
}
gmx_fio_unlock(fio);
return ret;
{
gmx_bool ret;
gmx_fio_lock(fio);
- if (fio->bRead)
- {
- ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
- }
- else
- {
- ret = fio->iotp->nwrite(fio, item, 1, eioINT, desc, srcfile, line);
- }
+ ret = do_xdr(fio, item, 1, eioINT, desc, srcfile, line);
gmx_fio_unlock(fio);
return ret;
}
{
gmx_bool ret;
gmx_fio_lock(fio);
- if (fio->bRead)
- {
- ret = fio->iotp->nread(fio, item, 1, eioINT64, desc, srcfile, line);
- }
- else
- {
- ret = fio->iotp->nwrite(fio, item, 1, eioINT64, desc, srcfile, line);
- }
+ ret = do_xdr(fio, item, 1, eioINT64, desc, srcfile, line);
gmx_fio_unlock(fio);
return ret;
}
{
gmx_bool ret;
gmx_fio_lock(fio);
- if (fio->bRead)
- {
- ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
- }
- else
- {
- ret = fio->iotp->nwrite(fio, item, 1, eioUCHAR, desc, srcfile, line);
- }
+ ret = do_xdr(fio, item, 1, eioUCHAR, desc, srcfile, line);
gmx_fio_unlock(fio);
return ret;
}
{
gmx_bool ret;
gmx_fio_lock(fio);
- if (fio->bRead)
- {
- ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
- }
- else
- {
- ret = fio->iotp->nwrite(fio, item, 1, eioUSHORT, desc, srcfile, line);
- }
+ ret = do_xdr(fio, item, 1, eioUSHORT, desc, srcfile, line);
gmx_fio_unlock(fio);
return ret;
}
{
gmx_bool ret;
gmx_fio_lock(fio);
- if (fio->bRead)
- {
- ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
- }
- else
- {
- ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
- }
+ ret = do_xdr(fio, item, 1, eioRVEC, desc, srcfile, line);
gmx_fio_unlock(fio);
return ret;
}
{
gmx_bool ret;
gmx_fio_lock(fio);
- if (fio->bRead)
- {
- ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
- }
- else
- {
- ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
- }
+ ret = do_xdr(fio, item, 1, eioIVEC, desc, srcfile, line);
gmx_fio_unlock(fio);
return ret;
}
{
gmx_bool ret;
gmx_fio_lock(fio);
- if (fio->bRead)
- {
- ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
- }
- else
- {
- ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
- }
+ ret = do_xdr(fio, item, 1, eioSTRING, desc, srcfile, line);
gmx_fio_unlock(fio);
return ret;
}
gmx_fio_lock(fio);
for (i = 0; i < n; i++)
{
- if (fio->bRead)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc,
- srcfile, line);
- }
- else
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
- srcfile, line);
- }
+ ret = ret && do_xdr(fio, &(item[i]), 1, eioREAL, desc,
+ srcfile, line);
}
gmx_fio_unlock(fio);
return ret;
gmx_fio_lock(fio);
for (i = 0; i < n; i++)
{
- if (fio->bRead)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
- srcfile, line);
- }
- else
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
- srcfile, line);
- }
+ ret = ret && do_xdr(fio, &(item[i]), 1, eioFLOAT, desc,
+ srcfile, line);
}
gmx_fio_unlock(fio);
return ret;
gmx_fio_lock(fio);
for (i = 0; i < n; i++)
{
- if (fio->bRead)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
- srcfile, line);
- }
- else
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
- srcfile, line);
- }
+ ret = ret && do_xdr(fio, &(item[i]), 1, eioDOUBLE, desc,
+ srcfile, line);
}
gmx_fio_unlock(fio);
return ret;
{
if (fio->bRead)
{
- ret = ret && fio->iotp->nread(fio, &itmp, 1, eioINT, desc,
- srcfile, line);
+ ret = ret && do_xdr(fio, &itmp, 1, eioINT, desc,
+ srcfile, line);
item[i] = itmp;
}
else
{
itmp = item[i];
- ret = ret && fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc,
- srcfile, line);
+ ret = ret && do_xdr(fio, &itmp, 1, eioINT, desc,
+ srcfile, line);
}
}
gmx_fio_unlock(fio);
gmx_fio_lock(fio);
for (i = 0; i < n; i++)
{
- if (fio->bRead)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc,
- srcfile, line);
- }
- else
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc,
- srcfile, line);
- }
+ ret = ret && do_xdr(fio, &(item[i]), 1, eioINT, desc,
+ srcfile, line);
}
gmx_fio_unlock(fio);
return ret;
gmx_fio_lock(fio);
for (i = 0; i < n; i++)
{
- if (fio->bRead)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT64, desc,
- srcfile, line);
- }
- else
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT64, desc,
- srcfile, line);
- }
+ ret = ret && do_xdr(fio, &(item[i]), 1, eioINT64, desc,
+ srcfile, line);
}
gmx_fio_unlock(fio);
return ret;
{
gmx_bool ret = TRUE;
gmx_fio_lock(fio);
- if (fio->bRead)
- {
- ret = ret && fio->iotp->nread(fio, item, n, eioNUCHAR, desc,
- srcfile, line);
- }
- else
- {
- ret = ret && fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc,
- srcfile, line);
- }
+ ret = ret && do_xdr(fio, item, n, eioNUCHAR, desc,
+ srcfile, line);
gmx_fio_unlock(fio);
return ret;
}
gmx_fio_lock(fio);
for (i = 0; i < n; i++)
{
- if (fio->bRead)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
- srcfile, line);
- }
- else
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
- srcfile, line);
- }
+ ret = ret && do_xdr(fio, &(item[i]), 1, eioUSHORT, desc,
+ srcfile, line);
}
gmx_fio_unlock(fio);
return ret;
{
gmx_bool ret = TRUE;
gmx_fio_lock(fio);
- if (fio->bRead)
- {
- ret = ret && fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
- }
- else
- {
- ret = ret && fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile,
- line);
- }
+ ret = ret && do_xdr(fio, item, n, eioNRVEC, desc, srcfile, line);
gmx_fio_unlock(fio);
return ret;
}
gmx_fio_lock(fio);
for (i = 0; i < n; i++)
{
- if (fio->bRead)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioIVEC, desc,
- srcfile, line);
- }
- else
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
- srcfile, line);
- }
+ ret = ret && do_xdr(fio, &(item[i]), 1, eioIVEC, desc,
+ srcfile, line);
}
gmx_fio_unlock(fio);
return ret;
gmx_fio_lock(fio);
for (i = 0; i < n; i++)
{
- if (fio->bRead)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioSTRING, desc,
- srcfile, line);
- }
- else
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc,
- srcfile, line);
- }
+ ret = ret && do_xdr(fio, &(item[i]), 1, eioSTRING, desc,
+ srcfile, line);
}
gmx_fio_unlock(fio);
return ret;