Further gmxfio cleanup related to xdr handling
authorTeemu Murtola <teemu.murtola@gmail.com>
Tue, 30 Jun 2015 10:39:40 +0000 (13:39 +0300)
committerTeemu Murtola <teemu.murtola@gmail.com>
Thu, 2 Jul 2015 03:05:27 +0000 (05:05 +0200)
- Remove unnecessary iotype redirection, since only XDR is used for
  this.  This removes a lot of repetitive code.
- Do not duplicate the list of XDR file types from filenm.c.
- Do not use string comparison for figuring out whether a file should be
  opened as text or binary.

Change-Id: I4522ce36b828283f02c56bb7920292019ae154fa

src/gromacs/fileio/filenm.c
src/gromacs/fileio/filenm.h
src/gromacs/fileio/gmxfio-impl.h
src/gromacs/fileio/gmxfio.c
src/gromacs/fileio/gmxfio_rw.c
src/gromacs/fileio/gmxfio_xdr.c

index 99f2a7da6553e3576463f03525176fc936e11dfe..1333091c11ac401d3dfaab5955b00a0447849cf6 100644 (file)
@@ -259,26 +259,22 @@ const char *ftp2desc(int ftp)
     }
 }
 
-const char *ftp2ftype(int ftp)
+gmx_bool ftp_is_text(int ftp)
 {
     if ((ftp >= 0) && (ftp < efNR))
     {
-        switch (deffile[ftp].ftype)
-        {
-            case eftASC:
-                return "ASCII";
-            case eftXDR:
-                return "XDR portable";
-            case eftTNG:
-                return "TNG";
-            case eftGEN:
-                return "";
-            default:
-                gmx_fatal(FARGS, "Unknown filetype %d in ftp2ftype", deffile[ftp].ftype);
-                break;
-        }
+        return deffile[ftp].ftype == eftASC;
+    }
+    return FALSE;
+}
+
+gmx_bool ftp_is_xdr(int ftp)
+{
+    if ((ftp >= 0) && (ftp < efNR))
+    {
+        return deffile[ftp].ftype == eftXDR;
     }
-    return "unknown";
+    return FALSE;
 }
 
 const char *ftp2defnm(int ftp)
index dbd2bf730b3d3c044736482b8a4e0ad28e57c7a0..4d49c0e428fe9d73ae2d0d2cb1fddd0cf5b2b0c6 100644 (file)
@@ -119,8 +119,8 @@ const char *ftp2defnm(int ftp);
 const char *ftp2defopt(int ftp);
 /* Return default option name for file type */
 
-const char *ftp2ftype(int ftp);
-/* Return Binary or ASCII depending on file type */
+gmx_bool ftp_is_text(int ftp);
+gmx_bool ftp_is_xdr(int ftp);
 
 const char *opt2fn(const char *opt, int nfile, const t_filenm fnm[]);
 /* Return the filename belonging to cmd-line option opt, or NULL when
index 486f0e0e8ac6113c4bb821726f6ee1a81f2c03ec..e91745a52ded5bad4d2b9b328345f8254ff90204 100644 (file)
 
 #include "gromacs/fileio/xdrf.h"
 
-/** the reader function for t_iotype */
-typedef gmx_bool read_func (t_fileio *fio, void *item, int nitem, int eio,
-                            const char *desc, const char *srcfile, int line);
-/** the writer function for t_iotype */
-typedef gmx_bool write_func (t_fileio *fio, const void *item, int nitem, int eio,
-                             const char *desc, const char *srcfile, int line);
-
-
-typedef struct
-{
-    read_func  *nread;
-    write_func *nwrite;
-} t_iotype;
-
 struct t_fileio
 {
     FILE           *fp;                /* the file pointer */
-    const t_iotype *iotp;              /* file type */
     gmx_bool        bOpen,             /* the file is open */
                     bRead,             /* the file is open for reading */
                     bDouble,           /* write doubles instead of floats */
@@ -94,9 +79,6 @@ struct t_fileio
                                           a lock */
 };
 
-/** handlers for XDR read/write */
-extern const t_iotype xdr_iotype;
-
 /** Names for different items that can be read/written with gmx_fio_do_*() */
 extern const char    *eioNames[eioNR];
 
@@ -112,4 +94,8 @@ void gmx_fio_lock(t_fileio *fio);
 /** unlock the mutex associated with a fio  */
 void gmx_fio_unlock(t_fileio *fio);
 
+/** xdr read/write routine */
+gmx_bool do_xdr(t_fileio *fio, void *item, int nitem, int eio,
+                const char *desc, const char *srcfile, int line);
+
 #endif
index 4f3d01dfdec219e3d3e474befc4842a8bbb56d53..cd487b1b5cc771008ea74e3700ca3b1592bc0a5e 100644 (file)
@@ -55,7 +55,6 @@
 
 #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"
@@ -82,41 +81,12 @@ static t_fileio *open_files = NULL;
    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:
@@ -139,24 +109,6 @@ static int gmx_fio_int_flush(t_fileio* fio)
     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)
@@ -182,21 +134,6 @@ void gmx_fio_fe(t_fileio *fio, int eio, const char *desc,
               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)
@@ -405,7 +342,7 @@ t_fileio *gmx_fio_open(const char *fn, const char *mode)
     }
 
     /* 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))
@@ -430,7 +367,7 @@ t_fileio *gmx_fio_open(const char *fn, const char *mode)
         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.
@@ -485,9 +422,6 @@ t_fileio *gmx_fio_open(const char *fn, const char *mode)
     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;
@@ -502,7 +436,7 @@ static int gmx_fio_close_locked(t_fileio *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);
@@ -549,7 +483,7 @@ int gmx_fio_fp_close(t_fileio *fio)
 {
     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;
@@ -784,11 +718,7 @@ int gmx_fio_get_output_file_positions(gmx_file_position_t **p_outputfiles,
 
 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));
index fbe7c5198d7d492140aaba42821c6e577b073e13..3e180847cb584a9400713496555a3377a5ddb0b5 100644 (file)
@@ -50,8 +50,9 @@ gmx_bool gmx_fio_writee_string(t_fileio *fio, const char *item,
                                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;
 }
@@ -61,14 +62,7 @@ gmx_bool gmx_fio_doe_real(t_fileio *fio, real *item,
 {
     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;
 
@@ -79,14 +73,7 @@ gmx_bool gmx_fio_doe_float(t_fileio *fio, float *item,
 {
     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;
 }
@@ -96,14 +83,7 @@ gmx_bool gmx_fio_doe_double(t_fileio *fio, double *item,
 {
     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;
 }
@@ -118,13 +98,13 @@ gmx_bool gmx_fio_doe_gmx_bool(t_fileio *fio, gmx_bool *item,
     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;
@@ -135,14 +115,7 @@ gmx_bool gmx_fio_doe_int(t_fileio *fio, int *item,
 {
     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;
 }
@@ -152,14 +125,7 @@ gmx_bool gmx_fio_doe_int64(t_fileio *fio, gmx_int64_t *item,
 {
     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;
 }
@@ -169,14 +135,7 @@ gmx_bool gmx_fio_doe_uchar(t_fileio *fio, unsigned char *item,
 {
     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;
 }
@@ -186,14 +145,7 @@ gmx_bool gmx_fio_doe_ushort(t_fileio *fio, unsigned short *item,
 {
     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;
 }
@@ -203,14 +155,7 @@ gmx_bool gmx_fio_doe_rvec(t_fileio *fio, rvec *item,
 {
     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;
 }
@@ -220,14 +165,7 @@ gmx_bool gmx_fio_doe_ivec(t_fileio *fio, ivec *item,
 {
     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;
 }
@@ -237,14 +175,7 @@ gmx_bool gmx_fio_doe_string(t_fileio *fio, char *item,
 {
     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;
 }
@@ -260,16 +191,8 @@ gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
     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;
@@ -285,16 +208,8 @@ gmx_bool gmx_fio_ndoe_float(t_fileio *fio, float *item, int n,
     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;
@@ -310,16 +225,8 @@ gmx_bool gmx_fio_ndoe_double(t_fileio *fio, double *item, int n,
     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;
@@ -338,15 +245,15 @@ gmx_bool gmx_fio_ndoe_gmx_bool(t_fileio *fio, gmx_bool *item, int n,
     {
         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);
@@ -361,16 +268,8 @@ gmx_bool gmx_fio_ndoe_int(t_fileio *fio, int *item, int n,
     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;
@@ -386,16 +285,8 @@ gmx_bool gmx_fio_ndoe_int64(t_fileio *fio, gmx_int64_t *item, int n,
     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;
@@ -408,16 +299,8 @@ gmx_bool gmx_fio_ndoe_uchar(t_fileio *fio, unsigned char *item, int n,
 {
     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;
 }
@@ -432,16 +315,8 @@ gmx_bool gmx_fio_ndoe_ushort(t_fileio *fio, unsigned short *item, int n,
     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;
@@ -454,15 +329,7 @@ gmx_bool gmx_fio_ndoe_rvec(t_fileio *fio, rvec *item, int n,
 {
     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;
 }
@@ -477,16 +344,8 @@ gmx_bool gmx_fio_ndoe_ivec(t_fileio *fio, ivec *item, int n,
     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;
@@ -502,16 +361,8 @@ gmx_bool gmx_fio_ndoe_string(t_fileio *fio, char *item[], int n,
     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;
index e651c0bc71066802d4d6421248e506f080cbb74b..3823670a79e3089263b86bdc7865a0198377833a 100644 (file)
 
 /* This is the part that reads xdr files.  */
 
-/* file type functions */
-static gmx_bool do_xdrread(t_fileio *fio, void *item, int nitem, int eio,
-                           const char *desc, const char *srcfile, int line);
-static gmx_bool do_xdrwrite(t_fileio *fio, const void *item, int nitem, int eio,
-                            const char *desc, const char *srcfile, int line);
-
-
-const t_iotype xdr_iotype = {do_xdrread, do_xdrwrite};
-
-
-static gmx_bool do_xdr(t_fileio *fio, void *item, int nitem, int eio,
-                       const char *desc, const char *srcfile, int line)
+gmx_bool do_xdr(t_fileio *fio, void *item, int nitem, int eio,
+                const char *desc, const char *srcfile, int line)
 {
     unsigned char   ucdum, *ucptr;
     bool_t          res = 0;
@@ -304,18 +294,3 @@ static gmx_bool do_xdr(t_fileio *fio, void *item, int nitem, int eio,
 
     return (res != 0);
 }
-
-
-static gmx_bool do_xdrread(t_fileio *fio, void *item, int nitem, int eio,
-                           const char *desc, const char *srcfile, int line)
-{
-    return do_xdr(fio, item, nitem, eio, desc, srcfile, line);
-}
-
-
-static gmx_bool do_xdrwrite(t_fileio *fio, const void *item, int nitem, int eio,
-                            const char *desc, const char *srcfile, int line)
-{
-    void *it = (void*)item; /* ugh.. */
-    return do_xdr(fio, it, nitem, eio, desc, srcfile, line);
-}